X'EXPPLAIN huwa sieket dwar u kif tiksbu titkellem

Il-mistoqsija klassika li żviluppatur iġib lid-DBA tiegħu jew sid in-negozju jġib lil konsulent PostgreSQL kważi dejjem tinstema l-istess: "Għaliex it-talbiet jieħdu daqshekk żmien biex jitlestew fid-database?"

Sett tradizzjonali ta' raġunijiet:

  • algoritmu ineffiċjenti
    meta tiddeċiedi li tingħaqad ma' diversi CTEs fuq ftit għexieren ta' eluf ta' rekords
  • statistika skaduta
    jekk id-distribuzzjoni attwali tad-dejta fit-tabella hija diġà differenti ħafna minn dik miġbura minn ANALYZE l-aħħar darba
  • "plagg" fuq ir-riżorsi
    u m'għadx hemm biżżejjed qawwa tal-kompjuter dedikata tas-CPU, gigabytes tal-memorja qed jiġu ppumpjati kontinwament, jew id-diska ma tistax tlaħħaq mal-"xewqat" kollha tad-database
  • imblukkar minn proċessi li jikkompetu

U jekk l-imblukkar huma pjuttost diffiċli biex jaqbdu u janalizzaw, allura għal kull ħaġa oħra li għandna bżonn pjan ta' mistoqsija, li jistgħu jinkisbu bl-użu SPJEGA l-operatur (Huwa aħjar, ovvjament, li immedjatament JISPJEGAW (ANALIZA, BUFFERS) ...) jew modulu auto_explain.

Iżda, kif intqal fl-istess dokumentazzjoni,

"Li nifhmu pjan hija arti, u biex tikkontrollaha teħtieġ ċertu ammont ta' esperjenza..."

Imma tista 'tagħmel mingħajrha jekk tuża l-għodda t-tajba!

Xi tipikament jidher pjan ta' mistoqsija? Xi haga hekk:

Index Scan using pg_class_relname_nsp_index on pg_class (actual time=0.049..0.050 rows=1 loops=1)
  Index Cond: (relname = $1)
  Filter: (oid = $0)
  Buffers: shared hit=4
  InitPlan 1 (returns $0,$1)
    ->  Limit (actual time=0.019..0.020 rows=1 loops=1)
          Buffers: shared hit=1
          ->  Seq Scan on pg_class pg_class_1 (actual time=0.015..0.015 rows=1 loops=1)
                Filter: (relkind = 'r'::"char")
                Rows Removed by Filter: 5
                Buffers: shared hit=1

jew bħal dan:

"Append  (cost=868.60..878.95 rows=2 width=233) (actual time=0.024..0.144 rows=2 loops=1)"
"  Buffers: shared hit=3"
"  CTE cl"
"    ->  Seq Scan on pg_class  (cost=0.00..868.60 rows=9972 width=537) (actual time=0.016..0.042 rows=101 loops=1)"
"          Buffers: shared hit=3"
"  ->  Limit  (cost=0.00..0.10 rows=1 width=233) (actual time=0.023..0.024 rows=1 loops=1)"
"        Buffers: shared hit=1"
"        ->  CTE Scan on cl  (cost=0.00..997.20 rows=9972 width=233) (actual time=0.021..0.021 rows=1 loops=1)"
"              Buffers: shared hit=1"
"  ->  Limit  (cost=10.00..10.10 rows=1 width=233) (actual time=0.117..0.118 rows=1 loops=1)"
"        Buffers: shared hit=2"
"        ->  CTE Scan on cl cl_1  (cost=0.00..997.20 rows=9972 width=233) (actual time=0.001..0.104 rows=101 loops=1)"
"              Buffers: shared hit=2"
"Planning Time: 0.634 ms"
"Execution Time: 0.248 ms"

Iżda l-qari tal-pjan fit-test "mill-folja" huwa diffiċli ħafna u mhux ċar:

  • huwa muri fin-node somma mir-riżorsi tas-subtree
    jiġifieri, biex tifhem kemm ħadet ħin biex tesegwixxi node partikolari, jew kemm eżattament dan il-qari mit-tabella ġab id-dejta mid-diska, trid b'xi mod tnaqqas waħda mill-oħra
  • ħin tan-node huwa meħtieġ immoltiplika b'linji
    iva, it-tnaqqis mhuwiex l-aktar operazzjoni kumplessa li trid issir "fir-ras" - wara kollox, il-ħin ta 'eżekuzzjoni huwa indikat bħala l-medja għal eżekuzzjoni waħda ta' nodu, u jista 'jkun hemm mijiet minnhom
  • sew, u dan kollu flimkien ma jħalliniex inwieġbu l-mistoqsija ewlenija - allura min "l-iktar ħolqa dgħajfa"?

