2008-09-05 11 views
6

मेरे पास ms sql डेटाबेस हैं जो बहुत बड़े होते हैं। परीक्षा में मुझे लगता है कि कुछ तालिकाओं में अप्रयुक्त स्थान का एक गुच्छा है। मैं कई भौतिक हटाना नहीं करता, इसलिए मुझे नहीं लगता कि यह सिर्फ हटाए गए रिकॉर्ड हैं। डीबीसीसी श्रिंक फ़ाइल को छोटा नहीं बनाता है। लेकिन, यदि मैं तालिका को एक नए, खाली डेटाबेस में डंप करता हूं, तो आकार लगभग 80% नीचे चला जाता है। वर्तमान डेटाबेस में इस तालिका में 7 जीबी के बजाय, मैं ताजा डेटाबेस में लगभग 1.5 जीबी के साथ समाप्त होता हूं। ऐसा लगता है कि एसक्यूएल सर्वर बहुत अधिक स्मृति आवंटित कर रहा है। किसी को इससे पहले सामना करना पड़ा? मैं पूरी तरह से नया डेटाबेस बनाने के बिना अप्रयुक्त आवंटित स्थान को हटाकर तालिका को छोटा करने में सक्षम होना चाहता हूं।SQL सर्वर अप्रयुक्त, लेकिन आवंटित तालिका स्थान

अतिरिक्त जानकारी:

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

+0

पूर्ण वसूली मॉडल का उपयोग करने में बिल्कुल कोई अंक नहीं है, यदि आप एलडीएफ के लिए कर रहे हैं तो आप उन्हें छेड़छाड़ कर रहे हैं! उन्हें कम करने का सही तरीका लॉग फ़ाइलों का बैकअप लेना है, उस समय वे स्वचालित रूप से कम हो जाएंगे। कोई भी जो लॉग चेन और उचित बैकअप रणनीति को समझता है, उसे कदम उठाने और इसे सही करने में आपकी सहायता करने के लिए बेहद जरूरी है। कुछ भी आपको कम ** ** डेटा खोने के गंभीर जोखिम पर डालता है। – ErikE

+0

क्या यह प्रासंगिक है? केबी आलेख 924027 - [SQL सर्वर कुछ तालिकाओं के लिए अप्रयुक्त स्थान को काफी बढ़ाता है] (http://support.microsoft।com/kb/924947) –

+0

इस नॉलेज बेस आलेख पर नज़र डालें और देखें कि यह लागू होता है: http://support.microsoft.com/kb/913399 –

उत्तर

0

विकल्पों में, आप निर्दिष्ट कर सकते हैं कि आप कितना बढ़ना चाहते हैं। डिफ़ॉल्ट रूप से मेरा मानना ​​है कि यह 10% है, इसलिए 200 एमबी डेटाबेस दिया गया है, जब आप अपना अंतिम पृष्ठ भरते हैं, तो यह 20 एमबी पेज स्पेस आवंटित करेगा। 7 जीबी पर यह 700 एमबी आवंटित करेगा।

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

नोट: मेरा जवाब यह नहीं है कि इसे कैसे ठीक किया जाए, लेकिन शायद यह कैसे रोकें/समझाएं कि आप इन सभी आवंटित स्थान को क्यों देख सकते हैं।

2

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

+0

सहमत हैं, बैकअप लेनदेन लॉग के साथ-साथ डेटाबेस बैकअप को कभी भी न भूलें। जब तक यह आपकी पूरी हार्ड ड्राइव खाएगा तब तक लॉग बढ़ेगा। – HLGEM

1

मैं कई शारीरिक नहीं करते हटाता

क्या तालिका के अपडेट के बारे में, विखंडन स्तर क्या है। डीबीसीसी SHOWCONTIG चलाएं, फिर सूचकांक का पुनर्निर्माण करें यदि यह अत्यधिक खंडित है। उसके बाद TRUNCATE_ONLY एक बैकअप LOG एक हटना आदेश

0

यह पिछले

USE [DBNAME] 
GO 

DBCC SHRINKFILE (N'FILENAME' , 0, TRUNCATEONLY) 

GO 
0

मैं एक बार एक ऐसी ही समस्या थी में मेरे लिए काम किया है, जिसके बाद क्या करना है और मुझे विश्वास है कि मुझे लगता है कि अनुक्रमणः/सिकुड़ 'didn पाया यदि किसी दिए गए तालिका पर क्लस्टर्ड इंडेक्स नहीं था तो सभी अप्रयुक्त स्थान को पुनः प्राप्त करें।

0

यह संभव है कि तालिका इंडेक्स के लिए पैडिंग के साथ बनाई गई थी। पृष्ठ स्प्लिट को रोकने के लिए लोगों को एक गद्देदार सूचकांक बनाने का कारण है।

SQL प्रबंधक में तालिका पर राइट क्लिक करें और SCRIPT तालिका का चयन करें। फिर देखें कि PAD_INDEX=OFF है या नहीं। यदि PAD_INDEX उपयोग में है, तो शायद यह है कि तालिका स्थान ले रही है।

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