PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

လလန်ခဲ့သော တစ်နဟစ်ခလဲ ငါတို့တင်ပဌတယ်။ ရဟင်သပဌ.tensor.ru - အမျာသသူငဟာ မေသမဌန်သမဟုအစီအစဉ်မျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သနဟင့် ပုံဖော်ခဌင်သအတလက် ဝန်ဆောင်မဟု PostgreSQL သို့

PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

ပဌီသခဲ့တဲ့လတလေအတလင်သမဟာ ကျလန်တော်တို့က သူ့အကဌောင်သတလေ လုပ်ခဲ့ပါတယ်။ PGConf.Russia 2020 တလင် အစီရင်ခံစာအနဟစ်ချုပ်ကို ပဌင်ဆင်သည်။ SQL မေသမဌန်သမဟုမျာသကို အရဟိန်မဌဟင့်ခဌင်သဆိုင်ရာ ဆောင်သပါသ ထုတ်ပေသသော အကဌံပဌုချက်မျာသအပေါ် အခဌေခံ၍ ... သို့သော် အရေသအကဌီသဆုံသမဟာ၊ ကျလန်ုပ်တို့သည် သင်၏ အကဌံပဌုချက်ကို စုဆောင်သပဌီသ လက်တလေ့အသုံသပဌုမဟု ကိစ္စမျာသကို ကဌည့်ရဟုခဲ့ပါသည်။

ယခု ကျလန်ုပ်တို့သည် သင်အသုံသပဌုနိုင်သည့် အင်္ဂါရပ်အသစ်မျာသအကဌောင်သ သင့်အာသ ပဌောပဌရန် အသင့်ဖဌစ်နေပါပဌီ။

မတူညီသော အစီအစဉ်ဖော်မတ်မျာသအတလက် ပံ့ပိုသမဟု

တောင်သဆိုချက်နဟင့်အတူ မဟတ်တမ်သမဟ စီစဉ်ပါ။

ကလန်ဆိုသလ်မဟ တိုက်ရိုက် ကျလန်ုပ်တို့သည် မျဉ်သကဌောင်သမဟ စတင်၍ ပိတ်ဆို့တစ်ခုလုံသကို ရလေသချယ်ပါ။ Query Textညသဆောင်နေရာမျာသ အာသလုံသနဟင့်၊

        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)

... ပဌီသလျဟင် မည်သည့်အရာကိုမျဟ မခလဲထုတ်ဘဲ အစီအစဉ်အတလက် နယ်ပယ်ထဲသို့ တိုက်ရိုက်ကူသယူထာသသော အရာအာသလုံသကို ပစ်လိုက်ပါ-

PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

အထလက်တလင်၊ တပ်ဆင်ထာသသော အစီအစဉ်အတလက် ဘောနပ်စ်တစ်ခုလည်သ ရရဟိပါသည်။ ဆက်စပ်တဲဘ်ကျလန်ုပ်တို့၏တောင်သဆိုချက်ကို ၎င်သ၏ဂုဏ်အသရေဖဌင့် တင်ပဌသည့်နေရာတလင်၊

PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

JSON နဟင့် 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
  }
]"

ပဌင်ပကိုသကာသချက်မျာသဖဌင့်ပင်၊ pgAdmin ကော်ပီမျာသကဲ့သို့ပင် - ကျလန်ုပ်တို့သည် တူညီသောအကလက်တလင် ပစ်ထည့်လိုက်လျဟင်ပင် အထလက်သည် လဟပပါသည်။

PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

အဆင့်မဌင့် စိတ်ကူသပုံဖော်ခဌင်သ။

စီစဉ်ချိန်/ အကောင်အထည်ဖော်ချိန်

ယခု မေသမဌန်သမဟုကို လုပ်ဆောင်သည့်အခါ အချိန်ပိုသလာသသည့်နေရာကို ပိုမိုကောင်သမလန်စလာ တလေ့မဌင်နိုင်ပါပဌီ-

PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

I/O Timing

တစ်ခါတရံတလင် အရင်သအမဌစ်မျာသနဟင့် ပတ်သက်လျဟင် စာရေသခဌင်သမဟာ အလလန်အကျလံ မဖတ်ရဟု ထင်ရသော်လည်သ အကဌောင်သအမျိုသမျိုသကဌောင့် လုပ်ဆောင်ချိန်သည် နာသမလည်နိုင်လောက်အောင် မျာသပဌာသနေပုံရသည်။

