Sql Server - बढ़ते डेटाबेस फ़ाइलों के लिए सर्वोत्तम अभ्यास


16

मैं दो सप्ताह के लिए sql सर्वर 2008 r2 में डेटा कलेक्टर के माध्यम से फ़ाइल विकास की निगरानी कर रहा हूं। डेटाबेस लगभग 35 (एमबी) / दिन पर लगातार बढ़ रहा है। DB ने अभी तक 2 जीबी के शुरुआती आकार को नहीं मारा है।

DB फाइल ऑटो ग्रोथ 5MB पर सेट है और मैं एक अलग दृष्टिकोण आजमाना चाहता हूं, इसलिए मैं सुझाव और टिप्पणियों की तलाश कर रहा हूं।

एक ट्यूनिंग कार्य है जो प्रत्येक सप्ताह रविवार की रात 1:30 बजे चलता है। कार्य होगा:

  • डेटाबेस अखंडता की जाँच करें
  • लॉग फ़ाइल को सिकोड़ें - (यह ठीक है क्योंकि लॉगिंग मोड सरल है)
  • डेटाबेस सिकोड़ें
  • सूचकांक का पुनर्गठन करें
  • सूचकांक का पुनर्निर्माण
  • अपडेट सांख्यिकी
  • क्लीन अप हिस्ट्री

मैं साप्ताहिक ट्यूनिंग योजना में दो और कदम जोड़ना चाहूंगा:

  1. अगर इस्तेमाल की गई जगह एक निश्चित सीमा या कुल आकार तक पहुँचती है तो डेटाबेस फ़ाइल को 500 एमबी बढ़ाएँ।
  2. अगर इस्तेमाल की गई जगह कुल आकार की एक निश्चित सीमा तक पहुँच जाती है, तो लॉग फ़ाइल को 250 एमबी (सिकुड़ने के बाद) में बढ़ाएँ।

विकास के बोझ को ऑफ़लाइन घंटों में रखकर, मुझे भारी भार के दौरान ऑटो-विकास की घटनाओं की संख्या को कम करके प्रदर्शन हासिल करने की उम्मीद है।

मेरे पास ऑटो बढ़ने वाली फ़ाइलों से संबंधित दो प्रश्न हैं।

  • फ़ाइल के बढ़ने के चरणों को रखने के लिए सबसे अच्छी जगह मौजूदा चरणों से पहले या बाद में होगी?
  • यदि मैं ALTER DATABASE|MODIFY FILEफ़ाइल को विकसित करने के लिए उपयोग करता हूं तो मैं कैसे निर्धारित कर सकता हूं SpaceUsedInFile >= (TotalFileSpace-@AllowanceThreshold)?

2
आपके डीबी का आकार इतना होना चाहिए कि वह कभी न बढ़े। कोई भी कम नहीं, सुनिश्चित करें कि त्वरित फ़ाइल प्रारंभ सक्षम किया गया है।
रेमुस रुसानु

3
आदर्श रहते हुए @Remus, क्या आप कह रहे हैं कि आपने अपने करियर में हर डेटाबेस को पूरी तरह से पूर्व-आकार दिया है? हमेशा कुछ अनुमान-कार्य शामिल होने और समायोजन किए जाने वाले हैं। मैं इस बात से सहमत हूं कि विकास को नियंत्रित किया जाना चाहिए और ऐसा दिन में केवल 7 बार करने के लिए नहीं छोड़ा जाना चाहिए।
हारून बर्ट्रेंड

3
@AaronBertrand: मैं सरलीकृत, अतिशयोक्तिपूर्ण सलाह देता हूं । समय में मैंने सीखा कि यह बेहतर है। अधिकांश उपयोगकर्ता 'यह निर्भर करता है' को संभाल नहीं सकते हैं और जो ऐसा करते हैं वे अपने आप यह पता लगा सकते हैं कि काले और सफेद के बीच में भूरे रंग के शेड हैं ...
रेमुस रुसानु

3
@DanAndrews: ओवर-आवंटन से 'डाउनस्ट्रीम' पर प्रभाव पड़ सकता है। एक देव को अपनी मशीन पर केवल डीबी को पुनर्स्थापित करने की कोशिश करने के बारे में सोचें, यह पता लगाने के लिए 1 जीबी डेटा के लिए दो नए 1 टीबी ड्राइव की आवश्यकता है ...
रेमस रुसानु

2
मैं केवल शैतान के वकील की भूमिका निभा रहा हूं। हालांकि, एचडी सस्ते हैं। पुनर्निर्माण और प्रदर्शन के नुकसान के लिए उत्पादन में खोया समय महंगा है।
दान एंड्रयूज

जवाबों:


24

आपको ऑटो-ग्रोथ को यथासंभव कम लक्ष्य बनाना चाहिए। एक दिन में सात बार कष्टप्रद है, यहां तक ​​कि त्वरित फ़ाइल आरंभीकरण के साथ।

एक हटना डेटाबेस मत करो। कभी। श्रिंकफाइल, शायद, लेकिन केवल एक असाधारण घटना के बाद। इसे फिर से बढ़ने के लिए सिकोड़ना व्यर्थता में एक व्यायाम है और इसे वास्तव में ऑटो-टुकड़ा कहा जाना चाहिए।

