Kini ṢAlaye jẹ ipalọlọ nipa ati bi o ṣe le jẹ ki o sọrọ

Ibeere Ayebaye ti olupilẹṣẹ mu wa si DBA rẹ tabi oniwun iṣowo kan mu wa si alamọran PostgreSQL kan fẹrẹ dun nigbagbogbo kanna: "Kini idi ti awọn ibeere ṣe pẹ to lati pari lori aaye data?"

Eto ti aṣa ti awọn idi:

  • aisekokari alugoridimu
    nigbati o ba pinnu lati Darapọ mọ ọpọlọpọ awọn CTE lori tọkọtaya ti ẹgbẹẹgbẹrun awọn igbasilẹ
  • ti igba atijọ statistiki
    ti o ba jẹ pe pinpin gangan ti data ninu tabili ti yatọ pupọ tẹlẹ si eyiti a gba nipasẹ ANALYZE ni akoko to kọja
  • "plug" lori oro
    ati pe ko si agbara iširo igbẹhin ti Sipiyu, gigabytes ti iranti ti wa ni fifa nigbagbogbo, tabi disiki ko le tẹsiwaju pẹlu gbogbo “awọn ifẹ” ti data data
  • ìdènà lati awọn ilana idije

Ati pe ti awọn idena ba nira pupọ lati mu ati itupalẹ, lẹhinna fun ohun gbogbo miiran ti a nilo ìbéèrè ètò, eyi ti o le ṣee gba nipa lilo ṢAlaye oniṣẹ (O dara julọ, nitorinaa, lati ṣe alaye lẹsẹkẹsẹ (ANALYZE, BUFFERS)…) tabi auto_explain module.

Ṣugbọn, bi a ti sọ ninu iwe kanna,

“Lílóye ètò kan jẹ́ iṣẹ́ ọnà, àti láti mọ̀ ọ́n nílò ìrírí kan...”

Ṣugbọn o le ṣe laisi rẹ ti o ba lo ọpa ti o tọ!

Kí ni ètò ìbéèrè sábà máa ń jọ? Nkan ba yen:

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

tabi bii eyi:

"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"

Ṣugbọn kika ero inu ọrọ “lati inu iwe naa” nira pupọ ati koyewa:

  • ti han ni ipade apao nipa subtree oro
    iyẹn ni, lati loye iye akoko ti o gba lati ṣiṣẹ ipade kan pato, tabi melo ni kika kika yii lati tabili ti o mu data lati disiki naa, o nilo lati yọkuro ọkan lati ekeji.
  • ipade akoko wa ni ti nilo isodipupo nipasẹ yipo
    Bẹẹni, iyokuro kii ṣe iṣẹ ti o nira julọ ti o nilo lati ṣe “ni ori” - lẹhinna, akoko ipaniyan jẹ itọkasi bi apapọ fun ipaniyan kan ti ipade kan, ati pe awọn ọgọọgọrun wọn le wa.
  • daradara, ati gbogbo eyi papo idilọwọ wa lati dahun ibeere akọkọ - ki tani "ọna asopọ ti o lagbara julọ"?

Nigba ti a gbiyanju lati ṣalaye gbogbo eyi si awọn ọgọọgọrun ti awọn olupilẹṣẹ wa, a rii pe lati ita o dabi nkan bi eyi:

Kini ṢAlaye jẹ ipalọlọ nipa ati bi o ṣe le jẹ ki o sọrọ

Ati pe eyi tumọ si pe a nilo ...

Irinṣẹ

Ninu rẹ a gbiyanju lati gba gbogbo awọn ẹrọ ẹrọ bọtini ti o ṣe iranlọwọ ni oye “ẹniti o jẹ ẹbi ati kini lati ṣe” ni ibamu si ero ati ibeere. O dara, ki o pin apakan ti iriri rẹ pẹlu agbegbe.
Pade ati lo - alaye.tensor.ru

Hihan ti awọn eto

