Një vështrim i shpejtë në mekanizmin themelor të procesit të ekzekutimit të pyetjeve Postgres.

"Në artikullin tim të fundit", kam diskutuar shkurtimisht akordimin e performancës në aplikacionet e prapavijës Java dhe optimizimet e shtresave të bazës së të dhënave. Për të vazhduar atë diskutim, në këtë artikull do t'ju udhëzoj përmes procesit të ekzekutimit të pyetjeve të Postgres SQL dhe planifikuesit të pyetjeve, i cili është një temë e rëndësishme kur bëhet fjalë për optimizimet e pyetjeve dhe gjetjen e pyetjeve të ngadalta.

Si zakonisht, le të fillojmë me pyetjet çfarë dhe pse.

Cilat janë plani i pyetjeve dhe planifikuesi i pyetjeve?

Kur ekzekutoni një pyetje, backend-i juaj do të krijojë një lidhje duke përdorur një drejtues të ngjashëm me JDBC me bazën e të dhënave. Në Postgres, ky proces mbikëqyrës quhet "postmaster" dhe dëgjon në një port të caktuar TCP/IP për lidhjet hyrëse. Ky postmaster mban një proces të vetëm prapa për çdo proces klienti. Ky quhet modeli klient/server “proces për përdorues”. Pra, ky proces pranon pyetje të tekstit të thjeshtë dhe ia kalon ato analizuesit.

Faza tjetër në ekzekutimin e pyetjes është faza parser. Me fjalë të thjeshta, ajo që bën Parser është të kërkojë vërtetimin e sintaksës dhe të ndërtojë pemën e analizës.

Faza e tretë quhet sistemi/sistemi i rregullave të rishkruaj. Ai rishkruan pemën e analizës së krijuar në fazën e dytë në mënyrë që planifikuesi/optimizuesi të mund të fillojë të punojë në të.

Një pemë e caktuar e pyetjeve mund të ekzekutohet në mënyra të ndryshme, të cilat prodhojnë të njëjtin grup rezultatesh. Detyra e optimizuesit është të gjejë shtegun më të lirë dhe të ndërtojë një pemë plani të plotë për t'ia kaluar ekzekutuesit. Së fundi, siç sugjeron emri, ekzekutuesi bën ekzekutimin aktual dhe kthen rezultatet.

Pse duhet të dimë planin e pyetjeve? Pse shikoni nën kapuç?

Është e thjeshtë, Siç e shpjegova më herët, pyetja SQL që ne përpiqemi të ekzekutojmë nuk është ajo që përdoret aktualisht nga ekzekutuesi. Ndonjëherë optimizuesi mund të zgjedhë shtigje më të ngadalta dhe pyetjet tona SQL mund të optimizohen. me tutje. Pra, në një skenar kur vumë re se një pjesë e pyetjes është shumë e ngadaltë në një API, ne duhet të analizojmë dhe të gjejmë se çfarë po ndodh brenda motorit Postgres.

Kuptimi i një plani pyetjesh

Mënyra më e thjeshtë për të marrë një plan ekzekutimi është të vendosni komandën EXPLAIN përpara pyetjes suaj. Më poshtë janë disa nga opsionet e pranuara nga komanda EXPLAIN.

  • ANALIZO
    Kjo ekzekuton deklaratën dhe mban një regjistrim të kohës aktuale dhe numërimit të rreshtave. Kjo është kritike në identifikimin e burimit të vlerësimeve të pasakta të kardinalitetit (vlerësimet e numrit të rreshtave).
    shënim — SHPJEGON ANALIZA e ekzekuton pyetjen në bazën e të dhënave në kohë reale. Mbaje këtë në mend kur e përdor këtë me pyetje si UPDATE.
  • VERBOSE
    Parametri VERBOSE ju lejon të shfaqni informacione shtesë të planit.
  • BUFFERS
    Kjo shpjegon se sa të dhëna duhej të merreshin nga disku dhe sa të dhëna u morën nga cache PostgreSQL.
  • PERMBLEDHJE DHE KOHA
    Këto opsione aktivizohen si parazgjedhje kur përdoret ANALYZE. PËRMBLEDHJA mund të përdoret për të marrë informacion të përmbledhur në lidhje me planin e pyetjes (p.sh. informacioni i përgjithshëm i kohës) dhe KOHA do të përfshijë kohën aktuale të fillimit dhe kohën e shpenzuar në secilën nyje.
  • KOSTOT
    Ky opsion është vendosur si i vërtetë si parazgjedhje dhe nuk ka nevojë të specifikohet në mënyrë eksplicite nëse nuk dëshironi t'i vendosni ato në FALSE. Kjo përfshin informacione mbi fillimin e vlerësuar të çdo nyje plani dhe koston totale, si dhe numrin e vlerësuar të rreshtave dhe gjerësinë e çdo rreshti.
  • FORMAT
    Kjo ju lejon të specifikoni formatin e daljes së planit të pyetjes. Teksti (e parazgjedhur), JSON (shembulli i mësipërm), XML, YAML janë opsionet e disponueshme.

