Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

Theka la chaka chapitacho tinapereka explain.tensor.ru - pagulu ntchito yofotokozera ndikuwona mapulani a mafunso ku PostgreSQL.

Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

Miyezi yapitayi tachita za iye lipoti ku PGConf.Russia 2020, anakonza chidule nkhani yofulumizitsa mafunso a SQL kutengera malingaliro omwe amapereka ...

Ndipo tsopano takonzeka kukuuzani za zatsopano zomwe mungagwiritse ntchito.

Thandizo lamitundu yosiyanasiyana yamapulani

Konzani kuchokera pachipika, pamodzi ndi pempho

Mwachindunji kuchokera ku console, timasankha chipika chonse, kuyambira pamzere ndi Mawu Ofunsa, ndi mipata yonse yotsogolera:

        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)

... ndikuponya zonse zomwe zakopedwa mwachindunji m'mundamo, osalekanitsa chilichonse:

Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

Pazotulutsa, timapezanso bonasi ku dongosolo lophwanyidwa nkhani tabu, pamene pempho lathu likuperekedwa mu ulemerero wake wonse:

Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

JSON ndi 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
  }
]"

Ngakhale ndi mawu akunja, monga makope a pgAdmin, ngakhale opanda - timaponyera m'munda womwewo, zotsatira zake ndi kukongola:

Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

Kuwoneka Mwapamwamba

Nthawi Yokonzekera / Nthawi Yochita

Tsopano mutha kuwona bwino komwe nthawi yowonjezera idapita pofunsa funso:

Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

I/O Nthawi

Nthawi zina mumayenera kuthana ndi vuto lomwe, pankhani yazachuma, zikuwoneka kuti sizinawerengedwe ndikulembedwa, koma zikuwoneka kuti nthawi yophedwayo ndi yayikulu mosagwirizana pazifukwa zina.

Izo ziyenera kunenedwa apa:O, mwina, panthawiyo diski pa seva inali yodzaza kwambiri, ndichifukwa chake zidatenga nthawi yayitali kuti ziwerenge!"Koma mwanjira ina sizolondola ...

Koma zikhoza kutsimikiziridwa modalirika kwambiri. Chowonadi ndi chakuti pakati pa zosankha za kasinthidwe ka seva ya PG pali track_io_timing:

Imayatsa ntchito za I/O zanthawi yake. Izi zimayimitsidwa mwachisawawa, chifukwa zimafuna kuti makina ogwiritsira ntchito azifunsa nthawi zonse, zomwe zingachepetse zinthu kwambiri pamapulatifomu ena. Mutha kugwiritsa ntchito pg_test_timing kuti muyerekeze kuchuluka kwa nthawi papulatifomu yanu. Ziwerengero za I/O zitha kupezeka kudzera pa pg_stat_database view, mu EXPLAIN output (pamene BUFFERS parameter ikugwiritsidwa ntchito) ndi kudzera pa pg_stat_statements view.

Izi zithanso kuyatsidwa mkati mwa gawo lapafupi:

SET track_io_timing = TRUE;

Chabwino, tsopano gawo labwino kwambiri ndikuti taphunzira kumvetsetsa ndikuwonetsa izi, poganizira masinthidwe onse a mtengo wakupha:

Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

Apa mutha kuwona kuti mwa 0.790ms ya nthawi yonse yophedwa, 0.718ms idatenga kuwerenga tsamba limodzi la data, 0.044ms - ndikulemba, ndipo 0.028ms yokha idagwiritsidwa ntchito pazinthu zina zonse!

Tsogolo ndi PostgreSQL 13

Kuti muwone mwachidule zatsopano, onani m'nkhani yatsatanetsatane, ndipo tikukamba za kusintha kwa mapulani.

Kupanga mabafa

Kuwerengera kwazinthu zomwe zaperekedwa kwa wokonza zikuwonekera pachigamba china chomwe sichikugwirizana ndi pg_stat_statements. Fotokozani ndi njira ya BUFFERS ifotokoza kuchuluka kwa mabafa omwe amagwiritsidwa ntchito panthawi yokonzekera:

 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

Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

Mtundu wowonjezera

Ngati kusanja ndi makiyi ambiri (k1, k2, k3…) kumafunika, wokonza mapulani tsopano atha kutengapo mwayi podziwa kuti deta yasanjidwa kale ndi makiyi angapo oyamba (monga k1 ndi k2). Pankhaniyi, simungathe kusinthanso deta yonse mwatsopano, koma muwagawe m'magulu otsatizana omwe ali ndi mfundo zofanana za k1 ndi k2, ndi "kukonzanso" ndi kiyi k3.

Chifukwa chake, kusanja konseko kumagawika m'magulu angapo motsatizana ang'onoang'ono. Izi zimachepetsa kuchuluka kwa kukumbukira komwe kumafunikira, komanso kumakupatsani mwayi wobweza deta yoyamba musanamalize kusanja.

 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

Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta
Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

Kusintha kwa UI/UX

Zithunzi zili paliponse!

Tsopano pa tabu iliyonse pali mwayi mwamsanga jambulani chithunzi cha tabu ku clipboard kwa m'lifupi ndi kuya kwa tabu - "kuona" kumanja pamwamba:

Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

Kwenikweni, zithunzi zambiri za m’bukuli zinapezedwa motere.

Malangizo pa mfundo

Palibe zambiri za iwo, koma za aliyense yemwe mungathe werengani nkhaniyi mwatsatanetsatanepotsatira ulalo:

Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

Kuchotsa pankhokwe

Ena apempha kuti athe kufufuta "mtheradi" ngakhale mapulani omwe sanasindikizidwe pazosungidwa - chonde, ingodinani chizindikiro chofananira:

Kumvetsetsa zolinga za PostgreSQL zofunsira mosavuta

Chabwino, tisaiwale kuti tatero Gulu Lothandizirakomwe mungalembe ndemanga zanu ndi malingaliro anu.

Source: www.habr.com

Kuwonjezera ndemanga