2015-12-02 7 views
5

पर बहुत समय लेना/पुनर्स्थापित करना मेरे पास उबंटू 12.04 का उपयोग करके एक अमेज़ॅन ec2 इंस्टेंस (SAY S1) (4core -7GB मेमोरी) है, जो postgresql 9.1 के साथ अपना वेब ऐप चला रहा है। सभी पोस्टग्रेर्स डेटा को 100 जीबी की एक अलग एसएसडी वॉल्यूम (रूट नहीं) पर संग्रहीत किया जाता है। (अब इसे वर्तमान में केवल 26% पूर्ण लिखें)।पोस्टग्रेस अमेज़ॅन ec2

अचानक एक दिन या दो कुछ पोस्टग्रेस कार्यों से बहुत समय लगाना शुरू हो गया। कमांड बनाएं (52 सेकंड) और एक डीबी बहाल करें (9 मिनट अब, पहले 50 सेकंड अधिकतम)।

पोस्टग्रेस कमांड चलाते समय iostat चलाकर मैं पुष्टि कर सकता हूं कि इसकी आईओपीएस की आईओपीएस जो इसकी सीमा तक पहुंच गई है (3 आईओपीएस/जीबी 100 जीबी वॉल्यूम के लिए 300 आईओपीएस बराबर है)। इस आदेश को iostat -d 5 -x -p xvdf चलाने के बाद इसे नीचे देख सकते हैं।

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.35  2.28 1.20 298.99 19.65 13082.19 87.29 23.42 78.03 64.19 78.09 3.29 98.75 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  1.80 0.00 297.40  0.00 13067.20 87.88 126.47 420.75 0.00 420.75 3.35 99.76 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  1.80 0.00 297.40  0.00 13067.20 87.88 126.32 417.95 0.00 417.95 3.35 99.76 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  1.80 0.00 297.80  0.00 13093.60 87.94 131.70 440.82 0.00 440.82 3.36 100.00 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  0.00 0.00 301.00  0.00 13225.60 87.88 129.36 422.97 0.00 422.97 3.32 99.84 

एडब्ल्यूएस पर IO characteristics कहते हैं कि प्रत्येक IOPS 256KiB के एक अनुरोध लेता है या बहुत कम वापस IOPS अनुरोध की अधिक संख्या है, जिसके परिणामस्वरूप लिखने के लिए डेटा के छोटे ब्लॉकों का उपयोग कर postgres है?

जबकि मेरे पास 100 जीबी वॉल्यूम (9 5% अभी पूर्ण) के साथ एक और ec2 इंस्टेंस (अभी एस 2 एस) है, जिसमें पोस्टग्रेस डेटा रूट वॉल्यूम पर है और यह शानदार प्रदर्शन कर रहा है। तो वॉल्यूम का आकार कुछ ऐसा है जो मुझे यकीन है कि इससे कोई फर्क नहीं पड़ता।

एस 1 की केवल प्रभावित मात्रा में पोस्टग्रेस डेटा स्टोर की मात्रा अभी भी मैं नीचे दिए गए आंकड़ों को iostat द्वारा देख सकता हूं। निश्चित नहीं है कि आंकड़े इस तरह क्यों हैं और वॉल्यूम के आकार को बढ़ाए बिना पोस्टग्रेस कमांड समय को कैसे कम कर सकते हैं। (सभी कार्यों जबकि 3GB स्मृति हमेशा नि: शुल्क है)

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.34  2.29 1.23 298.93 20.10 13079.03 87.28 26.19 87.26 66.96 87.34 3.29 98.78 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  2.40 0.60 299.00  4.80 13020.80 86.95 132.22 434.48 108.00 435.14 3.34 100.00 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  3.20 4.40 295.20 43.20 12866.40 86.18 122.18 417.09 142.00 421.20 3.34 100.00 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  2.80 2.40 297.20 23.20 12940.00 86.54 122.70 401.11 124.00 403.34 3.34 99.92 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  3.40 4.80 294.80 46.40 12840.00 86.02 127.43 433.15 161.67 437.57 3.34 99.92 

नोट: postgres के प्रभावित मात्रा 110 एमबी/db के औसत आकार के साथ 100 विभिन्न postgres db शामिल हैं (लेकिन ईमानदारी से मुझे नहीं लगता कि यह किसी भी मामले में है एक समस्या)

उत्तर

0

तो अंत में यह समस्या हल हो गई। और पाया कि यह postgres statistics collector था जो पृष्ठभूमि में चल रहा था और 100 जीबी डिस्क के लिए सभी 300 आईओपीएस खाने के लिए बहुत छोटे (कम 256 केबी) आईओ अनुरोध (जैसे हमारे पास 100+ डीबीएस) जारी कर रहा था। सभी पोस्टग्रेस कार्यों का परिणाम कतार में निर्धारित किया गया था और प्रक्रिया में बहुत समय लग रहा था।

Postgres दस्तावेज़

आँकड़े कलेक्टर बैकेंड (autovacuum सहित) अस्थायी फ़ाइलों के माध्यम से करने के लिए एकत्रित की गई जानकारी पहुंचाता कहते हैं। ये फ़ाइलें pg_stat_tmp उपनिर्देशिका में संग्रहीत हैं। जब पोस्टमास्टर नीचे बंद करता है, तो आंकड़े डेटा की एक स्थायी प्रति वैश्विक उपनिर्देशिका में संग्रहीत की जाती है। बढ़ते प्रदर्शन के लिए, पैरामीटर figures_temp_directory को रैम-आधारित फ़ाइल सिस्टम, भौतिक I/O आवश्यकताओं को कम करने पर इंगित किया जा सकता है।

मैंने pg_stats_tmp फ़ाइल को टीएमएफएस फाइल सिस्टम में pg_stats_tmp को घुमाने के द्वारा रैम की बजाय डिस्क पर इंगित किया। यह blog बताता है कि इसे चरणबद्ध तरीके से कैसे करें।

संबंधित मुद्दे