Ṣe o rọrun lati ni oye ero naa nigbati o dabi eyi?

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

Kii ṣe rara.

Sugbon bi eleyi, ni abbreviated fọọmunigbati awọn olufihan bọtini ba yapa, o han gbangba pupọ:

Kini ṢAlaye jẹ ipalọlọ nipa ati bi o ṣe le jẹ ki o sọrọ

Ṣugbọn ti eto naa ba ni idiju diẹ sii, yoo wa si igbala pichart akoko pinpin nipasẹ awọn apa:

Kini ṢAlaye jẹ ipalọlọ nipa ati bi o ṣe le jẹ ki o sọrọ

O dara, fun awọn aṣayan ti o nira julọ o wa ni iyara lati ṣe iranlọwọ itesiwaju chart:

Kini ṢAlaye jẹ ipalọlọ nipa ati bi o ṣe le jẹ ki o sọrọ

Fun apẹẹrẹ, awọn ipo ti kii ṣe bintin lo wa nigbati ero kan le ni diẹ sii ju gbongbo gidi kan:

Kini ṢAlaye jẹ ipalọlọ nipa ati bi o ṣe le jẹ ki o sọrọKini ṢAlaye jẹ ipalọlọ nipa ati bi o ṣe le jẹ ki o sọrọ

Awọn amọran igbekale

O dara, ti gbogbo eto ti ero naa ati awọn aaye ọgbẹ rẹ ti wa tẹlẹ ati han, kilode ti o ko ṣe afihan wọn si olupilẹṣẹ ki o ṣe alaye wọn ni “ede Russia”?

Kini ṢAlaye jẹ ipalọlọ nipa ati bi o ṣe le jẹ ki o sọrọA ti gba tẹlẹ mejila mejila iru awọn awoṣe iṣeduro.

Laini-nipasẹ-ila ibeere profaili

Ni bayi, ti o ba gbe ibeere atilẹba sori ero atupale, o le rii iye akoko ti o lo lori alaye kọọkan - nkan bii eyi:

Kini ṢAlaye jẹ ipalọlọ nipa ati bi o ṣe le jẹ ki o sọrọ

tabi paapaa bii eyi:

Kini ṢAlaye jẹ ipalọlọ nipa ati bi o ṣe le jẹ ki o sọrọ

Fidipo paramita sinu kan ìbéèrè

Ti o ba “so” kii ṣe ibeere nikan si ero naa, ṣugbọn tun awọn aye rẹ lati laini Apejuwe ti log, o le daakọ ni afikun ni ọkan ninu awọn aṣayan:

  • pẹlu aropo iye ninu ibeere naa
    fun ipaniyan taara lori ipilẹ rẹ ati alaye siwaju sii

    SELECT 'const', 'param'::text;
  • pẹlu aropo iye nipasẹ PREPARE / EXECUTE
    lati farawe iṣẹ ti oluṣeto, nigbati apakan parametric le ṣe akiyesi - fun apẹẹrẹ, nigbati o ba n ṣiṣẹ lori awọn tabili ti a pin.

    DEALLOCATE ALL;
    PREPARE q(text) AS SELECT 'const', $1::text;
    EXECUTE q('param'::text);
    

Archive ti awọn eto

Lẹẹmọ, itupalẹ, pin pẹlu awọn ẹlẹgbẹ! Awọn ero naa yoo wa ni ipamọ ati pe o le pada si wọn nigbamii: alaye.tensor.ru/archive

Ṣugbọn ti o ko ba fẹ ki awọn miiran rii ero rẹ, maṣe gbagbe lati ṣayẹwo apoti “maṣe ṣe atẹjade ni ile-ipamọ”.

Ninu awọn nkan atẹle Emi yoo sọrọ nipa awọn iṣoro ati awọn ipinnu ti o dide nigbati a ṣe itupalẹ ero kan.

orisun: www.habr.com

Fi ọrọìwòye kun