Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

Kuus kuud tagasi me esitlesime explain.tensor.ru — avalikust teenusest pĂ€ringute plaanide analĂŒĂŒsimiseks ja visualiseerimiseks PostgreSQL-i jaoks.

Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

Viimaste kuude jooksul oleme koostanud selle kohta ettekande PGConf.Russia 2020, valmistanud kokkuvÔtva artikli SQL-pÀringute kiirendamisest 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:

Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

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

Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

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:

Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

TĂ€psem visualiseerimine

Planeerimise aeg / TĂ€itmise aeg

NĂŒĂŒd on selgem, kuhu tĂ€iendav aeg pĂ€ringu tĂ€itmisel kadus:

Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

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 track_io_timing:

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:

Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

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 detailse artikli, 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

Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

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

Saame aru, et PostgreSQL pÀringud on veelgi mugavamad
Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

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:

Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

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 detailsemalt lugeda artiklist, liikudes lingile:

Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

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:

Saame aru, et PostgreSQL pÀringud on veelgi mugavamad

Noh, ja Ă€rge unustage, et meil on toetusrĂŒhm, kuhu saate kirjutada oma mĂ€rkusi ja ettepanekuid.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster