Cò mu dheidhinn a tha Mìneachadh sàmhach agus mar a bheir thu air bruidhinn

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 Mìnich gnìomhaiche (Tha e nas fheàrr, gu dearbh, Mìneachadh sa bhad (MION-SGRÙDADH, BUFFERS) ...) no auto_explain modal.

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:

Cò mu dheidhinn a tha Mìneachadh sàmhach agus mar a bheir thu air bruidhinn

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 - mìnich.tensor.ru

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:

Cò mu dheidhinn a tha Mìneachadh sàmhach agus mar a bheir thu air bruidhinn

Ach ma tha am plana nas toinnte, thig e gu teasairginn cuairteachadh ùine pichart le nodan:

Cò mu dheidhinn a tha Mìneachadh sàmhach agus mar a bheir thu air bruidhinn

Uill, airson na roghainnean as duilghe tha e ann an cabhag airson cuideachadh clàr adhartais:

Cò mu dheidhinn a tha Mìneachadh sàmhach agus mar a bheir thu air bruidhinn

Mar eisimpleir, tha suidheachaidhean gu math neo-bheag ann nuair a dh’ fhaodadh barrachd air aon fhìor fhreumh a bhith aig plana:

Cò mu dheidhinn a tha Mìneachadh sàmhach agus mar a bheir thu air bruidhinnCò mu dheidhinn a tha Mìneachadh sàmhach agus mar a bheir thu air bruidhinn

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”?

Cò mu dheidhinn a tha Mìneachadh sàmhach agus mar a bheir thu air bruidhinnTha 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:

Cò mu dheidhinn a tha Mìneachadh sàmhach agus mar a bheir thu air bruidhinn

... no eadhon mar seo:

Cò mu dheidhinn a tha Mìneachadh sàmhach agus mar a bheir thu air bruidhinn

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òifil

    SELECT '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 sgaraichte

    DEALLOCATE 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: mìneachadh.tensor.ru/archive

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

Cuir beachd ann