Tha tuigse nas fhasa air planaichean ceist PostgreSQL

O chionn leth-bhliadhna thaisbean sinn mìnich.tensor.ru - poblach seirbheis airson parsadh agus sealladh air planaichean ceist gu PostgreSQL.

Tha tuigse nas fhasa air planaichean ceist PostgreSQL

Thairis air na mìosan a dh'fhalbh tha sinn air a dhèanamh mu dheidhinn aithisg aig PGConf.Russia 2020, geàrr-chunntas ullachadh artaigil mu luathachadh cheistean SQL stèidhichte air na molaidhean a bheir e seachad ... ach nas cudromaiche, chruinnich sinn do bheachdan air ais agus choimhead sinn air cùisean fìor fheum.

Agus a-nis tha sinn deiseil airson innse dhut mu na feartan ùra as urrainn dhut a chleachdadh.

Taic airson diofar chruthan plana

Plana bhon log, còmhla ris an iarrtas

Gu dìreach bhon chonsail, bidh sinn a 'taghadh a' bhloc gu lèir, a 'tòiseachadh bhon loidhne le Teacs ceist, leis a h-uile prìomh àite:

        Query Text: INSERT INTO  dicquery_20200604  VALUES ($1.*) ON CONFLICT (query)
                           DO NOTHING;
        Insert on dicquery_20200604  (cost=0.00..0.05 rows=1 width=52) (actual time=40.376..40.376 rows=0 loops=1)
          Conflict Resolution: NOTHING
          Conflict Arbiter Indexes: dicquery_20200604_pkey
          Tuples Inserted: 1
          Conflicting Tuples: 0
          Buffers: shared hit=9 read=1 dirtied=1
          ->  Result  (cost=0.00..0.05 rows=1 width=52) (actual time=0.001..0.001 rows=1 loops=1)

...

Tha tuigse nas fhasa air planaichean ceist PostgreSQL

Aig an toradh, bidh sinn cuideachd a’ faighinn bònas don phlana nach deach a chruinneachadh tab co-theacsa, far am bheil ar n-iarrtas air a thaisbeanadh 'na uile ghlòir :

Tha tuigse nas fhasa air planaichean ceist PostgreSQL

JSON agus YAML

EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)
SELECT * FROM pg_class;

"[
  {
    "Plan": {
      "Node Type": "Seq Scan",
      "Parallel Aware": false,
      "Relation Name": "pg_class",
      "Alias": "pg_class",
      "Startup Cost": 0.00,
      "Total Cost": 1336.20,
      "Plan Rows": 13804,
      "Plan Width": 539,
      "Actual Startup Time": 0.006,
      "Actual Total Time": 1.838,
      "Actual Rows": 10266,
      "Actual Loops": 1,
      "Shared Hit Blocks": 646,
      "Shared Read Blocks": 0,
      "Shared Dirtied Blocks": 0,
      "Shared Written Blocks": 0,
      "Local Hit Blocks": 0,
      "Local Read Blocks": 0,
      "Local Dirtied Blocks": 0,
      "Local Written Blocks": 0,
      "Temp Read Blocks": 0,
      "Temp Written Blocks": 0
    },
    "Planning Time": 5.135,
    "Triggers": [
    ],
    "Execution Time": 2.389
  }
]"

Eadhon le briathran bhon taobh a-muigh, mar leth-bhreacan pgAdmin, eadhon às aonais - bidh sinn a ’tilgeil san aon raon, is e bòidhchead an toradh:

Tha tuigse nas fhasa air planaichean ceist PostgreSQL

Sealladh adhartach

Ùine Dealbhaidh / Ùine Cur gu bàs

A-nis chì thu nas fheàrr càite an deach an ùine a bharrachd nuair a chuir thu an gnìomh a’ cheist:

Tha tuigse nas fhasa air planaichean ceist PostgreSQL

I/O Uair

Aig amannan feumaidh tu dèiligeadh ri suidheachadh far a bheil e coltach, a thaobh goireasan, nach deach cus a leughadh agus a sgrìobhadh, ach tha e coltach gu bheil an ùine cur gu bàs mì-chothromach airson adhbhar air choireigin.

Feumar a ràdh an seo:O, is dòcha, aig an àm sin bha cus luchdachadh air an diosg air an fhrithealaiche, is e sin as coireach gun tug e cho fada ri leughadh!“Ach dòigh air choireigin chan eil e gu math ceart ...

Ach faodar a cho-dhùnadh gu tur earbsach. Is e an fhìrinn gu bheil am measg roghainnean rèiteachaidh an fhrithealaiche PG track_io_timing:

