Pool aastat tagasi â avalikku PostgreSQL-ile.

Viimase kuue kuu jooksul tegime sellest , koostasime ĂŒldistava soovituste pĂ”hjal, mida see annab... kuid kĂ”ige tĂ€htsam on, et kogusime teie tagasisidet ja jĂ€lgisime tegelikke kasutusjuhtumeid.
Ja nĂŒĂŒd oleme valmis rÀÀkima uutest vĂ”imalustest, millest saate kasu lĂ”igata.
Erinevate plaaniformaatide tugi
Plaan logist koos pÀringuga
Valime otse konsoolist terve ploki, alates reast, millel on Query Text, koos kĂ”igi juhtivate tĂŒhikutega:
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)
⊠ja viskame kÔik kopeeritud otse plaani vÀlja, midagi ei jagades:

LĂ”pptulemusena saame boonuseks analĂŒĂŒsitud plaanile veel ka vahekaardi âkontekstâ, kus meie pĂ€ring on esitatud oma tĂ€ies ilus:

JSON ja 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
}
]"Oli see siis vĂ€liste jutumĂ€rkidega, nagu kopib pgAdmin, vĂ”i ilma â viskame samasse vĂ€ljasse, tulemuseks â ilu:

TĂ€psem visualiseerimine
Planeerimise aeg / TĂ€itmise aeg
NĂŒĂŒd on paremini nĂ€ha, kuhu kadus lisakĂ€itumise aeg pĂ€ringu tĂ€itmises:

I/O ajastus
MÔnikord tuleb kokku puutuda olukorraga, kus plaanis ei tundunud kurte, kuid tÀitmise aeg oli mingil moel ebanormaalselt pikk.
Siis tuleb öelda: "Oh, ilmselt oli sel hetkel serveri kett liiga koormatud, seetÔttu luges nii kaua!" Kuid see ei ole just kÔige tÀpsem...
Kuid seda on vÔimalik kindlalt mÀÀrata. Asi on selles, et PG-serveri konfiguratsiooni valikute hulgas on :
Sisaldab sisendi/vĂ€ljundi operatsioonide aja mÔÔtmist. See parameeter on vaikimisi vĂ€lja lĂŒlitatud, kuna selleks on vajalik pidev hetkeaja pĂ€rimine operatsioonisĂŒsteemilt, mis vĂ”ib mĂ”nel platvormil tööprotsessi oluliselt aeglustada. Ajakulu mÔÔtmise hindamiseks oma platvormil saate kasutada tööriista pg_test_timing. Sisendi/vĂ€ljundi statistikat saab kĂ€tte vaate pg_stat_database kaudu, EXPLAIN vĂ€ljundis (kui kasutate parameetrit BUFFERS) ja vaate pg_stat_statements kaudu.
Seda parameetrit saab aktiveerida ka kohaliku sessiooni raames:
SET track_io_timing = TRUE;NĂŒĂŒd on aga parim osa â oleme Ă”ppinud neid andmeid mĂ”istma ja kuvama, arvestades kĂ”iki tĂ€itmispuu transformaate:

Siit on nÀha, et 0.790 ms kogu tÀitmisajast lÀks 0.718 ms andmelehe lugemiseks, 0.044 ms selle kirjutamiseks, ning kogu muu kasulik tegevus kestis vaid 0.028 ms!
Tulevik PostgreSQL 13-ga
Kogu uuenduste ĂŒlevaate leiate , kuid rÀÀgime tĂ€psemalt plaanide muudatustest.
Planeerimise bufrid
Ressursside arvestamine, mis on mÀÀratud planeerijale, kajastub veel ĂŒhes paranduses, mis ei kuulu pg_stat_statements alla. EXPLAIN variant BUFFERS nĂ€itab, kui palju bufreid kasutati planeerimise etapis:
Seq Scan on pg_class (tegelikud read=386 silmus=1) Buffers: shared hit=9 loetud=4 Planeerimise aeg: 0.782 ms Buffers: shared hit=103 loetud=11 TĂ€itmise aeg: 0.219 ms

Inkrementaalne sortimine
Juhtudel, mil on vajalik sortimine mitme vĂ”tme jĂ€rgi (k1, k2, k3âŠ), saab planeerija nĂŒĂŒd kasutada teadlikkust sellest, et andmed on juba sorteeritud mitme esialgse vĂ”tme jĂ€rgi (nĂ€iteks k1 ja k2). Sel juhul ei ole vaja kogu andmemassi uuesti sorteerida, vaid jagada see jĂ€rjestikusteks gruppideks ĂŒhesuguste k1 ja k2 vÀÀrtustega ning âdosoortidaâ vĂ”tme k3 jĂ€rgi.
Nii jaguneb kogu sortimine mitmeks jÀrjestikuseks vÀiksema mahuga sortimiseks. See vÀhendab vajaliku mÀlu mahtu, lisaks vÔimaldab see esimesed andmed vÀlja anda varem, kui kogu sortimine on tÀielikult lÔpule viidud.
Inkrementaalne sort (tegelikud read=2949857 silmus=1) SortimisvÔti: ticket_no, passenger_id Eelsorteeritud vÔti: ticket_no TÀis-sortimised: 92184 Sortimismeetod: quicksort MÀlu: avg=31kB tipp=31kB -> Indeksi skaneerimine kasutades tickets_pkey tickete peal (tegelikud read=2949857 silmus=1) Planeerimise aeg: 2.137 ms TÀitmise aeg: 2230.019 ms


UI/UX tÀiustused.
Kuvapildid, need on igal pool!
NĂŒĂŒd on igas sakkides vĂ”imalik kiiresti sakkide ekraanipilt vĂ”tta lĂ”ikelauale saka kogu laiuse ja sĂŒgavuse ulatuses â âsihtmĂ€rgigaâ paremal ĂŒlal:

Tegelikult on enamik pilte selle avaldamise jaoks saadud just nii.
Soovitused sÔlmedes
Neid on mitte ainult rohkem, vaid igaĂŒhe kohta on ka , minnes lingile:

Arhiivist kustutamine
MĂ”ned palusid vĂ€ga lisada vĂ”imalus kustutada âtĂ€iestiâ isegi arhiivis mitte avaldatud plaane â palun, piisab vastava ikooni vajutamisest:

Noh, ja Àrge unustage, et meil on , kuhu saab kirjutada oma mÀrkusi ja ettepanekuid.
Allikas: habr.com
