developer á០áááºážá DBA ááá¯á·ááá¯áẠáá¯ááºáááºážááá¯ááºááŸááºáá¶ááá¯á· PostgreSQL á¡ááá¯ááºáááºáá¶áá¶ááá¯á· áá±ážáá±á¬ ááá¹ááááºáá±ážááœááºážááẠá¡ááŒá²áááºážáá®ážáá«áž áá°áá®áááº- "áá±áá¬áá±á·á áºááŸá¬ ááŒá®ážá¡á±á¬ááºáá¯ááºááá¯á· áá±á¬ááºážááá¯áá»ááºááœá±á áá¬ááŒá±á¬áá·áºááŒá¬áá¬áá²á"
ááá¯ážáá¬á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬áž-
- ááááá±á¬ááºáá±á¬ á¡ááºáááá¯áá®áááº
ááŸááºáááºážáá±á«ááºáž áá±á¬ááºážááŸáá·áºáá»á®ááŸááá±á¬ CTE á¡áá»á¬ážá¡ááŒá¬ážááᯠáááºáááºáá±á¬ááºááẠáá¯á¶ážááŒááºáá±á¬á¡áá« - ááááºááá¯ááºáá±á¬á
á¬áááºážááá¬áž
á¡áááºá ááá¬ážááŸá áá±áá¬ááŒáá·áºáá»á®ááŸá¯ááẠáá±á¬ááºáá¯á¶ážá¡ááŒááẠááœá²ááŒááºážá áááºááŒá¬ááŒááºážá០á á¯áá±á¬ááºážáá¬ážááá·áºá¡áá¬ááŸáá·áº á¡ááœááºááœá¬ááŒá¬ážáá±ááŒá®ááá¯áá»áŸááºá - á¡áááºážá¡ááŒá
áºáá»á¬ážáá±á«áºááœáẠ"ááááº"
CPU á á¡áá°ážáá®ážááá·áº ááœááºááŒá°áᬠáá«áá« áá¯á¶áá±á¬ááºááŸá¯ áááŸááá±á¬á·áá«á áááºááá¯áá®á áá áºáá«ááá¯ááºáá»á¬ážááᯠá¡áááºáááŒáẠá á¯ááºáá°áá±áááºá ááá¯á·ááá¯áẠáá±áá¬áá±á·á áºá "ááá¯áá»ááºááŸá¯" á¡á¬ážáá¯á¶ážááᯠdisk á áááŸá®ááá¯ááºáá«á - ááááºááá¯á·ááŒááºážá ááŒáá¯ááºááá¯ááºááŸá¯ááŒá áºá ááºáá»á¬ážááŸ
ááááºááá¯á·ááŒááºážáá»á¬ážááẠáááºážáá¯ááºááŒá®áž ááœá²ááŒááºážá
áááºááŒá¬ááẠá¡ááœááºáááºáá²áá«áá áá»áœááºá¯ááºááá¯á· ááá¯á¡ááºááá»áŸ á¡áá¬á¡á¬ážáá¯á¶ážá¡ááœáẠáá±ážááŒááºážááŸá¯á¡á
á®á¡á
ááºá¡áá¯á¶ážááŒá¯á áááŸáááá¯ááºáá«áááºá
áá°áá®áá±á¬á á¬ááœááºá á¬áááºážáá»á¬ážááœááºáá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºážá
"á¡á á®á¡á á¥áºáá áºáá¯ááᯠáá¬ážáááºááŒááºážááẠá¡áá¯ááá¬áá áºáá¯ááŒá áºááŒá®áž áááºážááᯠáá»áœááºážáá»ááºáááºááŸá¬ á¡ááœá±á·á¡ááŒá¯á¶áá»á¬ážá áœá¬ ááá¯á¡ááºáááº..."
áá«áá±ááá·áº ááŸááºáááºáá²á· tool ááá¯áá¯á¶ážááẠá¡á²áá«ááá«áá² áá¯ááºááá¯ááºáá«áááºá
áá±ážááŒááºážááŸá¯á¡á
á®á¡á
ááºááẠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº áááºááá¯á·ááŸáááááºážá ááá¯áá²á·ááá¯á·áá±á¬ áá
áºáá¯áá¯-
Index Scan using pg_class_relname_nsp_index on pg_class (actual time=0.049..0.050 rows=1 loops=1)
Index Cond: (relname = $1)
Filter: (oid = $0)
Buffers: shared hit=4
InitPlan 1 (returns $0,$1)
-> Limit (actual time=0.019..0.020 rows=1 loops=1)
Buffers: shared hit=1
-> Seq Scan on pg_class pg_class_1 (actual time=0.015..0.015 rows=1 loops=1)
Filter: (relkind = 'r'::"char")
Rows Removed by Filter: 5
Buffers: shared hit=1
ááá¯á·ááá¯áẠá€áá²á·ááá¯á·
"Append (cost=868.60..878.95 rows=2 width=233) (actual time=0.024..0.144 rows=2 loops=1)"
" Buffers: shared hit=3"
" CTE cl"
" -> Seq Scan on pg_class (cost=0.00..868.60 rows=9972 width=537) (actual time=0.016..0.042 rows=101 loops=1)"
" Buffers: shared hit=3"
" -> Limit (cost=0.00..0.10 rows=1 width=233) (actual time=0.023..0.024 rows=1 loops=1)"
" Buffers: shared hit=1"
" -> CTE Scan on cl (cost=0.00..997.20 rows=9972 width=233) (actual time=0.021..0.021 rows=1 loops=1)"
" Buffers: shared hit=1"
" -> Limit (cost=10.00..10.10 rows=1 width=233) (actual time=0.117..0.118 rows=1 loops=1)"
" Buffers: shared hit=2"
" -> CTE Scan on cl cl_1 (cost=0.00..997.20 rows=9972 width=233) (actual time=0.001..0.104 rows=101 loops=1)"
" Buffers: shared hit=2"
"Planning Time: 0.634 ms"
"Execution Time: 0.248 ms"
ááá¯á·áá±á¬áº âá á¬ááœááºááŸâ á á¬áá¬ážááŒáá·áº á¡á á®á¡á ááºááᯠáááºááŒááºážááẠá¡ááœááºáááºáá²ááŒá®áž áááŸááºážáááºážáááº-
- node ááœááºááŒááá¬ážáááºá áá
áºáááºáá
áºáááºáááºážááŒá
áºáá»á¬ážááŒáá·áº áá±á«ááºážá
ááºážáááºá
ááá¯ááá¯áááºááŸá¬á node áá áºáá¯á¡á¬áž execute áá¯ááºááẠá¡áá»áááºáááºáá»áŸááŒá¬áááºá ááá¯á·ááá¯áẠdisk á០data ááá¯áá°áá±á¬ááºáá¬áá±á¬ááá¬ážááŸá€áááºááŒááºážááá¯áááºáá»áŸá¡ááá¡áá»áá¬ážáááºáááºá áááºáááºá¡ááŒá¬ážáá áºáá¯ááŸáá áºáá¯ááá¯áá áºáááºážáááºážááŒáá·áºáá¯ááºáááºááá¯á¡ááºáááºá - node á¡áá»áááºááá¯á¡ááºáááºá á¡ááœááºáá»á¬ážááŒáá·áº ááŒáŸá±á¬ááºáá«á
áá¯ááºáá²á·á áá¯ááºááŒááºážááẠ"áá±á«ááºážá" áá¯ááºáá±á¬ááºáááá·áº á¡ááŸá¯ááºááœá±ážáá¯á¶ážáá¯ááºáá±á¬ááºááŸá¯ááá¯ááºáá« - á¡á¬ážáá¯á¶ážááŒá®ážáá±á¬ááºá node áá áºáá¯á execution áá áºáá¯á¡ááœáẠáá»ááºážáá»áŸá¡á¬ážááŒáá·áº execution time ááᯠááœáŸááºááŒááŒá®áž áááºážááá¯á·áá²á០áá¬ááŸáá·áºáá»á®ááŸáááá¯ááºáá«áááºá - áá±á¬ááºážááŒá®á áá«ááœá±á¡á¬ážáá¯á¶ážá áááºááá±ážááœááºážááᯠááŒá±ááá¯á· áá»áœááºáá±á¬áºááá¯á·ááᯠáá¬ážáá®ážáá¬ážáááºá áá«ááᯠáááºáá°áá²á "á¡áá¶á·áá¯á¶áž link"?
áá»áœááºá¯ááºááá¯á·ááẠá€á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá»áœááºá¯ááºááá¯á·á developer áá¬áá±á«ááºážáá»á¬ážá áœá¬á¡á¬áž ááŸááºážááŒáááºááŒáá¯ážá á¬ážáá±á¬á¡áá«á áááºážááẠá¡ááŒááºáááºá០ááŒáá·áºááááºááŸá¬ á€áá²á·ááá¯á·ááŒá áºáááºááᯠááááŸáááá¯ááºááá«áááºá
ááá¯ááá¯áá¬á áá«ááá¯á·ááá¯áááº...
tool áá áºáá¯
áááºážááœáẠáá»áœááºá¯ááºááá¯á·ááẠá¡á
á®á¡á
ááºááŸáá·áº áá±á¬ááºážááá¯áá»ááºá¡á "áááºáá°á·ááᯠá¡ááŒá
áºáááºááááºá áá¬áá¯ááºááááº" ááᯠáá¬ážáááºááá¯ááºá
á±ááá·áº á¡ááá á
ááºááŒááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠá
á¯áá±á¬ááºážááẠááŒáá¯ážá
á¬ážáá²á·áááºá áá±á¬ááºážááŒá®á áááºáá¡ááœá±á·á¡ááŒá¯á¶ááá
áºá
áááºáá
áºááá¯ááºážááá¯á¡ááá¯ááºážá¡ááá¯ááºážááŸáá·áºáá»áŸáá±áá«á
á¡áá¯á¶ážááŒá¯áááº-
á¡á á®á¡á á¥áºáá»á¬ážááᯠááŒááºááá¯ááºá áœááºážááŸáááŒááºážá
á¡á á®á¡á á¥áºááᯠáá¬ážáááºáááœááºááá¬ážá
Seq Scan on pg_class (actual time=0.009..1.304 rows=6609 loops=1)
Buffers: shared hit=263
Planning Time: 0.108 ms
Execution Time: 1.800 ms
ááááºáá±á¬á·ááá¯ááºáá°ážá
á€áá²á·ááá¯á·áá¬ážá á¡ááá¯áá±á¬ááºáá¯á¶á á¶áá±á¬á·ááœáŸááºááááºážáá»á¬ážááᯠááœá²ááŒá¬ážáá¬ážáá±á¬á¡áá«á ááá¯ááá¯ááŸááºážáááºážáááº-
áá«áá±ááá·áº á¡á
á®á¡á
á¥áºá ááá¯ááŸá¯ááºááœá±ážáá±áááºáá±á¬á· áá°á áááºáááºáááá·áºáááºá piechart á¡áá»áááºááŒáá·áºáá»á®áá±áž nodes á¡á¬ážááŒáá·áº-
áá±á¬ááºážááŒá®á á¡áááºáá²áá¯á¶ážáá±á¬ááœá±ážáá»ááºááŸá¯áá»á¬ážá¡ááœáẠáá°áá°áá®ááẠá¡áá»ááºááá¯áá±áááºá ááá¯ážáááºááŸá¯ááá¬áž:
á¥ááá¬á¡á¬ážááŒáá·áºá á¡á
á®á¡á
ááºáá
áºáá¯ááœáẠá¡ááŸááºáááẠá¡ááŒá
áºáá
áºáá¯áááºááá¯á ááŸáááá¯ááºáá±á¬á¡áá«ááœáẠá¡áá±ážá¡ááœá²ááá¯ááºáá±á¬ á¡ááŒá±á¡áá±áá»á¬áž ááŸááá«áááºá
ááœá²á·á ááºážáá¯á¶ááá¯ááºáᬠáá²ááœááºá áá»á¬áž
áá±á¬ááºážááŒá®á á¡á á®á¡á ááºáá áºáá¯áá¯á¶ážááŸáá·áº áááºážáá¡áá¬á¡áá¬áá»á¬ážááᯠáááºážáá»ááºážáá¬ážááŒá®áž ááŒááºááá¯ááºáá«áá áááºážááá¯á·ááᯠáá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áᶠáá®ážáá±á¬ááºážááá¯ážááŒááŒá®áž áááºážááá¯á·ááᯠ"áá¯ááŸá¬ážáá¬áá¬á áá¬áž" ááŒáá·áº ááŸááºážááŒáá«á
áá»áœááºá¯ááºááá¯á·ááẠááá¯ááá¯á·áá±á¬ á¡ááŒá¶ááŒá¯áá»áẠáá¯á¶á á¶ááááẠááŸá áºáá«áááºááᯠá á¯áá±á¬ááºážááŒá®ážááŒá áºáááºá
áá»ááºážááŒá±á¬ááºážá¡ááá¯áẠáá±ážááŒááºážááŸá¯ áááá¯ááá¯ááºáž
ááá¯á áá°áááºážáá±ážááœááºážááᯠááœá²ááŒááºážá áááºááŒá¬áá¬ážáá±á¬ á¡á á®á¡á ááºááœáẠááŒá¯á¶áá¯á¶áááá«áá áá áºáŠážáá»ááºážá á® áá¯ááºááŒááºáá»ááºáá áºáá¯á á®ááœáẠá¡áá»áááºáááºáá»áŸ áá¯á¶ážá áœá²áá²á·áááºááᯠá€áá²á·ááá¯á·áá±á¬ á¡áá¬áá»á¬ážááᯠáááºááœá±á·ááŒááºááá¯ááºáááº-
... ááá¯á·ááá¯áẠá€áá²á·ááá¯á·áááºá
áá±á¬ááºážááá¯áá»ááºáá áºáá¯á¡ááŒá Ạáá±á¬ááºáá»á¬ážááᯠá¡á á¬ážááá¯ážááŒááºážá
á¡áááºá áááºááẠá¡á á®á¡á ááºááá¯á· áá±á¬ááºážááá¯ááŸá¯áá áºáá¯áá¬ááá ááŸááºáááºážáá¡áá±ážá áááºá á¬ááŒá±á¬ááºážá០áááºážááá«áá¬áá®áá¬áá»á¬ážááá¯áá« "áá°ážááœá²áá«" áá«áá áááºááẠáááºážááᯠááœá±ážáá»ááºá áá¬áá»á¬ážáá²á០áá áºáá¯ááᯠáá°ážáá°ááá¯ááºáááº-
- áá±á¬ááºážááá¯ááŸá¯ááœááºáááºááá¯ážá¡á
á¬ážááá¯áž
áááºáá¡ááŒá±áá¶áá±á«áºááœááºááá¯ááºááá¯ááºááœááºáá»ááºááŒááºážááŸáá·áºáá±á¬ááºáááºáááá¯ááá¯ááºážá¡ááœááºSELECT 'const', 'param'::text;
- PREPARE/EXECUTE ááŸáá
áºááá·áº áááºááá¯ážá¡á
á¬ážááá¯ážááŒááºážááŒáá·áº
parametric á¡ááá¯ááºážááᯠáá»á áºáá»á°ááŸá¯ááá¯ááºááá·áºá¡áá« á¡áá»áááºááá¬ážáá±ážááœá²áá°áá¡áá¯ááºááᯠá¡áá¯áá°ááẠ- á¥ááá¬á ááá¯ááºážááŒá¬ážáá¬ážáá±á¬ ááá¬ážáá»á¬ážáá±á«áºááœáẠá¡áá¯ááºáá¯ááºááá·áºá¡áá«áDEALLOCATE ALL; PREPARE q(text) AS SELECT 'const', $1::text; EXECUTE q('param'::text);
á¡á á®á¡á ááºáá»á¬ážá á¯á ááºážááŸá¯
áá°ážááá·áºáá«á ááœá²ááŒááºážá
áááºááŒá¬áá«á áá¯ááºáá±á¬áºááá¯ááºáááºáá»á¬ážááŸáá·áºáá»áŸáá±áá«á á¡á
á®á¡á
á¥áºáá»á¬ážááᯠááááºážáááºážáá¬ážáááºááŒá
áºááŒá®áž áá±á¬ááºááá¯ááºážááœáẠáááºážááá¯á·áᶠáááºááŒááºáá¬ááá¯ááºáááº-
ááá¯á·áá±á¬áº ááá·áºá¡á á®á¡á ááºááᯠá¡ááŒá¬ážáá°áá»á¬ážá¡á¬áž áááŒááºá á±ááá¯áá«áá "ááŸááºáááºážááœáẠááá¯ááºáá±áá«ááŸáá·áº" á¡ááœááºááᯠá á áºáá±ážááẠááá±á·áá«ááŸáá·áºá
á¡á±á¬ááºáá«áá±á¬ááºážáá«ážáá»á¬ážááœáẠá¡á
á®á¡á
ááºáá
áºáá¯ááᯠááœá²ááŒááºážá
áááºááŒá¬áá±á¬á¡áá«ááœáẠááŒá
áºáá±á«áºáá¬áá±á¬ á¡áááºá¡áá²áá»á¬ážááŸáá·áº áá¯á¶ážááŒááºáá»ááºáá»á¬ážá¡ááŒá±á¬ááºáž ááœá±ážááœá±ážáá«áááºá
source: www.habr.com