A’ comasachadh obrachaidhean I/O le ùine. Tha an suidheachadh seo à comas gu bunaiteach, oir tha e ag iarraidh air an t-siostam obrachaidh an ùine làithreach a cheasnachadh gu cunbhalach, rud a dh’ fhaodadh cùisean a lughdachadh gu mòr air cuid de àrd-ùrlaran. Faodaidh tu an goireas pg_test_timing a chleachdadh gus tuairmse a dhèanamh air an t-àm a bharrachd air an àrd-ùrlar agad. Gheibhear staitistig I/O tron ​​t-sealladh pg_stat_database, anns an toradh EXPLAIN (nuair a thèid am paramadair BUFFERS a chleachdadh) agus tron ​​t-sealladh pg_stat_statements.

Faodar an roghainn seo a chomasachadh cuideachd taobh a-staigh seisean ionadail:

SET track_io_timing = TRUE;

Uill, a-nis is e am pàirt as fheàrr gu bheil sinn air ionnsachadh an dàta seo a thuigsinn agus a thaisbeanadh, a ’toirt aire do na h-atharrachaidhean air fad air a’ chraobh cur gu bàs:

Tha tuigse nas fhasa air planaichean ceist PostgreSQL

An seo chì thu sin a-mach à 0.790ms den ùine cur gu bàs iomlan, ghabh 0.718ms aon duilleag de dhàta a leughadh, 0.044ms - ga sgrìobhadh, agus cha deach ach 0.028ms a chosg air a h-uile gnìomh feumail eile!

San àm ri teachd le PostgreSQL 13

Airson sealladh farsaing air na tha ùr, faic ann an artaigil mionaideach, agus tha sinn gu sònraichte a’ bruidhinn air atharrachaidhean sna planaichean.

Bufairean planadh

Tha cunntas airson goireasan a chaidh a riarachadh don chlàr-chlàir ri fhaicinn ann am bad eile nach eil co-cheangailte ri pg_stat_statements. Mìnichidh an roghainn BUFFERS an àireamh de bhufairean a chaidh a chleachdadh aig ìre dealbhaidh:

 Seq Scan on pg_class (actual rows=386 loops=1)
   Buffers: shared hit=9 read=4
 Planning Time: 0.782 ms
   Buffers: shared hit=103 read=11
 Execution Time: 0.219 ms

Tha tuigse nas fhasa air planaichean ceist PostgreSQL

Seòrsa mean air mhean

Ann an cùisean far a bheil feum air rèiteachadh le mòran iuchraichean (k1, k2, k3…), faodaidh an dealbhaiche a-nis brath a ghabhail air fios a bhith aige gu bheil an dàta air a rèiteachadh mu thràth le grunn de na ciad iuchraichean (me k1 agus k2). Anns a 'chùis seo, chan urrainn dhut an dàta gu lèir ath-sheòrsachadh a-rithist, ach an roinn ann am buidhnean leantainneach leis na h-aon luachan k1 agus k2, agus "ath-sheòrsachadh" leis an iuchair k3.

Mar sin, bidh an seòrsachadh gu lèir a’ briseadh suas gu grunn sheòrsan leantainneach de mheud nas lugha. Bidh seo a 'lùghdachadh na tha de chuimhne a dhìth, agus leigidh e leat a' chiad dàta a thilleadh mus bi a h-uile seòrsachadh deiseil.

 Incremental Sort (actual rows=2949857 loops=1)
   Sort Key: ticket_no, passenger_id
   Presorted Key: ticket_no
   Full-sort Groups: 92184 Sort Method: quicksort Memory: avg=31kB peak=31kB
   ->  Index Scan using tickets_pkey on tickets (actual rows=2949857 loops=1)
 Planning Time: 2.137 ms
 Execution Time: 2230.019 ms

Tha tuigse nas fhasa air planaichean ceist PostgreSQL
Tha tuigse nas fhasa air planaichean ceist PostgreSQL

Leasachaidhean UI/UX

Tha seallaidhean-sgrìn anns a h-uile àite!

A-nis air gach taba tha cothrom ann gu sgiobalta gabh dealbh-sgrìn den taba gu clipboard airson leud agus doimhneachd iomlan a 'chlàir - "sealladh" deas gu h-àrd:

Tha tuigse nas fhasa air planaichean ceist PostgreSQL

Gu fìrinneach, chaidh a’ mhòr-chuid de na dealbhan airson an fhoillseachaidh seo fhaighinn san dòigh seo.

Molaidhean air notaichean

Chan e a-mhàin gu bheil barrachd dhiubh ann, ach mu gach fear as urrainn dhut leugh an artaigil gu mionaideachle bhith a’ leantainn a’ cheangal:

Tha tuigse nas fhasa air planaichean ceist PostgreSQL

A thoirt air falbh bhon tasglann

Tha cuid air iarraidh air comas sguab às "gu tur" eadhon planaichean nach eil air am foillseachadh san tasglann - feuch, dìreach cliog air an ìomhaigh fhreagarrach:

Tha tuigse nas fhasa air planaichean ceist PostgreSQL

Uill, na dìochuimhnich gu bheil againn Buidheann-taicefar an urrainn dhut do bheachdan agus molaidhean a sgrìobhadh.

Source: www.habr.com

Cuir beachd ann