Is mar a chéile beagnach i gcónaí an cheist clasaiceach a thugann forbróir chuig a DBA nó úinéir gnó chuig comhairleoir PostgreSQL: “Cén fáth a thógann sé chomh fada iarratais a chomhlánú ar an mbunachar sonraí?”
Sraith cúiseanna traidisiúnta:
- algartam neamhéifeachtach
nuair a shocraíonn tú dul isteach i roinnt CTEanna thar chúpla na mílte taifead - staitisticí nach mbaineann le hábhar
má tá dáileadh iarbhír na sonraí sa tábla an-difriúil cheana féin ón gceann a bhailigh ANAILYZE an uair dheireanach - "breiseán" ar acmhainní
agus níl dóthain cumhachta tiomnaithe ríomhaireachta ag an LAP a thuilleadh, bíonn ghigibheart cuimhne á bpumpáil i gcónaí, nó ní féidir leis an diosca coinneáil suas le “mian” an bhunachair sonraí - ag blocáil ó phróisis iomaíocha
Agus má tá blocálacha deacair go leor a ghabháil agus a anailísiú, ansin le haghaidh gach rud eile a theastaíonn uainn plean ceiste, is féidir a fháil ag baint úsáide as
Ach, mar a dúradh sa doiciméadú céanna,
“Is ealaín é plean a thuiscint, agus teastaíonn méid áirithe taithí chun é a mháistir...”
Ach is féidir leat a dhéanamh gan é má úsáideann tú an uirlis cheart!
Cén chuma a bhíonn ar phlean fiosrúcháin go hiondúil? Rud éigin mar sin:
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
nó mar seo:
"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"
Ach tá sé an-deacair agus doiléir an plean a léamh i dtéacs “ón mbileog”:
- ar taispeáint sa nód suim ag acmhainní subtree
is é sin, le tuiscint a fháil ar an méid ama a thóg sé nód áirithe a rith, nó cé mhéad go díreach a thug an léamh seo ón tábla sonraí ón diosca suas, ní mór duit ceann a dhealú ar bhealach éigin ón gceann eile - tá gá le ham nód iolrú faoi lúb
Sea, ní dealú an oibríocht is casta a chaithfear a dhéanamh "sa cheann" - tar éis an tsaoil, léirítear an t-am forghníomhaithe mar an meán le haghaidh aon fhorghníomhú nód amháin, agus is féidir na céadta acu a bheith ann. - bhuel, agus cuireann sé seo go léir le chéile cosc orainn an phríomhcheist a fhreagairt - mar sin cé hé "an nasc is laige"?
Nuair a rinneamar iarracht é seo go léir a mhíniú do na céadta dár bhforbróirí, thuig muid gur fhéach sé ar an taobh amuigh rud éigin mar seo:
Agus ciallaíonn sé sin go dteastaíonn uainn...
Uirlis
In sé rinneamar iarracht na príomhmheicnic go léir a bhailiú a chabhraíonn le tuiscint a fháil ar “cé atá an milleán agus cad atá le déanamh” de réir an phlean agus an iarratais. Bhuel, agus roinn cuid de do thaithí leis an bpobal.
Buail le chéile agus úsáid -
Infheictheacht na bpleananna
An bhfuil sé éasca an plean a thuiscint nuair a bhreathnaíonn sé mar seo?
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
Ní i ndáiríre.
Ach mar seo, i bhfoirm ghiorraithenuair a bhíonn na príomhtháscairí deighilte, bíonn sé i bhfad níos soiléire:
Ach má bhíonn an plean níos casta, tiocfaidh sé chun tarrthála dáileadh ama pichart le nóid:
Bhuel, le haghaidh na roghanna is deacra tá sé i Hurry chun cabhrú leat chairt dul chun cinn:
Mar shampla, tá cásanna neamhfhánacha ann nuair a d’fhéadfadh níos mó ná fréamh amháin a bheith i bplean:
Leideanna struchtúracha
Bhuel, má tá struchtúr iomlán an phlean agus a chuid spotaí goirt leagtha amach cheana féin agus le feiceáil, cén fáth nach aibhsigh tú don fhorbróir iad agus mínigh iad i “Rúisis”?
Tá cúpla dosaen teimpléad molta den sórt sin bailithe againn cheana féin.
Próifíleoir fiosrúcháin líne-ar-líne
Anois, má fhorshuiteann tú an cheist bhunaidh ar an bplean anailísithe, is féidir leat a fheiceáil cé mhéad ama a caitheadh ar gach ráiteas aonair - rud éigin mar seo:
...nó fiú mar seo:
Paraiméadair a chur in ionad iarratas
Má “cheangail tú” ní hamháin iarratas leis an bplean, ach freisin a pharaiméadair ó líne SONRAÍ an loga, is féidir leat é a chóipeáil freisin i gceann de na roghanna:
- le hionadú luacha san iarratas
le haghaidh forghníomhú díreach ar do bhonn agus próifíliú breiseSELECT 'const', 'param'::text;
- le hionadú luacha trí ULLMHÚ/FHEIDHMIÚ
chun aithris a dhéanamh ar obair an sceidealóra, nuair is féidir neamhaird a dhéanamh den chuid pharaiméadrach - mar shampla, agus é ag obair ar tháblaí deighilteDEALLOCATE ALL; PREPARE q(text) AS SELECT 'const', $1::text; EXECUTE q('param'::text);
Cartlann na bpleananna
Greamaigh, anailís a dhéanamh, a roinnt le comhghleacaithe! Fanfaidh na pleananna sa chartlann agus is féidir leat filleadh orthu níos déanaí:
Ach mura dteastaíonn uait go bhfeicfeadh daoine eile do phlean, ná déan dearmad an bosca “ná foilsigh sa chartlann” a sheiceáil.
Sna hailt seo a leanas labhróidh mé faoi na deacrachtaí agus na cinntí a thagann chun cinn agus mé ag déanamh anailís ar phlean.
Foinse: will.com