2008-08-12 13 views
6

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

क्या यह केवल प्रत्येक डेटाबेस कॉल में टाइमर समेत और परिणाम लॉगिंग करने का मामला है, या क्या ऐसा करने का 'neater' तरीका है? हो सकता है कि एक ढांचा है जो आपके लिए पहले से ही करता है, या कोई ध्वज है जिसे मैं सक्षम कर सकता हूं उदा। लिंक-टू-एसक्यूएल जो समान कार्यक्षमता प्रदान करेगा।

मैं मुख्य रूप से सी # का उपयोग करता हूं लेकिन विभिन्न भाषाओं के तरीकों को देखने में भी दिलचस्पी लेता हूं, और मुझे SQL प्रोफाइलर जैसे डीबी प्लेटफ़ॉर्म विधि पर ऐसा करने के 'कोड' तरीके में अधिक रुचि होगी।

उत्तर

1

यदि कोई क्वेरी अधिक है तो एक टेबल पर बस एक साधारण चयन मैं हमेशा इसे EXSLAIN के माध्यम से चलाता हूं यदि मैं MySQL या PostgreSQL पर हूं। यदि आप SQL सर्वर का उपयोग कर रहे हैं तो प्रबंधन स्टूडियो में एक प्रदर्शन अनुमानित निष्पादन योजना है जो अनिवार्य रूप से वही है। यह देखने के लिए उपयोगी है कि इंजन प्रत्येक तालिका तक कैसे पहुंच जाएगा और यह किस सूचकांक का उपयोग करेगा। कभी-कभी यह आपको आश्चर्यचकित करेगा।

0

यदि आप एसक्यूएल प्रबंधन स्टूडियो में प्रश्न लिख रहे हैं तो आप दर्ज कर सकते हैं: SET STATISTICS TIME ON और एसक्यूएल सर्वर आपको बताएगा कि क्वेरी के अलग-अलग हिस्सों को पार्स, संकलन और निष्पादित करने में कितना समय लगेगा। आप SqlConnection वर्ग के InfoMessage घटना से निपटने के द्वारा इस जानकारी को लॉग इन करने में सक्षम हो सकता है (लेकिन मैं का उपयोग कर एसक्यूएल प्रोफाइलर बहुत आसान है लगता है।)

1

डेटाबेस कॉल, सकल समय और अभिलेखों की संख्या (बाइट्स रिकॉर्डिंग) आवेदन में लौटाया उपयोगी है, लेकिन यह आपको आवश्यक सारी जानकारी देने वाला नहीं है।

यह आपको उन उपयोग पैटर्न दिखा सकता है जिनकी आप उम्मीद नहीं कर रहे थे। यह दिखा सकता है कि "सेट आधारित" संचालन के बजाय "पंक्ति-दर-पंक्ति" पहुंच का उपयोग कहां किया जा सकता है।

उपयोग करने का सबसे अच्छा टूल एसक्यूएल प्रोफाइलर है और सीपीयू और अवधि बनाम "रीड्स" की संख्या का विश्लेषण करता है। आप उच्च CPU प्रश्नों, उच्च पढ़ने और लंबी अवधि (duh!) से बचना चाहते हैं।

"ग्रुप बाय रीड" शीर्षस्थतम प्रश्नों को शीर्ष पर लाने के लिए एक उपयोगी सुविधा है।

0

मैंने सोचा होगा कि यहां पूछने की महत्वपूर्ण बात यह है कि "आप किस डेटाबेस प्लेटफ़ॉर्म का उपयोग कर रहे हैं?"

उदाहरण के लिए, साइबेस में, MDA tables इंस्टॉल करने से आपकी समस्या हल हो सकती है, वे प्रक्रिया कॉल उपयोग से औसत लॉजिकल I/O, CPU समय और अनुक्रमणिका कवरेज तक आंकड़ों का पूरा समूह प्रदान करते हैं। यह उतना चालाक हो सकता है जितना आप चाहते हैं।

0

मैं निश्चित रूप से एसक्यूएल प्रोफाइलर का उपयोग करने में मूल्य देखता हूं, जबकि आप ऐप चल रहे हैं, और एक्सप्लाइन या सेट स्टेटस आपको व्यक्तिगत प्रश्नों के बारे में जानकारी देंगे, लेकिन क्या कोई नियमित रूप से डेटाबेस प्रश्नों के बारे में जानकारी इकट्ठा करने के लिए माप कोड डालता है चल रहा है - उदाहरण के लिए, एक टेबल पर एक क्वेरी जो प्रारंभ में ठीक प्रदर्शन करती है, लेकिन पंक्तियों की संख्या बढ़ने के साथ धीमी और धीमी हो जाती है।

यदि आप MySQL या Postgre का उपयोग कर रहे हैं तो वास्तविक समय में क्वेरी गतिविधि देखने के लिए कई टूल हैं, लेकिन मुझे समय के साथ क्वेरी प्रदर्शन को मापने के लिए एसक्यूएल प्रोफाइलर के रूप में अच्छा टूल नहीं मिला है।

मुझे आश्चर्य है कि ELMAH के समान कुछ ऐसा है (या होना चाहिए?) जैसा कि यह सिर्फ प्लग इन करता है और आपको बिना अतिरिक्त प्रयास किए जानकारी देता है?

0

यदि आप फायरबर्ड में हैं तो आप sinatica.com देख सकते हैं।
हम जल्द ही फायरबर्ड डीबीए के लिए एक वास्तविक समय निगरानी उपकरण लॉन्च करेंगे।

</बेशर्म प्लग>

0

आप हाइबरनेट का उपयोग करते हैं (मैं जावा संस्करण का उपयोग, मैं कल्पना करता NHibernate कुछ इसी तरह की है), तो आप हाइबरनेट अलग अलग बातें की बहुत सारी के बारे में आंकड़े एकत्रित हो सकता है। देखें, उदाहरण के लिए:

http://www.javalobby.org/java/forums/t19807.html

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