ááœááºáá²á·áá±á¬ áá
áºááŸá
áºááœá²
ááŒá®ážáá²á·áá²á·áááœá±á¡ááœááºážááŸá¬ áá»áœááºáá±á¬áºááá¯á·á áá°á·á¡ááŒá±á¬ááºážááœá± áá¯ááºáá²á·áá«áááºá
ááᯠáá»áœááºá¯ááºááá¯á·ááẠáááºá¡áá¯á¶ážááŒá¯ááá¯ááºááá·áº á¡ááºá¹áá«áááºá¡áá
áºáá»á¬ážá¡ááŒá±á¬ááºáž ááá·áºá¡á¬áž ááŒá±á¬ááŒááẠá¡ááá·áºááŒá
áºáá±áá«ááŒá®á
ááá°áá®áá±á¬ á¡á á®á¡á ááºáá±á¬áºáááºáá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯
áá±á¬ááºážááá¯áá»ááºááŸáá·áºá¡áá° ááŸááºáááºážá០á á®á ááºáá«á
ááœááºááá¯ážááºá០ááá¯ááºááá¯áẠáá»áœááºá¯ááºááá¯á·ááẠáá»ááºážááŒá±á¬ááºážá០á áááºá ááááºááá¯á·áá áºáá¯áá¯á¶ážááᯠááœá±ážáá»ááºáá«á Query TextáŠážáá±á¬ááºáá±áá¬áá»á¬áž á¡á¬ážáá¯á¶ážááŸáá·áºá
Query Text: INSERT INTO dicquery_20200604 VALUES ($1.*) ON CONFLICT (query)
DO NOTHING;
Insert on dicquery_20200604 (cost=0.00..0.05 rows=1 width=52) (actual time=40.376..40.376 rows=0 loops=1)
Conflict Resolution: NOTHING
Conflict Arbiter Indexes: dicquery_20200604_pkey
Tuples Inserted: 1
Conflicting Tuples: 0
Buffers: shared hit=9 read=1 dirtied=1
-> Result (cost=0.00..0.05 rows=1 width=52) (actual time=0.001..0.001 rows=1 loops=1)
... ááŒá®ážáá»áŸáẠáááºááá·áºá¡áá¬ááá¯áá»áŸ áááœá²áá¯ááºáá² á¡á á®á¡á ááºá¡ááœáẠáááºáááºáá²ááá¯á· ááá¯ááºááá¯ááºáá°ážáá°áá¬ážáá±á¬ á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá áºááá¯ááºáá«-
á¡ááœááºááœááºá áááºáááºáá¬ážáá±á¬ á¡á
á®á¡á
ááºá¡ááœáẠáá±á¬áááºá
áºáá
áºáá¯áááºáž áááŸááá«áááºá áááºá
ááºáá²ááºáá»áœááºá¯ááºááá¯á·ááá±á¬ááºážááá¯áá»ááºááᯠáááºážááá¯ááºá¡ááá±ááŒáá·áº áááºááŒááá·áºáá±áá¬ááœááºá
JSON ááŸáá·áº YAML
EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)
SELECT * FROM pg_class;
"[
{
"Plan": {
"Node Type": "Seq Scan",
"Parallel Aware": false,
"Relation Name": "pg_class",
"Alias": "pg_class",
"Startup Cost": 0.00,
"Total Cost": 1336.20,
"Plan Rows": 13804,
"Plan Width": 539,
"Actual Startup Time": 0.006,
"Actual Total Time": 1.838,
"Actual Rows": 10266,
"Actual Loops": 1,
"Shared Hit Blocks": 646,
"Shared Read Blocks": 0,
"Shared Dirtied Blocks": 0,
"Shared Written Blocks": 0,
"Local Hit Blocks": 0,
"Local Read Blocks": 0,
"Local Dirtied Blocks": 0,
"Local Written Blocks": 0,
"Temp Read Blocks": 0,
"Temp Written Blocks": 0
},
"Planning Time": 5.135,
"Triggers": [
],
"Execution Time": 2.389
}
]"
ááŒááºáááá¯ážáá¬ážáá»ááºáá»á¬ážááŒáá·áºáááºá pgAdmin áá±á¬áºáá®áá»á¬ážáá²á·ááá¯á·ááẠ- áá»áœááºá¯ááºááá¯á·ááẠáá°áá®áá±á¬á¡ááœááºááœáẠáá áºááá·áºááá¯ááºáá»áŸááºááẠá¡ááœááºááẠááŸááá«áááºá
á¡ááá·áºááŒáá·áº á áááºáá°ážáá¯á¶áá±á¬áºááŒááºážá
á á®á ááºáá»áááº/ á¡áá±á¬ááºá¡áááºáá±á¬áºáá»áááº
ááᯠáá±ážááŒááºážááŸá¯ááᯠáá¯ááºáá±á¬ááºááá·áºá¡áá« á¡áá»áááºááá¯ááœá¬ážááá·áºáá±áá¬ááᯠááá¯ááá¯áá±á¬ááºážááœááºá áœá¬ ááœá±á·ááŒááºááá¯ááºáá«ááŒá®-
I/O Timing
áá áºáá«ááá¶ááœáẠá¡áááºážá¡ááŒá áºáá»á¬ážááŸáá·áº áááºáááºáá»áŸáẠá á¬áá±ážááŒááºážááŸá¬ á¡ááœááºá¡áá»áœá¶ ááááºááᯠáááºááá±á¬áºáááºáž á¡ááŒá±á¬ááºážá¡áá»áá¯ážáá»áá¯ážááŒá±á¬áá·áº áá¯ááºáá±á¬ááºáá»áááºááẠáá¬ážááááºááá¯ááºáá±á¬ááºá¡á±á¬áẠáá»á¬ážááŒá¬ážáá±áá¯á¶ááááºá
áá®áá±áá¬ááŸá¬ ááŒá±á¬áááŸá¬áá¡áá¯ážá ááá¯á¡áá»áááºááœááºá áá¬áá¬áá±á«áºááŸá disk ááẠá¡áá¯ááºáá»á¬ážááœááºážáá±áá±áááºá ááá¯á·ááŒá±á¬áá·áº áááºááẠá¡ááœááºááŒá¬áá«áááºá"áá«áá±ááá·áº áááºááá¯á០ááááá»áá°áž...
áá«áá±ááá·áº á
áááºáá»áá¯á¶ááŒááºá
áœá¬ áá¯á¶ážááŒááºááá¯ááºáá«áááºá á¡ááŸááºááŸá¬ PG server á configuration options áá»á¬ážááŒá¬ážááœáẠááŸááá±áá«áááºá track_io_timing
á¡áá»áááºáááºááŸááºáá¬ážáá±á¬ I/O áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááœáá·áºáá«á á¡áá»áá¯á·áá±á¬ááááºáá±á¬ááºážáá»á¬ážááœáẠáááááá¬áá¬ááŸá±ážááœá±ážááœá¬ážááá¯ááºááá·áº áááºááŸáá¡áá»áááºááᯠá¡áááºáááŒááºáá±ážááŒááºážááẠáááºáááºááŸá¯á áá áºá០ááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº á€áááºáááºááᯠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº ááááºáá¬ážáááºá ááá·áºááááºáá±á¬ááºážáá±á«áºááŸá á¡áá»áááºááá¯ááºááŸá¯á á¡áá»á¯á¶ážáááºááŸá¯ááᯠááá·áºááŸááºážááẠpg_test_timeing utility ááᯠáááºáá¯á¶ážááá¯ááºáááºá pg_stat_database ááŒááºááœááºážááŸáááá·áº I/O á á¬áááºážá¡ááºážáá»á¬ážááᯠááá°ááá¯ááºáá«áááºá EXPLAIN output ááœáẠ(BUFFERS parameter ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«) pg_stat_statements ááŒááºááœááºážááŸáááá·áºá
á€ááœá±ážáá»ááºááŸá¯ááᯠáá±áááœááºáž á ááºááŸááºáá áºáá¯á¡ááœááºážááœááºáááºáž ááœáá·áºááá¯ááºáááº-
SET track_io_timing = TRUE;
áá±á¬ááºážááŒá®á ááᯠá¡áá±á¬ááºážáá¯á¶ážá¡ááá¯ááºážááŸá¬ ááœááºáá»ááºáá±ážáá áºáááºá á¡ááœááºáá°ážááŒá±á¬ááºážááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááá·áºááœááºážá ááºážá á¬ážáᬠá€áá±áá¬ááᯠáá¬ážáááºááŒá®áž ááŒáááẠáááºáá°áá²á·ááŒá®ážááŒá áºáááº-
á€áá±áá¬ááœáẠá
á¯á
á¯áá±á«ááºážáá¯ááºáá±á¬ááºáá»áááºá 0.790ms á០0.718ms ááẠáá±áá¬á
á¬áá»ááºááŸá¬áá
áºáá»ááºááŸá¬ááᯠáááºááŸá¯ááá¯ááºááŒá®áž 0.044ms ááŒáá·áº áááºážááá¯áá±ážáá¬ážááŒá®áž 0.028ms ááá¯áᬠá¡ááŒá¬ážá¡áá¯á¶ážáááºáá±á¬áá¯ááºáá±á¬ááºáá»ááºá¡á¬ážáá¯á¶ážááœáẠáá¯á¶ážá
áœá²áá²á·ááŒá±á¬ááºáž á€áá±áá¬ááœáẠáááºááœá±á·ááŒááºááá¯ááºáá«áááºá
PostgreSQL 13 ááŒáá·áº á¡áá¬áááº
á¡áá
áºá¡áááºážáá»á¬ážá¡ááŒá±á¬ááºáž á¡ááŒáá·áºá¡á
á¯á¶ááᯠááŒáá·áºáá«á
á á®á ááºáá±ážáá±á¬ ááŒá¬ážáá¶áá»á¬áž
á¡áá»áááºááá¬ážááœá²áá°áᶠááœá²áá±áá±ážáá¬ážáá±á¬ á¡áááºážá¡ááŒá áºáá»á¬ážá¡ááœáẠá á¬áááºážá¡ááºážááᯠpg_stat_statements áá»á¬ážááŸáá·áº ááááºááá¯ááºáá±á¬ á¡ááŒá¬áž patch ááœáẠáááºáááºáá«áááºá BUFFERS ááœá±ážáá»ááºááŸá¯ááŒáá·áº ááŸááºážááŒáá«á á á®áá¶ááááºážá¡ááá·áºá¡ááœááºáž á¡áá¯á¶ážááŒá¯ááá·áº ááŒá¬ážáá¶á¡áá±á¡ááœááºááᯠá¡á á®áááºáá¶áá«áááº-
Seq Scan on pg_class (actual rows=386 loops=1) Buffers: shared hit=9 read=4 Planning Time: 0.782 ms Buffers: shared hit=103 read=11 Execution Time: 0.219 ms
ááœá¬ážáá»á¬ážá¡áá»áá¯ážá¡á á¬áž
áá±á¬á·áá»á¬ážá áœá¬ááŒáá·áº á á®ááẠ(k1á k2á k3âŠ) ááá¯á¡ááºáá±á¬á¡áá«ááœááºá áá±áá¬ááᯠááááá±á¬á·áá»á¬ážá áœá¬ááŒáá·áº á á®áá¬ážááŒá®ážááŒá áºááẠ(á¥ááᬠk1 ááŸáá·áº k2) ááᯠá á®á ááºáá°ááẠááá¯á¡áá« á¡ááœáá·áºáá±á¬ááºážáá°ááá¯ááºááŒá®ááŒá áºáááºá á€ááá á¹á ááœááºá áááºááẠáá±áá¬á¡á¬ážáá¯á¶ážááᯠá¡áá áºáá áºááẠááŒááºá á®ááẠáááŒá áºááá¯ááºáá±á¬áºáááºáž áááºážááá¯á·ááᯠk1 ááŸáá·áº k2 áá°áá®áá±á¬áááºááá¯ážáá»á¬ážááŒáá·áº á¡á¯ááºá á¯áá»á¬ážááœá²áᬠáá±á¬á· k3 ááŒáá·áº "ááŒááºáááºá á®áááº" ááá¯á·ááᯠáááºááá¯ááºáá¯ááºáá±á¬ááºáá«á
ááá¯á·ááŒá±á¬áá·áº á¡áá»áá¯ážá¡á á¬ážááœá²ááŒááºážáá áºáá¯áá¯á¶ážááᯠááá¯ááá¯áá±ážáááºáá±á¬á¡ááœááºá¡á á¬ážá áááºááá¯ááºááœá²ááŒááºážá áááºááŒá¬ááŒááºážááá¯á· ááœá²ááœá¬ážáá«áááºá áááºážááẠááá¯á¡ááºáá±á¬ áááºááá¯áá®ááá¬áááᯠáá»áŸá±á¬á·áá»áá±ážááŒá®áž á¡áá»áá¯ážá¡á á¬ážá¡á¬ážáá¯á¶áž áááŒá®ážáá®ááœáẠááááá¯á¶ážáá±áá¬ááᯠááŒááºáá±ážááá¯ááºáááºá
Incremental Sort (actual rows=2949857 loops=1) Sort Key: ticket_no, passenger_id Presorted Key: ticket_no Full-sort Groups: 92184 Sort Method: quicksort Memory: avg=31kB peak=31kB -> Index Scan using tickets_pkey on tickets (actual rows=2949857 loops=1) Planning Time: 2.137 ms Execution Time: 2230.019 ms
UI/UX ááá¯ážáááºááŸá¯áá»á¬áž
áááºáá¬ážááŒááºáá¬ááºáá¯á¶áá»á¬ážááẠáá±áá¬ááá¯ááºážááœááºááŸááááºá
ááᯠáááºááºáá áºáá¯á á®ááœáẠáá»ááºááŒááºá áœá¬ áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ á¡ááœáá·áºá¡áá±ážáá áºáá¯ááŸááááºá áááºááºá áááºáá¬ážááŒááºáá¬ááºáá¯á¶ááᯠááá áºáá¯ááºááá¯á· áá°áá«á áááºááºá á¡áá»ááºááŸáá·áº á¡ááááºá¡ááẠáá áºáá¯áá¯á¶ážá¡ááœáẠ- "á¡ááŒááº" áá¬áááºááááº:
á¡ááŸááºáá±á¬á·á á€áá¯ááºáá±ááŸá¯á¡ááœáẠáá¬ááºáá¯á¶á¡áá»á¬ážá
á¯ááᯠá€áááºážááŒáá·áº áááŸááá²á·áááºá
node áá»á¬ážá¡ááœáẠá¡ááŒá¶ááŒá¯áá»ááºáá»á¬áž
á¡á²áá«ááœá±áááºáááá°ážá áááºáá¯ááºááá¯ááºáá²á· áá
áºáá¯á
á®áá±á¬ááºááŸááááºá
ááŸááºáááºážá០áááºááŸá¬ážááŒááºáž
ááá»áá¯á·á áá¯ááºááá¯ááºá áœááºážááŸáááá¯á· áá±á¬ááºážááá¯áááºá "áá¯á¶ážá" áá»ááºáá« áá±á¬áºááœááºážááá¯ááºááœáẠááá¯ááºáá±ááá±ážááá·áº á¡á á®á¡á ááºáá»á¬ážááẠ- áá»á±ážáá°ážááŒá¯á áááºááá¯ááºáᬠá¡áá¯ááºááœááºááᯠááŸáááºááá¯ááºáá«-
áá±á¬ááºážááŒá®á áá«ááá¯á·ááŸá¬ááŸááááºááá¯áá¬ááá±á·áá¡á±á¬ááº
source: www.habr.com