हम .NET 4.0 में विकसित ओएलटीपी सिस्टम को लोड करने में व्यस्त हैं और पीठ में SQL सर्वर 2008 R2 चलाते हैं। सिस्टम SQL सर्वर सेवा ब्रोकर कतारों का उपयोग करता है, जो बहुत प्रदर्शन कर रहे हैं, लेकिन हम प्रसंस्करण के दौरान अजीबोगरीब प्रवृत्ति का सामना कर रहे हैं।
SQL सर्वर प्रक्रिया 1 मिनट के लिए ब्लिस्टरिंग दर पर अनुरोध करती है, जिसके बाद डिस्क लेखन गतिविधि में ~ 20 सेकंड की वृद्धि हुई है। निम्नलिखित ग्राफ समस्या का चित्रण करता है।
Yellow = Transactions per second
Blue = Total CPU usage
Red = Sqlsrv Disk Write Bytes/s
Green = Sqlsrv Disk Read Bytes/s
समस्या निवारण के दौरान, हमने पैटर्न में कोई महत्वपूर्ण बदलाव किए बिना निम्नलिखित की कोशिश की:
- बंद SQL सर्वर एजेंट।
- लगभग हर दूसरे चलने की प्रक्रिया को मार डाला (नो ए / वी, एसएसएमएस, वीएस, विंडोज एक्सप्लोरर, आदि)
- अन्य सभी डेटाबेस को हटा दिया गया।
- सभी वार्तालाप टाइमर अक्षम करें (हम किसी भी ट्रिगर का उपयोग नहीं करते हैं)।
- एक सरल / क्रूड टेबल मॉनिटरिंग डिज़ाइन के लिए संदेश कतार संचालित दृष्टिकोण से दूर चला गया।
- हल्के से भारी तक विभिन्न भार का उपयोग किया।
- सभी गतिरोधों को ठीक किया।
ऐसा लगता है जैसे कि SQL सर्वर अपने कैश का निर्माण कर रहा है और इसे विशिष्ट समय-आधारित अंतराल पर डिस्क पर लिख रहा है, लेकिन मुझे इस सिद्धांत का समर्थन करने के लिए ऑनलाइन कुछ भी नहीं मिल रहा है।
अगला, मैं इस समस्या को दोहराने के लिए यह देखने के लिए हमारे समर्पित परीक्षण वातावरण पर समाधान को स्थानांतरित करने की योजना बना रहा हूं। अंतरिम में किसी भी मदद की बहुत सराहना की जाएगी।
अपडेट 1 , अनुरोध के अनुसार, एक ग्राफ जिसमें चेकपॉइंट पृष्ठ / सेक , पृष्ठ जीवन प्रत्याशा और कुछ डिस्क विलंबता काउंटर शामिल हैं।
ऐसा प्रतीत होता है जैसे चेकपॉइंट (हल्की नीली रेखा) कम प्रदर्शन (पीली लाइन) का कारण है जिसे हम देख रहे हैं। ^
डिस्क विलंबता प्रसंस्करण के दौरान अपेक्षाकृत सुसंगत रहती है और पृष्ठ जीवन प्रत्याशा पर कोई ध्यान देने योग्य प्रभाव नहीं पड़ता है। हमने SQL सर्वर के लिए उपलब्ध RAM की मात्रा को भी समायोजित किया, जिसका बड़ा प्रभाव नहीं पड़ा। से वसूली मॉडल बदलने SIMPLE
के लिए FULL
भी किया जाता कम अंतर।
अपडेट 2 "रिकवरी इंटरवल" को निम्नानुसार बदलकर, हमने उन अंतरालों को कम करने में कामयाबी हासिल की है जिन पर चौकियों का निर्माण होता है:
EXEC sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
EXEC sp_configure 'recovery interval', '30'
GO
RECONFIGURE
GO
EXEC sp_configure 'show advanced options',0
GO
RECONFIGURE
मैं अनिश्चित हूं कि क्या यह बुरा अभ्यास है?
FULL
या नहीं BULK_LOGGED
, यह तब भी व्यवहार करता है SIMPLE
जब तक कि आप पूर्ण बैकअप नहीं लेते।