Tha a ’cheist chlasaigeach a bheir leasaiche don DBA aige no sealbhadair gnìomhachais a’ toirt gu comhairliche PostgreSQL cha mhòr an-còmhnaidh an aon rud: “Carson a bheir e cho fada iarrtasan a lìonadh air an stòr-dàta?”
Seata adhbharan traidiseanta:
- algairim neo-èifeachdach
nuair a cho-dhùnas tu a dhol còmhla ri grunn CTEn thairis air deichean de mhìltean de chlàran - staitistig neo-iomchaidh
ma tha an fhìor sgaoileadh dàta sa chlàr mar-thà gu math eadar-dhealaichte bhon fhear a chruinnich ANALYZE an turas mu dheireadh - "plug" air goireasan
agus chan eil cumhachd coimpiutaireachd sònraichte gu leòr aig an CPU tuilleadh, thathas an-còmhnaidh a’ pumpadh gigabytes de chuimhne, no chan urrainn don diosc cumail suas ri “miann” an stòr-dàta - bacadh bho phròiseasan farpaiseach
Agus ma tha blocaichean gu math duilich a ghlacadh agus a sgrùdadh, an uairsin airson a h-uile càil eile a dh ’fheumas sinn plana ceiste, a gheibhear le bhith a’ cleachdadh
Ach, mar a chaidh a ràdh anns na h-aon sgrìobhainnean,
“Is e ealain a th’ ann a bhith a’ tuigsinn plana, agus airson a mhaighstireachd tha feum air beagan eòlais...”
Ach faodaidh tu a dhèanamh às aonais ma chleachdas tu an inneal ceart!
Cò ris a bhios plana ceist mar as trice coltach? Rud 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
no 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 tha e glè dhoirbh agus neo-shoilleir am plana a leughadh ann an teacsa “bhon duilleag”:
- air a thaisbeanadh anns a’ phuing suim le goireasan subtree
is e sin, gus tuigsinn dè an ùine a thug e gus nód sònraichte a chuir an gnìomh, no dè an ìre gu bheil an leughadh seo bhon chlàr a’ toirt suas dàta bhon diosc, feumaidh tu dòigh air choireigin fear a thoirt air falbh bhon fhear eile - tha feum air ùine node iomadachadh le lùban
Tha, chan e toirt air falbh an obair as iom-fhillte a dh'fheumar a dhèanamh "anns a 'cheann" - às dèidh a h-uile càil, tha an ùine cur gu bàs air a chomharrachadh mar chuibheasach airson aon nòta a chur gu bàs, agus faodaidh na ceudan a bhith ann - uill, agus tha seo uile còmhla a’ cur casg oirnn a’ phrìomh cheist a fhreagairt – mar sin cò "an ceangal as laige"?
Nuair a dh'fheuch sinn ri seo a mhìneachadh dha ceudan de ar luchd-leasachaidh, thuig sinn bhon taobh a-muigh gu robh e a 'coimhead rudeigin mar seo:
Agus tha sin a’ ciallachadh gu bheil feum againn air...
Inneal
Ann an sin dh’ fheuch sinn ri na prìomh mheacanaigean uile a chruinneachadh a chuidicheas le bhith a’ tuigsinn “cò as coireach agus dè a nì thu” a rèir a’ phlana agus an iarrtais. Uill, agus roinn pàirt den eòlas agad leis a’ choimhearsnachd.
Coinnich agus cleachd -
Faicsinneachd phlanaichean
A bheil e furasta am plana a thuigsinn nuair a tha e coltach ri 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
Chan e fìor.
Ach mar so, ann an cruth giorraichtenuair a tha na prìomh chomharran air an sgaradh, tha e tòrr nas soilleire:
Ach ma tha am plana nas toinnte, thig e gu teasairginn cuairteachadh ùine pichart le nodan:
Uill, airson na roghainnean as duilghe tha e ann an cabhag airson cuideachadh clàr adhartais:
Mar eisimpleir, tha suidheachaidhean gu math neo-bheag ann nuair a dh’ fhaodadh barrachd air aon fhìor fhreumh a bhith aig plana:
Soidhnichean structarail
Uill, ma tha structar iomlan a’ phlana agus na spotan goirt aige air an dealbhadh mar-thà agus rim faicinn, carson nach toir thu aire don leasaiche agus mìnich iad ann an “Cànan na Ruis”?
Tha sinn mu thràth air dusan no dhà de na teamplaidean molaidhean sin a chruinneachadh.
Pròifil ceist loidhne-air-loidhne
A-nis, ma chuireas tu a’ cheist thùsail air a’ phlana sgrùdaichte, chì thu na chaidh ùine a chosg air gach aithris fa leth - rudeigin mar seo:
... no eadhon mar seo:
Cuir crìochan an àite iarrtas
Ma tha thu “a’ ceangal ”chan e a-mhàin iarrtas ris a’ phlana, ach cuideachd na crìochan aige bhon loidhne FIOSRACHADH den log, faodaidh tu cuideachd a chopaigeadh ann an aon de na roghainnean:
- le ionadachadh luach san iarrtas
airson coileanadh dìreach air do bhunait agus tuilleadh phròifilSELECT 'const', 'param'::text;
- le ionadachadh luach tro PREPARE/EXECUTE
gus aithris a dhèanamh air obair a’ chlàr-ama, nuair nach urrainnear dearmad a dhèanamh air a’ phàirt parametric - mar eisimpleir, nuair a bhios tu ag obair air bùird sgaraichteDEALLOCATE ALL; PREPARE q(text) AS SELECT 'const', $1::text; EXECUTE q('param'::text);
Tasglann de phlanaichean
Cuir a-steach, dèan mion-sgrùdadh, roinn le co-obraichean! Bidh na planaichean fhathast gan tasgadh agus faodaidh tu tilleadh thuca nas fhaide air adhart:
Ach mura h-eil thu airson gum faic daoine eile am plana agad, na dìochuimhnich sùil a thoirt air a’ bhogsa “na foillsich san tasglann”.
Anns na h-artaigilean a leanas bruidhnidh mi mu na duilgheadasan agus na co-dhùnaidhean a thig am bàrr nuair a bhios mi a’ dèanamh anailis air plana.
Source: www.habr.com