рдЖрдзрд╛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ
рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЛрдВ рдореЗрдВ рд╣рдордиреЗ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ
рдФрд░ рдЕрдм рд╣рдо рдЖрдкрдХреЛ рдЙрди рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд┐рднрд┐рдиреНрди рдпреЛрдЬрдирд╛ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
рд▓реЙрдЧ рд╕реЗ рдпреЛрдЬрдирд╛, рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде
рд╕реАрдзреЗ рдХрдВрд╕реЛрд▓ рд╕реЗ, рд╣рдо рдкреВрд░реЗ рдмреНрд▓реЙрдХ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд▓рд╛рдЗрди рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдкреНрд░рд╢реНрди рдкрд╛рда, рд╕рднреА рдкреНрд░рдореБрдЦ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде:
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)
... рдФрд░ рдХреБрдЫ рднреА рдЕрд▓рдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЙрдкреА рдХреА рдЧрдИ рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рд╕реАрдзреЗ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдлреЗрдВрдХ рджреЗрдВ:
рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░, рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдмреЛрдирд╕ рднреА рдорд┐рд▓рддрд╛ рд╣реИ рд╕рдВрджрд░реНрдн рдЯреИрдм, рдЬрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдЗрд╕рдХреА рд╕рднреА рдорд╣рд┐рдорд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЬреЗрдПрд╕рдУрдПрди рдФрд░ рд╡рд╛рдИрдПрдПрдордПрд▓
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 рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдмрд┐рдирд╛ - рд╣рдо рдЙрд╕реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ, рдЖрдЙрдЯрдкреБрдЯ рд╕реБрдВрджрд░рддрд╛ рд╣реИ:
рдЙрдиреНрдирдд рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди
рдпреЛрдЬрдирд╛ рд╕рдордп / рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп
рдЕрдм рдЖрдк рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордп рдХрд╣рд╛рдБ рдЧрдпрд╛:
рдЖрдИ/рдУ рдЯрд╛рдЗрдорд┐рдВрдЧ
рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдврд╝рд╛ рдФрд░ рд▓рд┐рдЦрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ рд╣реИред
рдпрд╣рд╛рдБ рдпрд╣ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛:рдУрд╣, рд╢рд╛рдпрдж, рдЙрд╕ рд╕рдордп рд╕рд░реНрд╡рд░ рдкрд░ рдбрд┐рд╕реНрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд╛рд░рд┐рдд рдереА, рдЗрд╕реАрд▓рд┐рдП рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдореЗрдВ рдЗрддрдирд╛ рд╕рдордп рд▓рдЧрд╛!"рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдмрд╣реБрдд рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИ тАж
рд▓реЗрдХрд┐рди рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдордЬрд╝рдмреВрддреА рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреАрдЬреА рд╕рд░реНрд╡рд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рд╣реИрдВ track_io_timing
рд╕рдордпрдмрджреНрдз I/O рд╕рдВрдЪрд╛рд▓рди рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХреБрдЫ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдзреАрдорд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЕрдкрдиреЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд╕рдордп рдХреЗ рдКрдкрд░реА рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП pg_test_timing рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред I/O рдЖрдБрдХрдбрд╝реЗ pg_stat_database рджреГрд╢реНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, EXPLAIN рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ (рдЬрдм BUFFERS рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ pg_stat_statements рджреГрд╢реНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред
рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╕реНрдерд╛рдиреАрдп рд╕рддреНрд░ рдореЗрдВ рднреА рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
SET track_io_timing = TRUE;
рдЦреИрд░, рдЕрдм рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╡реГрдХреНрд╖ рдХреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╕реАрдЦ рд▓рд┐рдпрд╛ рд╣реИ:
рдпрд╣рд╛рдБ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЗ 0.790ms рдореЗрдВ рд╕реЗ, 0.718ms рдиреЗ рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рдкреГрд╖реНрда рдХреЛ рдкрдврд╝рд╛, 0.044ms - рдЗрд╕реЗ рд▓рд┐рдЦрд╛, рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЙрдкрдпреЛрдЧреА рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдХреЗрд╡рд▓ 0.028ms рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛!
PostgreSQL 13 рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдп
рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рдВрдкреВрд░реНрдг рдЕрд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ
рдпреЛрдЬрдирд╛ рдмрдлрд╝рд░реНрд╕
рдЕрдиреБрд╕реВрдЪрдХ рдХреЛ рдЖрдмрдВрдЯрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрд╛рдВрдХрди pg_stat_statements рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рджреВрд╕рд░реЗ рдкреИрдЪ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдмрдлрд╝рд░реНрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдЦреНрдпрд╛ рдпреЛрдЬрдирд╛ рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдмрдлрд╝рд░реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧреА:
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
рдпреВрдЖрдИ/рдпреВрдПрдХреНрд╕ рд╕реБрдзрд╛рд░
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣рд░ рдЬрдЧрд╣ рд╣реИрдВ!
рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдЯреИрдм рдкрд░ рдЬрд▓реНрджреА рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдЯреИрдм рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрдВ рдЯреИрдм рдХреА рдкреВрд░реА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдЧрд╣рд░рд╛рдИ рдХреЗ рд▓рд┐рдП - "рджреГрд╖реНрдЯрд┐" рд░рд╛рдЗрдЯ-рдЯреЙрдк:
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдЪрд┐рддреНрд░ рдЗрд╕реА рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдереЗред
рдиреЛрдбреНрд╕ рдкрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
рди рдХреЗрд╡рд▓ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
рдХреБрдЫ рдиреЗ рдХреНрд╖рдорддрд╛ рдорд╛рдВрдЧреА рд╣реИ "рдмрд┐рд▓реНрдХреБрд▓" рд╣рдЯрд╛рдПрдВ рдРрд╕реА рдпреЛрдЬрдирд╛рдПрдБ рднреА рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реИрдВ - рдХреГрдкрдпрд╛, рд╕рдВрдмрдВрдзрд┐рдд рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
рдареАрдХ рд╣реИ, рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ
рд╕реНрд░реЛрдд: www.habr.com