दो DBCC INDEXDEFRAG कमांड को एक साथ चलाना संभव है, प्रत्येक एक अलग टेबल पर?


9

मैं वर्तमान में एक स्क्रिप्ट चला रहा हूं जो एक SQL सर्वर 2005 डेटाबेस में हर टेबल पर एक समय में एक टेबल पर DBCC INDEXDEFRAG करता है। अंतरिक्ष अवरोध और अपटाइम आवश्यकताओं के कारण, INDEXDEFRAG के बजाय DBCC DBREINDEX का उपयोग करना एक विकल्प नहीं है।

मैंने देखा है कि कुछ तालिकाओं को डीफ़्रैग्मेन्ट होने में लंबा समय लगता है। उदाहरण के लिए यदि मैं "sysinos_exec_requests" डायनेमिक प्रबंधन दृश्य की जांच करता हूं, तो मैं देख सकता हूं कि वर्तमान में निम्नलिखित INDEXDEFRAG तालिका के क्लस्टर इंडेक्स पर मंथन कर रहा है जिसमें 8_61010394 का एक टेबल_आईडी है:

DBCC INDEXDEFRAG (0, 829610394, 1)

मुझे पता है कि डीफ़्रैग्मेन्टेशन प्रक्रिया पूरी होने से पहले यह एक लंबा समय होगा। इस तथ्य को छोड़कर कि वर्तमान में चल रही स्क्रिप्ट अंततः सभी तालिकाओं को डीफ़्रैग्मेन्ट करेगी, क्या वर्तमान कमांड निष्पादित करते समय किसी अन्य तालिका के क्लस्टर इंडेक्स पर किसी अन्य DBCC INDEXDEFRAG को मैन्युअल रूप से चलाने से मुझे कोई नुकसान है? यदि मैं ऐसा करता हूं तो क्या दोनों टेबल वास्तव में एक ही समय में डीफ़्रैग्मेन्ट हो जाएंगे?

जवाबों:


15

हां, आप इसे कई तालिकाओं के लिए कर सकते हैं। आप इसे एक ही टेबल पर कई इंडेक्स के लिए नहीं कर सकते हैं - मैंने इसे रोकने के लिए एक नया इंडेक्स लॉक सब-सोर्स का आविष्कार किया। ALTER INDEX में समान व्यवहार ... 2005 में मैंने इसे बदल दिया।

धन्यवाद


2
आप इसे लिखने वाले व्यक्ति से अधिक सटीक उत्तर प्राप्त नहीं कर सकते हैं! एक ही समय में कई rebuilds या reorgs करने से जुड़े IO लोड के बारे में मत भूलना, और आगे जा रहे DBCC कमांड के बजाय ALTER INDEX का उपयोग करना सुनिश्चित करें।
एंड्रयूजएन

सहमत, मुझे नहीं पता कि पॉल रैंडल से सीधे एक से अधिक इस विशेष मुद्दे पर अधिक सटीक उत्तर प्राप्त करना कैसे संभव होगा। धन्यवाद पॉल।
RelentlessMike

6

ध्यान दें कि DBCC INDEXDEFRAG & DBREINDEX को अलग कर दिया गया है और ALTER INDEX द्वारा प्रतिस्थापित किया गया है:

जरूरी

यह सुविधा Microsoft SQL सर्वर के भविष्य के संस्करण में निकाल दी जाएगी। इस सुविधा का उपयोग नए विकास कार्यों में न करें, और उन अनुप्रयोगों को संशोधित करें जो वर्तमान में इस सुविधा का जल्द से जल्द उपयोग करते हैं। इसके बजाय ALTER INDEX का प्रयोग करें। - http://msdn.microsoft.com/en-us/library/ms177571(v=SQL.90).aspx

एक साथ दो चलाने के लिए, यह आपके फ़ाइल लेआउट पर निर्भर करता है। यदि वे सभी एक ही डिस्क पर हैं, तो आप संभवतः प्रत्येक को धीमा कर देंगे क्योंकि वे I / O के लिए एक दूसरे के खिलाफ लड़ रहे होंगे। आवश्यक होने पर आप केवल REORG या REBUILD के लिए सर्वश्रेष्ठ होंगे। एक स्वचालित समाधान के लिए यहां मिशेल उफर्ड की स्क्रिप्ट देखें : http://sqlfool.com/2010/04/index-defrag-script-v4-0/


धन्यवाद एरिक। इस विशेष मामले में, डेटाबेस कई डेटा फ़ाइलों में, अलग-अलग विभाजन पर, और IBM DS8300 SAN के शीर्ष पर फैला हुआ है। इसलिए मुझे लगता है कि जब तक मैं / ओ चला जाता हूं, मैं ठीक हो जाऊंगा।
RelentlessMike
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.