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
Ṣ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:
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 -
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ọ:
Ṣugbọn ti eto naa ba ni idiju diẹ sii, yoo wa si igbala pichart akoko pinpin nipasẹ awọn apa:
O dara, fun awọn aṣayan ti o nira julọ o wa ni iyara lati ṣe iranlọwọ itesiwaju chart:
Fun apẹẹrẹ, awọn ipo ti kii ṣe bintin lo wa nigbati ero kan le ni diẹ sii ju gbongbo gidi kan:
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”?
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:
tabi paapaa bii eyi:
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 siiSELECT '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:
Ṣ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