डेटाबेस हमेशा रिकवरी मोड में शुरू होता है


11

हर बार जब मैं अपने सर्वर को पुनरारंभ करता हूं, डेटाबेस हमेशा रिकवरी मोड में होता है, और इसे सामान्य रूप से व्यवहार करने में लगभग 20 मिनट लगते हैं। यह हमेशा और केवल तब होता है जब मैं सर्वर को पुनरारंभ करता हूं, इसलिए मेरे पास कुछ प्रश्न हैं ...

  1. मुझे बताया गया कि यह एक बड़ी लॉग फ़ाइल के कारण हो सकता है? क्या यह सही हो सकता है? यदि नहीं, तो अन्य कारण क्या हो सकते हैं?
  2. मुझे पुनर्प्राप्ति को रोकने के लिए लॉग फ़ाइल का स्थान कम करना होगा। क्या बेहतर है: सिकुड़ना या छोटा होना?
  3. मैं आकार को कम करने के लिए लॉग फ़ाइल / डेटाबेस को कैसे छोटा या छोटा कर सकता हूं? वाक्य रचना क्या है?

मैं वर्तमान में Microsoft SQL Server 2008 का उपयोग कर रहा हूं।


क्या आप उड़ान बंद होने पर बड़े लेनदेन करते हैं? रिकवरी अंतराल किसके लिए निर्धारित है?
मार्टिन स्मिथ

सर्वर रीस्टार्ट करने से 20 मिनट पहले कोई क्रिया नहीं की जाती है, चुनिंदा कथनों के अलावा, अंतराल को

आप कितनी बार शुरू करते हैं? आप कितनी बार डेटाबेस का बैकअप लेते हैं? मैं सोच रहा हूं कि आप नियमित रूप से सर्वर क्यों शुरू कर रहे हैं? पूरा होने के लिए, आप मैन्युअल रूप से एक डेटाबेस (जो लॉग को साफ़ करता है) को ज़रूरत पड़ने पर जांच सकते हैं।
लिन लैंगिट

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

ज्यादा जानकारी नहीं है। रिकवरी मॉडल? क्या आप मिररिंग या प्रतिकृति जैसी सुविधाओं का उपयोग कर रहे हैं? डेटाबेस और फ़ाइलों का आकार शामिल है? क्या डेटाबेस किसी बड़े लेनदेन को संभालता है ?
जॉन सीगेल

जवाबों:


6

मेरे पास एक ही मुद्दा है और मुझे विश्वास है कि मैंने इसे हल कर लिया है लेकिन मैं इसकी पुष्टि करने के लिए पूरी तरह से परीक्षण करने में सक्षम नहीं हूं।

मेरा मानना ​​है कि समस्याएँ आपके लॉग फ़ाइल में मौजूद वीएलएफ की संख्या से संबंधित हैं न कि उसके आकार से। यदि आपके पास एक बड़ी लॉगफाइल है, तो यह संभावना है कि यह ऑटो विकास की घटनाओं के माध्यम से व्यवस्थित रूप से बढ़ी और यह एक जानबूझकर नियोजित विकास नहीं था। अगर ऐसा है तो आपके पास लॉग फ़ाइलों के अंदर हजारों VLF हो सकते हैं।

यहाँ यह देखने के लिए कि आपके पास यहाँ से कितने वीएलएफ हैं, यह देखने के लिए एक प्रश्न है :

    Create Table #stage(
    FileID      int
  , FileSize    bigint
  , StartOffset bigint
  , FSeqNo      bigint
  , [Status]    bigint
  , Parity      bigint
  , CreateLSN   numeric(38));

Create Table #results(
    Database_Name   sysname
  , VLF_count       int 
);

Exec sp_msforeachdb N'Use ?; 
            Insert Into #stage 
            Exec sp_executeSQL N''DBCC LogInfo(?)''; 

            Insert Into #results 
            Select DB_Name(), Count(*) 
            From #stage; 

            Truncate Table #stage;'

Select * 
From #results
Order By VLF_count Desc;

Drop Table #stage;
Drop Table #results;

वीएलएफ क्या हैं, इस लिंक पर आगे की व्याख्या के लिए ।

मेरा मानना ​​है कि मुद्दा यह है कि इतने सारे वीएलएफ के साथ एसक्यूएल सर्वर को अपने राज्य का आकलन करने में काफी समय लगता है और फिर डेटाबेस को रिकवरी से बाहर लाया जाता है। यदि आप अपनी लॉग फ़ाइल को सबसे छोटे आकार में सिकोड़ते हैं, तो अक्सर पहले वीएलएफ का आकार जो लॉग फ़ाइल में बनाया गया था, तो आप तुरंत जानबूझकर इसे फिर से विकसित कर सकते हैं और इस तरह यह वीएलएफ की सही संख्या बना सकता है (कुछ से कम 16)।

एक बार जब यह पूरा हो जाता है तो मेरा मानना ​​है कि आप यह देख पाएंगे कि आपका डेटाबेस बहुत तेजी से रिकवरी से बाहर आता है।

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



2

इस MSDN लेख से :

सभी प्रकार की चौकियों के लिए लंबे समय तक चलने वाले बिना लेनदेन के वसूली समय में वृद्धि होती है।

यह आमतौर पर उत्पादन डेटाबेस पर किसी भी प्रकार के DBCC संकोचन को चलाने के लिए अनुशंसित नहीं है। लॉग इन ट्रंकेशन व्यवहार को भी पहले के संस्करणों से 2008 में बदल दिया गया है (धन्यवाद @ एडवर्ड) - इस ब्लॉग के अनुसार :

Trucate_only के साथ बैकअप लॉग अब SQL 2008 में समर्थित नहीं है। यदि आपका डेटाबेस बल्क-लॉग या पूर्ण पुनर्प्राप्ति मॉडल में है, तो नियमित अंतराल पर टी-लॉग बैकअप शेड्यूल करें और यह आपके टी-लॉग को आकार देगा।

फिर, मैं उल्लेख करूंगा, आप कितनी बार डेटाबेस का बैकअप लेते हैं? आमतौर पर, नियमित बैकअप लॉग आकार को "बेहतर" प्रबंधित करते हैं।


0

ऑनलाइन लेन-देन लॉग के आकार को कम करने से समस्या को ठीक किया जा सकता है, अर्थात ऑनलाइन होने वाले डेटाबेस को गति दें, लेकिन आपको ऐसा करने से पहले आपदा वसूली के बारे में सोचना चाहिए। ध्यान दें कि यदि आप सरल पुनर्प्राप्ति मॉडल में हैं, तो आप समय में एक बिंदु पर पुनर्स्थापित नहीं कर पाएंगे। दूसरी ओर, यदि आप पूर्ण पुनर्प्राप्ति मॉडल में हैं, तो ऑनलाइन लेन-देन लॉग का आकार बनाए रखने का सबसे अच्छा तरीका नियमित आधारों पर लेन-देन लॉग बैकअप बनाना है (इसे शेड्यूल करें)।

लेन-देन लॉग को खाली करना भौतिक हार्ड डिस्क स्थान को मुक्त नहीं करता है, यह केवल SQL सर्वर को पिछले CHEKPOINT (पिछले लेनदेन लॉग बैकअप के बाद) से हुए लेनदेन के लिए उस स्थान का पुन: उपयोग करने की अनुमति देता है।

यदि आप डेटाबेस को सिकोड़ते हैं, तो आप फ़ाइलों का आकार कम कर देंगे। MyDB डेटाबेस को 15 प्रतिशत से कम करने के लिए:

DBCC SHRINKDATABASE (MyDB, 15); जाओ

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