Meta ppruvajna nispjegaw dan kollu lil diversi mijiet mill-iżviluppaturi tagħna, indunajna li minn barra deher xi ħaġa bħal din:

X'EXPPLAIN huwa sieket dwar u kif tiksbu titkellem

U dan ifisser li għandna bżonn...

Tool

Fiha ppruvajna niġbru l-mekkaniżmi ewlenin kollha li jgħinu biex nifhmu "min għandu t-tort u x'għandu jagħmel" skont il-pjan u t-talba. Tajjeb, u aqsam parti mill-esperjenza tiegħek mal-komunità.
Iltaqa' u uża - spjega.tensor.ru

Viżibilità tal-pjanijiet

Huwa faċli li tifhem il-pjan meta jidher bħal dan?

Seq Scan on pg_class (actual time=0.009..1.304 rows=6609 loops=1)
  Buffers: shared hit=263
Planning Time: 0.108 ms
Execution Time: 1.800 ms

Mhux tassew.

Imma bħal dan, f'forma mqassrameta l-indikaturi ewlenin huma separati, huwa ħafna aktar ċar:

X'EXPPLAIN huwa sieket dwar u kif tiksbu titkellem

Imma jekk il-pjan ikun aktar ikkumplikat, hu se jiġi għall-salvataġġ distribuzzjoni tal-ħin tal-piechart minn nodi:

X'EXPPLAIN huwa sieket dwar u kif tiksbu titkellem

Ukoll, għall-għażliet l-aktar diffiċli huwa mgħaġġla biex jgħin chart tal-progress:

X'EXPPLAIN huwa sieket dwar u kif tiksbu titkellem

Pereżempju, hemm sitwazzjonijiet pjuttost mhux trivjali meta pjan jista' jkollu aktar minn għerq attwali wieħed:

X'EXPPLAIN huwa sieket dwar u kif tiksbu titkellemX'EXPPLAIN huwa sieket dwar u kif tiksbu titkellem

Ħjiel strutturali

Ukoll, jekk l-istruttura kollha tal-pjan u t-tikek fil-griżmejn tagħha diġà huma mqassma u viżibbli, għaliex ma tenfasizzahomx lill-iżviluppatur u tispjegahom bil-"lingwa Russa"?

X'EXPPLAIN huwa sieket dwar u kif tiksbu titkellemDiġà ġbarna ftit tużżana mudelli ta' rakkomandazzjoni bħal dawn.

Profiler mistoqsija linja b'linja

Issa, jekk tissuperponi l-mistoqsija oriġinali fuq il-pjan analizzat, tista 'tara kemm inqatta' ħin fuq kull dikjarazzjoni individwali - xi ħaġa bħal din:

X'EXPPLAIN huwa sieket dwar u kif tiksbu titkellem

...jew anke hekk:

X'EXPPLAIN huwa sieket dwar u kif tiksbu titkellem

Sostituzzjoni ta' parametri f'talba

Jekk "mehmuż" mhux biss talba mal-pjan, iżda wkoll il-parametri tagħha mil-linja DETTALJAR tar-reġistru, tista' wkoll tikkopjaha f'waħda mill-għażliet:

  • b'sostituzzjoni ta' valur fit-talba
    għall-eżekuzzjoni diretta fuq il-bażi tiegħek u profili ulterjuri
    SELECT 'const', 'param'::text;
  • b'sostituzzjoni ta' valur permezz ta' PREPARE/EXECUTE
    biex jimitaw ix-xogħol ta 'l-iskedar, meta l-parti parametrika tista' tiġi injorata - per eżempju, meta taħdem fuq tabelli diviżorji
    DEALLOCATE ALL;
    PREPARE q(text) AS SELECT 'const', $1::text;
    EXECUTE q('param'::text);
    

Arkivju tal-pjanti

Paste, analizza, aqsam mal-kollegi! Il-pjanijiet se jibqgħu arkivjati u tista' terġa' lura għalihom aktar tard: spjega.tensor.ru/archive

Imma jekk ma tridx li oħrajn jaraw il-pjan tiegħek, tinsiex tiċċekkja l-kaxxa "ma tippubblikax fl-arkivju".

Fl-artikoli li ġejjin se nitkellem dwar id-diffikultajiet u d-deċiżjonijiet li jinqalgħu meta janalizza pjan.

Sors: www.habr.com

Ixtri hosting affidabbli għal siti bi protezzjoni DDoS, servers VPS VDS 🔥 Ixtri hosting ta' websajts affidabbli bi protezzjoni DDoS, servers VPS VDS | ProHoster