Gjasht muaj mĂ« parĂ« â publik nĂ« PostgreSQL.

Gjatë këtyre muajve ne bëmë një raport për të , përgatitëm një artikull për përshpejtimin e SQL-kërkesave Dhe tani jemi gati të flasim për mundësitë e reja që mund të përdorni.
Mbështetje për formate të ndryshme të planeve
Plani nga logu, së bashku me kërkesën
Direkt nga konsola, përzgjidhim të gjithë bllokun, duke filluar nga rreshti me
Query Text , me të gjitha hapësirat që parashohen: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)
Teksti i Kërkesës: INSERT INTO dicquery_20200604 VALUES ($1.*) ON CONFLICT (query) DO NOTHING; Insert në dicquery_20200604 (cost=0.00..0.05 rows=1 width=52) (koha reale=40.376..40.376 rows=0 loops=1) Konflikti i Zgjidhjes: NISHTA Indexet e Arbitrazhit të Konfliktit: dicquery_20200604_pkey Tuples e Shtuar: 1 Tuples Konfliktuese: 0 Buffers: hit të ndarë=9 lexuar=1 ndotur=1 -> Rezultati (cost=0.00..0.05 rows=1 width=52) (koha reale=0.001..0.001 rows=1 loops=1)
⊠dhe e hedhim të gjithë të kopjuar në fushën për planin, pa e ndarë asgjë:

Në daljen marrim si një bonus për planin e analizuar gjithashtu tavolinën "kontekst", ku kërkesa jonë paraqitet në gjithë shkëlqimin e saj:

JSON dhe 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
}
]"Sado me thonj tĂ« jashtĂ«m, siç kopjon pgAdmin, ose pa â e hedhim nĂ« tĂ« njĂ«jtĂ«n fushĂ«, nĂ« dalje â bukuri:

Vizualizim i zgjeruar
Koha e Planifikimit / Koha e Ekzekutimit
Tani shihet më qartë se ku ka shkuar koha shtesë gjatë ekzekutimit të kërkesës:

Koha I/O
Ndonjëherë përballemi me situata ku në plan duket se resurset janë lexuar-shkruar jo shumë, por koha e ekzekutimit duket disi jashtëzakonisht e madhe.
KĂ«tu ndonjeherĂ« duhet tĂ« themi: "O e dashur, ndoshta nĂ« atĂ« moment disku nĂ« server ishte shumĂ« i ngarkuar, pĂ«r kĂ«tĂ« arsye leximi ishte kaq i gjatĂ«!" Por ndoshta nuk Ă«shtĂ« aq e saktĂ«âŠ
Por mund ta përcaktojmë me saktësi të plotë. Pika është se midis opsioneve të konfigurimit të serverit PG, është :
Aktivizon matjen e kohës së operacioneve të hyrje/daljes. Ky parametr në përputhje me rregullat është i çaktivizuar, pasi për këtë kërkohet të kërkoni vazhdimisht kohën aktuale nga sistemi operativ, e cila mund të ngadalësojë ndjeshëm punën në disa platforma. Për të vlerësuar humbjet e matjes së kohës në platformën tuaj, mund të përdorni utilitarin pg_test_timing. Statistikën e hyrje/daljes mund ta merrni përmes përfaqësimit pg_stat_database, në daljen EXPLAIN (kur përdoret parametri BUFFERS) dhe përmes përfaqësimit pg_stat_statements.
Ky parametr mund të aktivizohet edhe brenda një sesioni lokal:
SET track_io_timing = TRUE;Po, tani gjëja më e këndshme është se kemi mësuar të kuptojmë dhe të paraqesim këta të dhëna duke marrë parasysh të gjitha transformimet e pemës së ekzekutimit:

KĂ«tu mund tĂ« vĂ«reni se nga 0.790ms e gjithĂ« kohĂ«s sĂ« ekzekutimit, 0.718ms kishte shkuar pĂ«r tĂ« lexuar njĂ« faqe tĂ« dhĂ«nash, 0.044ms â pĂ«r ta shkruar atĂ«, dhe pĂ«r tĂ« gjitha aktivitetet e tjera tĂ« dobishme ishte shpenzuar vetĂ«m 0.028ms!
E ardhmja me PostgreSQL 13
Për të lexuar një përmbledhje të plotë të noviteteve, mund të vizitoni , dhe ne konkretisht flasim për ndryshimet në plane.
Bashkëpunimi i burimeve të planifikimit
Konsiderimi i burimeve të rezervuara nga planifikuesi u reflektua gjithashtu në një patch tjetër, që nuk i përket pg_stat_statements. EXPLAIN me opsionin BUFFERS do të raportojë numrin e bufereve të përdorura në fazën e planifikimit:
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

Krijimi inkremental
NĂ« rastet kur kĂ«rkohet renditje sipas shumĂ« çelĂ«save (k1, k2, k3âŠ), planifikuesi tani mund tĂ« shfrytĂ«zojĂ« njohjen se tĂ« dhĂ«nat janĂ« renditur tashmĂ« sipas disa nga çelĂ«sat e parĂ« (pĂ«r shembull, k1 dhe k2). NĂ« kĂ«tĂ« rast, nuk Ă«shtĂ« e nevojshme tĂ« riprendim tĂ« gjitha tĂ« dhĂ«nat, por mund tĂ« ndahet nĂ« grupe tĂ« radhitura me tĂ« njĂ«jtin vlerĂ« k1 dhe k2, dhe "tĂ« plotĂ«sohet" sipas çelĂ«sit k3.
Kështu të gjithë renditja shpërbëhet në disa renditje sekondare më të vogla. Kjo zvogëlon sasinë e memories së nevojshme, dhe gjithashtu lejon që të dhënat e para të jepen më herët, përpara se të përfundojë e gjithë renditja.
Renditja inkrementale (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


Përmirësime UI/UX
Skrinët, ata janë kudo!
Tani tani çdo skedĂ« ka shfaqur mundĂ«sinĂ« pĂ«r tĂ« marrĂ« shpejt njĂ« screenshot tĂ« skedĂ«s nĂ« clipboard nĂ« tĂ« gjithĂ« gjerĂ«sinĂ« dhe thellĂ«sinĂ« e skedĂ«s â âshikimiâ nĂ« anĂ«n e djathtĂ«-lartĂ«:

Në thelb, shumica e imazheve për këtë publikim janë marrë pikërisht kështu.
Rekomandimet në nyje
Jo vetëm që janë bërë më shumë, por për secilën mund të , duke klikuar në lidhjen:

Fshirja nga arhiva
Disa kĂ«rkuan shumĂ« qĂ« tĂ« shtohej mundĂ«sia pĂ«r tĂ« fshirĂ« âplotĂ«sishtâ edhe planet qĂ« nuk publikohen nĂ« arhiv â ju lutem, mjafton tĂ« shtypni ikonĂ«n pĂ«rkatĂ«se:

Po ashtu, mos e haroni që kemi , ku mund të dërgoni vërejtjet dhe propozimet tuaja.
Burimi: habr.com