Le të analizojmë një pyetje të thjeshtë të përzgjedhjes *

Për demonstrim, unë do të përdor një bazë të dhënash mostër nga "postgresqltutorial.com". Gjeni "këtu" nëse dëshironi ta provoni vetë.
Le të fillojmë me pyetjen më të thjeshtë të përzgjedhjes së të gjithave.

Le të shqyrtojmë se çfarë mund të gjeni në këtë plan pyetjesh.

  • Seq Scan - Kjo është metoda e skanimit që përdoret për të marrë rezultatet.
  • Kostoja - Kjo është koha e parashikuar nga planifikuesi i pyetjeve.
  • Rreshtat - Numri i përgjithshëm i rreshtave të kthyer.
  • Sythe - Sa herë do të funksionojë kjo. Në këtë rast, do të ekzekutohet vetëm një herë sepse po marrim të gjitha të dhënat.

Le të bëjmë një pyetje pak komplekse me kushte në mënyrë që të kuptojmë strukturën e pemës

Përpara se të ekzekutoj pyetjen, kam krijuar një indeks mbi shumën e pagesës.

Plani i pyetjes është një strukturë e ngjashme me pemën. Një bllok i ndarë nga një -› quhet nyje. Këto janë pika ekzekutimi individuale. Planifikuesi i pyetjeve fillon ekzekutimin me nyjen më të brendshme dhe më pas e kthen vlerën në funksionin e jashtëm.

Në planin e mësipërm të ekzekutimit, mund të shohim se ka dy nyje që kanë të njëjtin prioritet. shared hit në thelb do të thotë se vlera tashmë është ruajtur në memorien kryesore të kompjuterit dhe nuk ishte e nevojshme të lexohej kjo nga hard disku. Goditjet e përbashkëta të nyjës së jashtme do të jenë të barabarta me totalin e goditjeve të përbashkëta të nyjeve të fëmijëve.
Shared-read 290 do të thotë që 290 blloqe (secili 8k) duhej të lexoheshin nga hard disku për të marrë grupin e plotë të rezultateve. Nëse e ridrejtojmë këtë përsëri, pyetja e lexuar do të jetë 0 dhe goditja e përbashkët do të jetë e barabartë me totalin e leximeve dhe goditjeve të mëparshme të përbashkëta.

Llojet e funksionimit në Postgres

Operacionet në planin e pyetjeve mund të ndahen në dy kategori kryesore.

  • Veprimi me një fëmijë - Rendit, Agregat
  • Operacioni me shumë fëmijë — Bashkim hash, Bashkim hash paralel, bashkim bashkimi

Në shembullin e mësipërm, ne mund të gjejmë disa operacione si renditja, bashkimi dhe skanimi. Pra, çdo nyje në plan kryen një operacion dhe i kalon rezultatet deri në nyjen tjetër në plan derisa të arrijë operacionin rrënjë.

Vizualizimi i planit të pyetjeve të Postgres

Ka mijëra vizualizues të planit të ekzekutimit në internet PostgreSQL të disponueshëm lirisht. explain.dalibo.com është ai që përdor personalisht.
E tëra çfarë ju duhet të bëni është të ekzekutoni pyetjen tuaj me opsionet e mëposhtme për të marrë planin e pyetjes në formatin JSON. Kjo do t'ju japë të gjitha informacionet nën kapak për të analizuar dhe kuptuar sjelljen aktuale të pyetjeve tuaja.

konkluzioni

Faleminderit per leximin. Për detaje të mëtejshme, mund të vizitoni gjithashtu faqet e referuara. Gëzuar kodimin!

Referencat

Anatomia e një plani pyetjesh PostgreSQL —dzone.com
Rruga e një pyetjeje-www.postgresql.org
Shembulli i bazës së të dhënave PostgreSQL-postgresqltutorial.com
PostgreSQL EXPLAIN- postgresqltutorial.com