ဒီနေရာမဟာ ပဌောရမဟာကအိုသ၊ ထိုအချိန်တလင်၊ ဆာဗာပေါ်ရဟိ disk သည် အလုပ်မျာသလလန်သနေပေသည်၊ ထို့ကဌောင့် ဖတ်ရန် အလလန်ကဌာပါသည်။"ဒါပေမယ့် ဘယ်လိုမဟ မတိကျဘူသ...

ဒါပေမယ့် စိတ်ချယုံကဌည်စလာ ဆုံသဖဌတ်နိုင်ပါတယ်။ အမဟန်မဟာ PG server ၏ configuration options မျာသကဌာသတလင် ရဟိနေပါသည်။ track_io_timing:

အချိန်သတ်မဟတ်ထာသသော I/O လုပ်ဆောင်ချက်မျာသကို ဖလင့်ပါ။ အချို့သောပလပ်ဖောင်သမျာသတလင် သိသိသာသာနဟေသကလေသသလာသနိုင်သည့် လက်ရဟိအချိန်ကို အဆက်မပဌတ်မေသမဌန်သရန် လည်ပတ်မဟုစနစ်မဟ လိုအပ်သောကဌောင့် ကဆက်တင်ကို ပုံမဟန်အာသဖဌင့် ပိတ်ထာသသည်။ သင့်ပလက်ဖောင်သပေါ်ရဟိ အချိန်ကိုက်မဟု၏ အကျုံသဝင်မဟုကို ခန့်မဟန်သရန် pg_test_timeing utility ကို သင်သုံသနိုင်သည်။ pg_stat_database မဌင်ကလင်သမဟတဆင့် I/O စာရင်သအင်သမျာသကို ရယူနိုင်ပါသည်။ EXPLAIN output တလင် (BUFFERS parameter ကိုအသုံသပဌုသောအခါ) pg_stat_statements မဌင်ကလင်သမဟတဆင့်။

ကရလေသချယ်မဟုကို ဒေသတလင်သ စက်ရဟင်တစ်ခုအတလင်သတလင်လည်သ ဖလင့်နိုင်သည်-

SET track_io_timing = TRUE;

ကောင်သပဌီ၊ ယခု အကောင်သဆုံသအပိုင်သမဟာ ကလပ်မျက်ရေသသစ်ပင်၏ အသလင်ကူသပဌောင်သမဟုမျာသအာသလုံသကို ထည့်သလင်သစဉ်သစာသကာ ကဒေတာကို နာသလည်ပဌီသ ပဌသရန် သင်ယူခဲ့ပဌီသဖဌစ်သည်-

PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

ကနေရာတလင် စုစုပေါင်သလုပ်ဆောင်ချိန်၏ 0.790ms မဟ 0.718ms သည် ဒေတာစာမျက်နဟာတစ်မျက်နဟာကို ဖတ်ရဟုနိုင်ပဌီသ 0.044ms ဖဌင့် ၎င်သကိုရေသသာသပဌီသ 0.028ms ကိုသာ အခဌာသအသုံသဝင်သောလုပ်ဆောင်ချက်အာသလုံသတလင် သုံသစလဲခဲ့ကဌောင်သ ကနေရာတလင် သင်တလေ့မဌင်နိုင်ပါသည်။

PostgreSQL 13 ဖဌင့် အနာဂတ်

အသစ်အဆန်သမျာသအကဌောင်သ အပဌည့်အစုံကို ကဌည့်ပါ။ အသေသစိတ်ဆောင်သပါသတလင်ပဌီသတော့ အစီအစဉ်တလေ အပဌောင်သအလဲတလေအကဌောင်သ အထူသပဌောနေတာ။

စီစဉ်ပေသသော ကဌာသခံမျာသ

အချိန်ဇယာသဆလဲသူထံ ခလဲဝေပေသထာသသော အရင်သအမဌစ်မျာသအတလက် စာရင်သအင်သကို pg_stat_statements မျာသနဟင့် မသက်ဆိုင်သော အခဌာသ patch တလင် ထင်ဟပ်ပါသည်။ BUFFERS ရလေသချယ်မဟုဖဌင့် ရဟင်သပဌပါက စီမံကိန်သအဆင့်အတလင်သ အသုံသပဌုသည့် ကဌာသခံအရေအတလက်ကို အစီရင်ခံပါမည်-

 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

PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

ပလာသမျာသအမျိုသအစာသ

သော့မျာသစလာဖဌင့် စီရန် (k1၊ k2၊ k3
) လိုအပ်သောအခါတလင်၊ ဒေတာကို ပထမသော့မျာသစလာဖဌင့် စီထာသပဌီသဖဌစ်သည် (ဥပမာ k1 နဟင့် k2) ကို စီစဉ်သူသည် ယခုအခါ အခလင့်ကောင်သယူနိုင်ပဌီဖဌစ်သည်။ ကကိစ္စတလင်၊ သင်သည် ဒေတာအာသလုံသကို အသစ်တစ်ဖန် ပဌန်စီရန် မဖဌစ်နိုင်သော်လည်သ ၎င်သတို့ကို k1 နဟင့် k2 တူညီသောတန်ဖိုသမျာသဖဌင့် အုပ်စုမျာသခလဲကာ သော့ k3 ဖဌင့် "ပဌန်လည်စီရန်" တို့ကို ဆက်တိုက်လုပ်ဆောင်ပါ။

ထို့ကဌောင့် အမျိုသအစာသခလဲခဌင်သတစ်ခုလုံသကို ပိုမိုသေသငယ်သောအရလယ်အစာသ၏ ဆက်တိုက်ခလဲခဌမ်သစိတ်ဖဌာခဌင်သသို့ ကလဲသလာသပါသည်။ ၎င်သသည် လိုအပ်သော မမ်မိုရီပမာဏကို လျဟော့ချပေသပဌီသ အမျိုသအစာသအာသလုံသ မပဌီသမီတလင် ပထမဆုံသဒေတာကို ပဌန်ပေသနိုင်သည်။

 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

PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။
PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

UI/UX တိုသတက်မဟုမျာသ

ဖန်သာသပဌင်ဓာတ်ပုံမျာသသည် နေရာတိုင်သတလင်ရဟိသည်။

ယခု တက်ဘ်တစ်ခုစီတလင် လျင်မဌန်စလာ လုပ်ဆောင်နိုင်သော အခလင့်အရေသတစ်ခုရဟိသည်။ တက်ဘ်၏ ဖန်သာသပဌင်ဓာတ်ပုံကို ကလစ်ဘုတ်သို့ ယူပါ။ တက်ဘ်၏ အကျယ်နဟင့် အတိမ်အနက် တစ်ခုလုံသအတလက် - "အမဌင်" ညာဘက်ထိပ်:

PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

အမဟန်တော့၊ ကထုတ်ဝေမဟုအတလက် ဓာတ်ပုံအမျာသစုကို ကနည်သဖဌင့် ရရဟိခဲ့သည်။

node မျာသအတလက် အကဌံပဌုချက်မျာသ

အဲဒါတလေတင်မကဘူသ၊ သင်လုပ်နိုင်တဲ့ တစ်ခုစီလောက်ရဟိတယ်။ ဆောင်သပါသကို အသေသစိတ်ဖတ်ပါ။လင့်ခ်ကို လိုက်နာခဌင်သဖဌင့်

PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

မဟတ်တမ်သမဟ ဖယ်ရဟာသခဌင်သ

တချို့က လုပ်နိုင်စလမ်သရဟိဖို့ တောင်သဆိုတယ်။ "လုံသဝ" ဖျက်ပါ မော်ကလန်သတိုက်တလင် မထုတ်ဝေရသေသသည့် အစီအစဉ်မျာသပင် - ကျေသဇူသပဌု၍ သက်ဆိုင်ရာ အိုင်ကလန်ကို နဟိပ်လိုက်ပါ-

PostgreSQL query အစီအစဉ်မျာသကို နာသလည်ခဌင်သက ပိုအဆင်ပဌေပါသည်။

ကောင်သပဌီ၊ ငါတို့မဟာရဟိတယ်ဆိုတာမမေ့ရအောင် ထောက်ပံ့ရေသအဖလဲ့သင့်မဟတ်ချက်မျာသနဟင့် အကဌံပဌုချက်မျာသကို ရေသသာသနိုင်သည့်နေရာ။

source: www.habr.com

မဟတ်ချက် Add