ဘာကို နဟုတ်ဆိတ်နေသလဲ၊ ဘယ်လိုပဌောရမလဲ

developer မဟ ၎င်သ၏ DBA သို့မဟုတ် လုပ်ငန်သပိုင်ရဟင်ထံသို့ PostgreSQL အတိုင်ပင်ခံထံသို့ ပေသသော ဂန္တဝင်မေသခလန်သသည် အမဌဲတမ်သနီသပါသ တူညီသည်- "ဒေတာဘေ့စ်မဟာ ပဌီသအောင်လုပ်ဖို့ တောင်သဆိုချက်တလေက ဘာကဌောင့်ကဌာတာလဲ။"

ရိုသရာအကဌောင်သပဌချက်မျာသ-

  • မထိရောက်သော အယ်လဂိုရီသမ်
    မဟတ်တမ်သပေါင်သ သောင်သနဟင့်ချီရဟိသော CTE အမျာသအပဌာသကို သင်ဝင်ရောက်ရန် ဆုံသဖဌတ်သောအခါ
  • မသက်ဆိုင်သောစာရင်သဇယာသ
    အကယ်၍ ဇယာသရဟိ ဒေတာဖဌန့်ချီမဟုသည် နောက်ဆုံသအကဌိမ် ခလဲခဌမ်သစိတ်ဖဌာခဌင်သမဟ စုဆောင်သထာသသည့်အရာနဟင့် အလလန်ကလာခဌာသနေပဌီဆိုလျဟင်၊
  • အရင်သအမဌစ်မျာသပေါ်တလင် "ပလပ်"
    CPU ၏ အထူသသီသသန့် ကလန်ပဌူတာ ပါဝါ လုံလောက်မဟု မရဟိတော့ပါ၊ မမ်မိုရီ၏ ဂစ်ဂါဗိုက်မျာသကို အဆက်မပဌတ် စုပ်ယူနေသည်၊ သို့မဟုတ် ဒေတာဘေ့စ်၏ "လိုချင်မဟု" အာသလုံသကို disk က မမဟီနိုင်ပါ။
  • ပိတ်ဆို့ခဌင်သ။ ပဌိုင်ဆိုင်မဟုဖဌစ်စဉ်မျာသမဟ

ပိတ်ဆို့ခဌင်သမျာသသည် ဖမ်သဆုပ်ပဌီသ ခလဲခဌမ်သစိတ်ဖဌာရန် အလလန်ခက်ခဲပါက၊ ကျလန်ုပ်တို့ လိုအပ်သမျဟ အရာအာသလုံသအတလက် မေသမဌန်သမဟုအစီအစဉ်အသုံသပဌု၍ ရရဟိနိုင်ပါသည်။ အော်ပရေတာရဟင်သပဌပါ။ (ချက်ခဌင်သရဟင်သပဌတာက ပိုကောင်သတာပေါ့ (ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ၊ ကဌာသခံမျာသ) ...) သို့မဟုတ် auto_explain module.

တူညီသောစာရလက်စာတမ်သမျာသတလင်ဖော်ပဌထာသသည့်အတိုင်သ၊

"အစီအစဥ်တစ်ခုကို နာသလည်ခဌင်သသည် အနုပညာတစ်ခုဖဌစ်ပဌီသ ၎င်သကို ကျလမ်သကျင်ရန်မဟာ အတလေ့အကဌုံမျာသစလာ လိုအပ်သည်..."

ဒါပေမယ့် မဟန်ကန်တဲ့ tool ကိုသုံသရင် အဲဒါမပါဘဲ လုပ်နိုင်ပါတယ်။

မေသမဌန်သမဟုအစီအစဉ်သည် ပုံမဟန်အာသဖဌင့် မည်သို့ရဟိသနည်သ။ ထိုကဲ့သို့သော တစ်ခုခု-

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

သို့မဟုတ် ကကဲ့သို့

"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"

သို့သော် “စာရလက်မဟ” စာသာသဖဌင့် အစီအစဉ်ကို ဖတ်ခဌင်သသည် အလလန်ခက်ခဲပဌီသ မရဟင်သလင်သသည်-

  • node တလင်ပဌသထာသသည်။ သစ်ပင်သစ်ပင်ရင်သမဌစ်မျာသဖဌင့် ပေါင်သစည်သသည်။
    ဆိုလိုသည်မဟာ၊ node တစ်ခုအာသ execute လုပ်ရန် အချိန်မည်မျဟကဌာသည်၊ သို့မဟုတ် disk မဟ data ကိုယူဆောင်လာသောဇယာသမဟကဖတ်ခဌင်သကိုမည်မျဟအတိအကျနာသလည်ရန်၊ သင်သည်အခဌာသတစ်ခုမဟတစ်ခုကိုတစ်နည်သနည်သဖဌင့်နုတ်ရန်လိုအပ်သည်။
  • node အချိန်လိုအပ်သည်။ အကလက်မျာသဖဌင့် မဌဟောက်ပါ။
    ဟုတ်ကဲ့၊ နုတ်ခဌင်သသည် "ခေါင်သ၌" လုပ်ဆောင်ရမည့် အရဟုပ်ထလေသဆုံသလုပ်ဆောင်မဟုမဟုတ်ပါ - အာသလုံသပဌီသနောက်၊ node တစ်ခု၏ execution တစ်ခုအတလက် ပျမ်သမျဟအာသဖဌင့် execution time ကို ညလဟန်ပဌပဌီသ ၎င်သတို့ထဲမဟ ရာနဟင့်ချီရဟိနိုင်ပါသည်။
  • ကောင်သပဌီ၊ ဒါတလေအာသလုံသက ပင်မမေသခလန်သကို ဖဌေဖို့ ကျလန်တော်တို့ကို တာသဆီသထာသတယ်၊ ဒါဆို ဘယ်သူလဲ။ "အညံ့ဆုံသ link"?

