Kuus kuud tagasi â avalikust PostgreSQL-i jaoks.

Viimaste kuude jooksul oleme koostanud selle kohta , valmistanud kokkuvÔtva pÔhinedes soovitustel, mida see pakub... kuid kÔige olulisem on, et oleme kogunud teie tagasisidet ja jÀlginud reaalseid kasutusjuhtumeid.
Ja nĂŒĂŒd oleme valmis rÀÀkima uutest vĂ”imalustest, mida saate kasutada.
Toetamine erinevate plaaniformaatide jaoks
Plaan logist, koos pÀringuga
Otseselt konsoolist valime kogu ploki, alustades reale Query Text, koos kĂ”ikide eesolevate tĂŒhi kohtadega:
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 paneme kogu kopeeritud otse plaani vÀljale, ega midagi jagamata:

VĂ€ljundina saame boonuseks analĂŒĂŒsitud plaani juurde ka vahekaart âkontekstâ, kus meie pĂ€ring on esitatud kogu oma hiilguses:

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
}
]"Seda, kas tolereerib vĂ€listes jutumĂ€rkides, nagu pgAdmin kopeerib, vĂ”i ilma â paneme sama vĂ€ljale, tulemus on suurepĂ€rane:

TĂ€psem visualiseerimine
Planeerimise aeg / TĂ€itmise aeg
NĂŒĂŒd on selgem, kuhu tĂ€iendav aeg pĂ€ringu tĂ€itmisel kadus:

I/O ajastus
MÔnikord tuleb kokku puutuda olukorraga, kus plaanis tundub, et ressursse on lugemise ja kirjutamise osas mitte liiga palju, kuid tÀitmise aeg on ebaproportsionaalselt pikk.
Siin tuleb öelda: "Oi, ilmselt oli sellel hetkel serveri kett liiga koormatud, seetĂ”ttu lugemine kestis nii kaua!" Aga see ei ole vĂ€ga tĂ€pneâŠ
Kuid seda saab kindlalt mÀÀrata. Asi on selles, et PG-serveri seadistuste seas on :
Sisaldab sisend-/vĂ€ljundoperatsioonide aja mÔÔtmist. See parameeter on vaikimisi keelatud, kuna selleks on vajalik pidev sĂŒsteemi ajakĂŒsimine, mis vĂ”ib mĂ”nel platvormil tööd oluliselt aeglustada. Aja mÔÔtmise kulude hindamiseks oma platvormil saab kasutada utiliiti pg_test_timing. Sisend-/vĂ€ljastatistikate saamiseks saab kasutada vaadet pg_stat_database, EXPLAIN vĂ€ljundis (kui kasutatakse parameetrit BUFFERS) ja lĂ€bi vaate pg_stat_statements.
Seda parameetrit saab lubada ka kohaliku sessiooni raames:
SET track_io_timing = TRUE;Ja nĂŒĂŒd kĂ”ige toredamini â me oleme Ă”ppinud neid andmeid mĂ”istma ja kuvama, arvestades kĂ”iki tĂ€itmispuu transformatsioone:

Siin vĂ”ib mĂ€rgata, et 0.790 ms koguaegsest tĂ€itmisest kulus 0.718 ms ĂŒhe andmelehe lugemiseks, 0.044 ms selle kirjutamiseks ja kogu muu kasuliku tegevuse jaoks kulus vaid 0.028 ms!
Tulevik PostgreSQL 13-ga
TĂ€ieliku ĂŒlevaate uuendustest leiate , aga me kĂ€sitleme spetsiifilisi muudatusi plaanides.
Planeerimise puuid
Ressursside planeerijale kajastatakse veel ĂŒhes plaastrit, mis ei ole seotud pg_stat_statements. EXPLAIN koos BUFFERS valikuga annab teada, kui palju puhvermĂ€lus kasutati planeerimise etapis:
Seq Scan pg_class (rea arvud=386 kordused=1) Puhver: jagatud hit=9 loetud=4 Planeerimise aeg: 0.782 ms Puhver: jagatud hit=103 loetud=11 KĂ€itamise aeg: 0.219 ms

Inkrementaalne sortimine
Juhtudel, kus on vajalik sortimine mitmete vĂ”tmete (k1, k2, k3âŠ) jĂ€rgi, vĂ”ib planeerija nĂŒĂŒd kasutada teadmisi, et andmed on juba sorteeritud mitme esialgse vĂ”tme jĂ€rgi (nĂ€iteks k1 ja k2). Nii et pole vaja kĂ”iki andmeid nullist uuesti sortida, vaid jagada need jĂ€rjestikusteks rĂŒhmadeks, millel on samad k1 ja k2 vÀÀrtused, ja 'dosoortida' vĂ”tme k3 jĂ€rgi.
Nii et kogu sortimine laguneb mitmeks jÀrjestikuseks vÀiksemaks sortimiseks. See vÀhendab vajaliku mÀlu mahtu ja vÔimaldab samuti esimesed andmed vÀlja anda enne, kui kogu sortimine on tÀielikult tehtud.
Inkrementaalne sorteerimine (reaalsetest ridadest=2949857 silmus=1) SortimisvĂ”ti: ticket_no, passenger_id Eelnevalt sortitud vĂ”ti: ticket_no TĂ€issorteerimisrĂŒhmad: 92184 Sorteerimismeetod: quicksort MĂ€lu: keskmine=31kB tipp=31kB -> Indeksi skaneerimine kasutades tickets_pkey pileteid (reaalsetest ridadest=2949857 silmus=1) Plaanimise aeg: 2.137 ms KĂ€itamise aeg: 2230.019 ms


UI/UX tÀiustused
Kuvatakse ekraanipilte, need on igal pool!
NĂŒĂŒd on igal vahelehel kiire vĂ”imalus vĂ”tta vahelehe ekraanipilt lĂ”ikepildile tĂ€ieliku laius ja sĂŒgavus vahelehel â âsihtimislaikâ paremal ĂŒleval:

Tegelikult on enamik piltidest selle avalduse jaoks saadud just niimoodi.
Soovitused sÔlmedes
Nende arv on mitte ainult suurenenud, vaid igaĂŒhe kohta on nĂŒĂŒd vĂ”imalik , liikudes lingile:

Arhiivist kustutamine
MĂ”ned soovisid vĂ€ga, et lisaks ei olnud vĂ”imalik kustutada âtĂ€ielikultâ isegi avaldamata arhiiviplaneeringud â palun, piisab, kui vajutad vastavale ikoonile:

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