2011-02-08 10 views
6

मैं एक लंबे समय से चल रहे plpgsql संग्रहीत प्रक्रिया के प्रदर्शन में सुधार करने की कोशिश कर रहा हूं, लेकिन मुझे नहीं पता कि क्या, यदि कोई हो, प्रोफाइलिंग टूल उपलब्ध हैं। क्या कोई ऐसी प्रक्रिया को प्रोफाइल करने के बारे में सुझाव दे सकता है?plpgsql प्रक्रियाओं को कैसे प्रोफाइल करें

उत्तर

5

को clock_timestamp() सहित प्रक्रिया से कुछ बढ़ाएं ताकि यह देखने के लिए कि डेटाबेस समय व्यतीत करता है। और प्रक्रियाओं को यथासंभव सरल बनाएं।

क्या आप हमें एक उदाहरण दिखा सकते हैं?

+0

मैं ऐसी विधि की उम्मीद कर रहा था जिसके लिए प्रक्रिया में बदलाव की आवश्यकता नहीं होगी, लेकिन यह शायद कुछ भी नहीं होगा। http://www.depesz.com/index.php/2010/03/18/profiling-stored-proceduresfunctions/ एक समान प्रक्रिया दस्तावेज करता है, लेकिन यह उपयोग करने योग्य डेटा प्राप्त करने के लिए अत्यधिक जटिल लगता है। यह प्रक्रिया एक सोलर डेटा आयात हैंडलर क्वेरी के लिए दस्तावेज़ बनाने के लिए उपयोग किए गए नेस्टेड लूप का एक सेट है, यदि यह किसी भी (शायद नहीं) में मदद करता है। – Aneurysm9

+0

यह करने का यह एक अच्छा तरीका नहीं है, लेकिन यह एकमात्र तरीका है। यही कारण है कि चीजों को छोटा और सरल रखना महत्वपूर्ण है: अन्य कोड की तरह, छोटी प्रक्रियाओं को डीबग और प्रोफ़ाइल के लिए बहुत आसान है। –

+0

दुर्भाग्यवश, प्रक्रिया जितनी सरल हो सकती है उतनी सरल है। यह कुछ डेटा चुनकर 1: एन रिश्तों का एक गुच्छा चलता है, एन पर पुनरावृत्ति करता है, अधिक डेटा चुनता है, नेस्टेड 1: एन रिश्ते पर फिर से चल रहा है, फिर पूर्ण पंक्ति तैयार होने के बाद आंतरिक लूप से आगे लौटें। चयन या फॉर से अधिक जटिल सब कुछ पहले ही अन्य प्रक्रियाओं में रखा गया है। – Aneurysm9

1

साथ शुरू करने के लिए, आप पोस्टग्रेज़ लॉगफाइल में logging of all statements चालू कर सकते हैं। लॉग में प्रत्येक कथन के लिए रनटाइम होगा। इस तरह आप सबसे धीमे प्रश्नों की पहचान कर सकते हैं और उन्हें अनुकूलित करने का प्रयास कर सकते हैं।

लेकिन फ्रैंक की पोस्ट पर आपकी टिप्पणी पढ़ना मुझे लगता है कि लूपिंग आपकी समस्या है। लूपिंग से छुटकारा पाने की कोशिश करें और एक ही प्रश्न में सबकुछ करें। एक बयान जो बहुत सारी पंक्तियों को पढ़ता है, आमतौर पर कुछ पंक्तियों को पढ़ने वाले कई बयानों से अधिक कुशल होता है।

1

pg_stat_statements एक्सटेंशन (http://www.postgresql.org/docs/9.2/static/pgstatstatements.html) का उपयोग करने का प्रयास करें। यह सभी कथनों के लिए कॉल नंबर और कुल कॉल टाइम दिखा सकता है (plpgsql प्रक्रियाओं के भीतर उप-कथन सहित)।

2

वर्तमान में हम इस प्रश्न के लिए एक बेहतर जवाब के लिए देख रहे हैं, और इस उपकरण भर में ठोकर खाई है http://www.openscg.com/2015/02/postgresql-plpgsql-profiler/ पर होस्ट किया गया: https://bitbucket.org/openscg/plprofiler

यह आप देने के लिए आप के लिए क्या देख रहे हैं, कुल समय सहित का दावा समारोह की प्रत्येक पंक्ति पर खर्च किया। हमने अभी तक इसकी जांच नहीं की है, लेकिन लेखक के दावों के आधार पर, हम आशावादी हैं।

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