यदि पुनर्प्राप्ति मॉडल सरल है, तो पृथ्वी पर कोई रास्ता नहीं है, आपको अपनी लॉग फ़ाइल को 250 जीबी तक बढ़ाना चाहिए। फ़ाइल में उपयोग किया गया स्थान समय के साथ अपने आप साफ हो जाएगा, जब तक कि आपने एक महीने पहले लेन-देन शुरू नहीं किया था और इसका कभी कोई इरादा नहीं था या इसे वापस लाने का कोई इरादा नहीं था।

तो मेरी सलाह होगी:

एक शांत अवधि के दौरान मैन्युअल रूप से डेटा फ़ाइल को ऑटो-ग्रो करें जो कई महीनों के विकास को समायोजित करेगा। इस बीच आप इसे किस लिए बचा रहे हैं?

डेटा फ़ाइल के लिए ऑटो-वृद्धि वृद्धि को कुछ हद तक छोटा करें (ताकि ऐसा होने पर उपयोगकर्ताओं को बाधित न करें), और इस घटना पर सतर्क रहें (आप इसे डिफ़ॉल्ट ट्रेस में पकड़ सकते हैं, उदाहरण के लिए, या विस्तारित के माध्यम से। आयोजन)। यह आपको बता सकता है कि आप जिस उच्च बिंदु पर अनुमान लगा रहे हैं, उसे मार रहे हैं और यह फिर से मैन्युअल रूप से बढ़ने का समय है। इस बिंदु पर आप इस मैनुअल को उस स्थिति में रखना चाहेंगे जब आप अंतरिक्ष को समायोजित करने के लिए एक अलग ड्राइव पर एक नई फ़ाइल / फ़ाइलग्रुप जोड़ना चाहते हैं, क्योंकि आखिरकार आप वर्तमान ड्राइव को भर देंगे।

लॉग फ़ाइल को ऑटो-ग्रो करें, दो बार, सबसे बड़ा कभी भी। यह तब तक ऑटो-ग्रोथ नहीं करना चाहिए जब तक कि कुछ असामान्य लेनदेन न हों। आपको इस घटना के लिए भी निगरानी करनी चाहिए, ताकि आप उनके बारे में जान सकें।


इनपुट के लिए धन्यवाद ... मैं लॉग फ़ाइल को बढ़ाने के लिए आपकी सलाह पर विचार करूंगा और इसे थोड़ी देर के लिए मॉनिटर करूंगा। मैंने ऑटो के आकार में एमबी के लिए जीबी का गलत इस्तेमाल किया। मैं सहमत हूं और यह नहीं सोचता कि श्रिंक डेटाबेस वह कर रहा है जो वह करने का इरादा था। वर्ष के अंत में DB 15GB तक पहुंच जाता है, जिस समय नौकरी का सृजन हुआ था हम बैकअप के लिए कमरे से बाहर चल रहे थे।

+1 को स्वतः-खंड कहा जाना चाहिए :-) क्या आपने पहले से ही इसके लिए कनेक्ट मुद्दा लॉन्च किया है? :-)
marc_s

10

ऑटो विकास एक ऐसी चीज है जिसे आपको संभव हो तो बचने की कोशिश करनी चाहिए। मुद्दा यह है कि जब विकास हो सकता है तो आपका कोई नियंत्रण नहीं है और ऐसा करते समय आपका सिस्टम गंभीर रूप ले सकता है।

एक या दो महीने के लिए अपनी फ़ाइल का आकार समझदार सेट करें और अपनी विकास दर पर नज़र रखें कि आप एक्स राशि के लिए कितनी जगह का अनुमान लगाते हैं और अपने आकार को उस त्रुटि के मार्जिन पर सेट करते हैं।

मैंने एक साधारण मॉनिटरिंग जॉब सेट किया है, जो ऑटो के बढ़ने से पहले फ़ाइल का आकार पूर्वनिर्धारित अधिकतम हिट होने पर मुझे सचेत करेगा। आप कुछ इस तरह का उपयोग कर सकते हैं:

SELECT instance_name,
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
       into ##Logsize
FROM
(
   SELECT *
   FROM sys.dm_os_performance_counters
   WHERE counter_name IN
   (
       'Data File(s) Size (KB)',
       'Log File(s) Size (KB)',
       'Log File(s) Used Size (KB)',
       'Percent Log Used'
   )
     AND instance_name = 'database your interested in' 
) AS Src
PIVOT
(
   MAX(cntr_value)
   FOR counter_name IN
   (
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
   )
) AS pvt 
go
declare @logsize int
Select @logsize = [Percent Log Used] from ##Logsize

If @logsize > the maximum percent you want the log to fill too i.e 90
    BEGIN
        --Do your thing here
    END

Drop table ##Logsize

यह निश्चित रूप से नौकरी के रूप में निर्धारित किया जा सकता है।


मैं "आपकी रुचि के डेटाबेस" और उदाहरण_ 'को हटा देता हूं "इसलिए यह सभी डेटाबेस को लौटाता है। फिर एक गणना का उपयोग करें जहां लॉग आकार आईएफ स्टेटमेंट में एक सीमा से ऊपर है। यदि गिनती 1 से अधिक है, तो मैं सीमा के ऊपर लॉग के नामों को ईमेल करने के लिए अस्थायी तालिका से एक चयनित नाम विवरण के साथ एक sp_send_dbmail करता हूं।
निक विंस्टनले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.