SQL सर्वर को क्रैश करने वाले SQL क्वेरी को कैसे ट्रेस करें


9

हमारे पास SQL ​​Server 2008 डेटाबेस सर्वर है (यह MS Failover Clustering के तहत चल रहा है, लेकिन मुझे नहीं लगता कि यह यहां प्रासंगिक है)।

हमारा एप्लिकेशन DB पहुंच के लिए हाइबरनेट चलाता है, और जब से हमने हाल ही में v3.1 से 3.6 में अपग्रेड किया है, हम SQL सर्वर को नियमित रूप से क्रैश होने का अनुभव कर रहे हैं (हर 24-48 घंटे, लेकिन कभी-कभी अधिक बार)।

प्रश्न में विशिष्ट समस्या स्मृति से संबंधित प्रतीत होती है। सर्वर के दुर्घटनाग्रस्त होने से पहले (और फिर फेलओवर क्लस्टर प्रबंधक द्वारा ऐसा लगता है कि ऑटो फिर से चालू हो जाता है), हमें इन त्रुटियों का भार मिलता है:

Error: 701, Severity: 17, State: 130.
There is insufficient system memory in resource pool 'internal' to run this query.

के समसामयिक (लेकिन नियमित) संदेश

Error: 17300, Severity: 16, State: 1. (Params:). The error is printed in terse mode because there was error during formatting. Tracing, ETW, notifications etc are skipped.

त्रुटि: 17312, गंभीरता: 16, राज्य: 1. (परम :)। त्रुटि को मोड में मुद्रित किया जाता है क्योंकि स्वरूपण के दौरान त्रुटि हुई थी। ट्रेसिंग, ETW, नोटिफिकेशन आदि को छोड़ दिया जाता है।

मुझे कुछ ऐप स्तर की त्रुटियां भी हो रही हैं जैसे कि

java.sql.SQLException: A time out occurred while waiting to optimize the query. Rerun the query.

और फिर रोमांचक और संभवतः शिक्षाप्रद त्रुटि:

The query processor ran out of internal resources and could not produce a query plan. 
This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. 
Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information.

सर्वर पर लोड नहीं बदला है, इसलिए इसका कोई कारण नहीं है कि इसे अब मेमोरी से बाहर कर दिया जाना चाहिए जब यह पहले प्रश्नों को भेजने के साथ समस्या का संकेत नहीं दे रहा था।

अब इस प्रश्न पर - मैं उन प्रश्नों को कैसे ट्रेस करूं जो इस त्रुटि का कारण बन रहे हैं (और इस तरह संभवतः सभी समस्याओं का)? ऐसा लगता है जैसे हमारे हाइबरनेट अपग्रेड के बाद, यह SQL सर्वर पर कुछ विशाल प्रश्नों को निकाल रहा है, और इसे तोड़ दिया है। जैसा कि ऐसा होता है, मेरे पास कुछ विचार हैं जैसे वे क्या हो सकते हैं, लेकिन उन्हें ट्रेस करने में सक्षम होना अच्छा होगा।

मैं निश्चित रूप से SQL सर्वर प्रोफाइलर चला सकता हूं, लेकिन एक बार ऐसा करने के बाद (और डेटा की एक बड़ी मात्रा में उत्पादन किया गया - यह एक व्यस्त ओटीपी डेटाबेस है), मैं समस्याग्रस्त प्रश्नों को खोजने के लिए कैसे फ़िल्टर करूं?

धन्यवाद!


1
क्या सब कुछ एक ही सर्वर पर चल रहा है? मतलब, एप्लिकेशन सर्वर, जावा के साथ, डेटाबेस सर्वर पर भी चल रहा है?
स्वस्चिट

1
@ स्वैसेक के प्रश्न के साथ सहयोग में: क्या आपके पास SQL ​​सर्वर अधिकतम मेमोरी के लिए एक स्पष्ट मूल्य निर्धारित है? क्या आपने बाहरी मेमोरी प्रेशर से इंकार किया है?
माइक फाल

क्या आपने ब्लैक बॉक्स के निशान देखने की कोशिश की है? वे आपको सही दिशा में इशारा कर सकते हैं।
डेटागोड

मैं बस इस बात को हिट करता हूं, और मैंने जो निशान छोड़ा है वह एप्लिकेशन के नजरिए से एक बेकार डेटाबेस दिखा रहा है।
जोशुआ

क्या आप किसी फुलटेक्स्ट खोज का उपयोग करते हैं? इसके अलावा, आपके द्वारा चलाए जा रहे sql सर्वर का सटीक बिल्ड नं + संस्करण क्या है?
परिजन शाह

जवाबों:


5

SQL सर्वर पर मेमोरी उपयोग की निगरानी करने के लिए DBCC MEMORYSTATUSकमांड का उपयोग करने के लिए चरण रूपरेखा का पालन करें । उपाय की कार्रवाई आपके निष्कर्षों पर निर्भर करेगी। आप यह भी पढ़ सकते हैं कि Microsoft SQL सर्वर मेमोरी अड़चनों की पहचान कैसे करें जो अधिक सुलभ है।

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


धन्यवाद - मैंने उन लोगों को पहले से ही देखा है, लेकिन समस्या यह है कि सर्वर ठीक काम करता है और फिर अचानक धमाका हो जाता है, यह धीरे-धीरे मेमोरी से बाहर नहीं निकलता है। यह कुछ भी स्पष्ट नहीं है कि मैं ऑनलाइन पा सकता हूं कि "क्वेरी चलाने के लिए संसाधन पूल 'आंतरिक में अपर्याप्त सिस्टम मेमोरी क्या त्रुटि है।" वास्तव में इसका मतलब है - DBCC MEMORYSTATUS के परिणामों के संबंध में आंतरिक संसाधन पूल क्या है?

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

0

लगता है कि आप Extended Eventsघटनाओं का उपयोग करके कॉन्फ़िगरेशन के लिए जाना चाहते हैं query_memory_grant_xxxxx

यह जानकारी और लॉग-आउट किए गए SQL इंजन को संग्रहीत करने के लिए आपके लिए सबसे अच्छा विकल्प है, जिसे आप कभी भी पढ़ सकते हैं (आप लाइव डेटा भी देख सकते हैं), संग्रहीत जानकारी को तब नहीं मिटाया जाएगा जब सर्वर पुनरारंभ इसके विपरीत होता है DMVs

त्वरित सेटअप चरण ।।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.