ကျလန်ုပ်တို့သည် ကအရာအာသလုံသကို ကျလန်ုပ်တို့၏ developer ရာပေါင်သမျာသစလာအာသ ရဟင်သပဌရန်ကဌိုသစာသသောအခါ၊ ၎င်သသည် အပဌင်ဘက်မဟ ကဌည့်ရသည်မဟာ ကကဲ့သို့ဖဌစ်သည်ကို သိရဟိလိုက်ရပါသည်။

ဘာကို နဟုတ်ဆိတ်နေသလဲ၊ ဘယ်လိုပဌောရမလဲ

ဆိုလိုတာက ငါတို့လိုတယ်...

tool တစ်ခု

၎င်သတလင် ကျလန်ုပ်တို့သည် အစီအစဉ်နဟင့် တောင်သဆိုချက်အရ "မည်သူ့ကို အပဌစ်တင်ရမည်၊ ဘာလုပ်ရမည်" ကို နာသလည်နိုင်စေမည့် အဓိက စက်ပဌင်မျာသအာသလုံသကို စုဆောင်သရန် ကဌိုသစာသခဲ့သည်။ ကောင်သပဌီ၊ သင်၏အတလေ့အကဌုံ၏တစ်စိတ်တစ်ပိုင်သကိုအသိုင်သအဝိုင်သနဟင့်မျဟဝေပါ။
အသုံသပဌုရန်- ရဟင်သပဌ.tensor.ru

အစီအစဥ်မျာသကို မဌင်နိုင်စလမ်သရဟိခဌင်သ။

အစီအစဥ်ကို နာသလည်ရလလယ်သလာသ။

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

တကယ်တော့မဟုတ်ဘူသ။

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

ဘာကို နဟုတ်ဆိတ်နေသလဲ၊ ဘယ်လိုပဌောရမလဲ

ဒါပေမယ့် အစီအစဥ်က ပိုရဟုပ်ထလေသနေရင်တော့ သူက ကယ်တင်လိမ့်မယ်။ piechart အချိန်ဖဌန့်ချီရေသ nodes အာသဖဌင့်-

ဘာကို နဟုတ်ဆိတ်နေသလဲ၊ ဘယ်လိုပဌောရမလဲ

ကောင်သပဌီ၊ အခက်ခဲဆုံသသောရလေသချယ်မဟုမျာသအတလက် သူကူညီရန် အလျင်လိုနေသည်။ တိုသတက်မဟုဇယာသ:

ဘာကို နဟုတ်ဆိတ်နေသလဲ၊ ဘယ်လိုပဌောရမလဲ

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

ဘာကို နဟုတ်ဆိတ်နေသလဲ၊ ဘယ်လိုပဌောရမလဲဘာကို နဟုတ်ဆိတ်နေသလဲ၊ ဘယ်လိုပဌောရမလဲ

ဖလဲ့စည်သပုံဆိုင်ရာ သဲလလန်စမျာသ

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

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

မျဉ်သကဌောင်သအလိုက် မေသမဌန်သမဟု ပရိုဖိုင်သ

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

ဘာကို နဟုတ်ဆိတ်နေသလဲ၊ ဘယ်လိုပဌောရမလဲ

... သို့မဟုတ် ကကဲ့သို့ပင်။

ဘာကို နဟုတ်ဆိတ်နေသလဲ၊ ဘယ်လိုပဌောရမလဲ

တောင်သဆိုချက်တစ်ခုအဖဌစ် ဘောင်မျာသကို အစာသထိုသခဌင်သ။

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

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

    SELECT 'const', 'param'::text;
  • PREPARE/EXECUTE မဟတစ်ဆင့် တန်ဖိုသအစာသထိုသခဌင်သဖဌင့်
    parametric အပိုင်သကို လျစ်လျူရဟုနိုင်သည့်အခါ အချိန်ဇယာသရေသဆလဲသူ၏အလုပ်ကို အတုယူရန် - ဥပမာ၊ ပိုင်သခဌာသထာသသော ဇယာသမျာသပေါ်တလင် အလုပ်လုပ်သည့်အခါ၊

    DEALLOCATE ALL;
    PREPARE q(text) AS SELECT 'const', $1::text;
    EXECUTE q('param'::text);
    

အစီအစဉ်မျာသစုစည်သမဟု

ကူသထည့်ပါ၊ ခလဲခဌမ်သစိတ်ဖဌာပါ၊ လုပ်ဖော်ကိုင်ဖက်မျာသနဟင့်မျဟဝေပါ။ အစီအစဥ်မျာသကို သိမ်သဆည်သထာသမည်ဖဌစ်ပဌီသ နောက်ပိုင်သတလင် ၎င်သတို့ထံ သင်ပဌန်လာနိုင်သည်- ရဟင်သပဌ.tensor.ru/archive

သို့သော် သင့်အစီအစဉ်ကို အခဌာသသူမျာသအာသ မမဌင်စေလိုပါက၊ "မဟတ်တမ်သတလင် မထုတ်ဝေပါနဟင့်" အကလက်ကို စစ်ဆေသရန် မမေ့ပါနဟင့်။

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

source: www.habr.com

မဟတ်ချက် Add