"DbccFilesCompact" की स्थिति "निलंबित" क्यों है?


11

मैं एक 600G डेटा फ़ाइल पर SHRINK फ़ाइल चला रहा हूँ।

वर्तमान में, स्थिति को "निलंबित" और आदेश रिपोर्टों के sys.dm_exec_requests.percent_completeलिए DbccFilesCompactरिपोर्ट किया जाता है कि यह चल रहा है (लेकिन बहुत धीरे-धीरे)

क्या यह जांचने का एक तरीका है कि इसे निलंबित क्यों किया जा रहा है और इसे कैसे सुचारू रूप से चलाया जाए?


FYI करें - स्थिति की जाँच के लिए SQL क्वेरी

select T.text, R.Status, R.Command, DatabaseName = db_name(R.database_id)
       , R.cpu_time, R.total_elapsed_time, R.percent_complete
from   sys.dm_exec_requests R
       cross apply sys.dm_exec_sql_text(R.sql_handle) T
order by Command

जवाबों:


10

नहीं, आप जांच नहीं कर सकते कि यह धीरे-धीरे क्यों चल रहा है, लेकिन मैं आपको कुछ संकेत दे सकता हूं:

1) SQL 2005 में, गैर-संकुलित सूचकांक का प्रबंधन संग्रहण इंजन (मेरी टीम) से क्वेरी प्रोसेसर में बदल गया। इसके कई साइड-इफेक्ट्स हैं, जिनमें से एक गति है जिसके साथ ढेर डेटा पृष्ठ सिकुड़ कर स्थानांतरित किए जा सकते हैं। सभी गैर-अनुक्रमित अनुक्रमणिका रिकॉर्ड में डेटा रिकॉर्ड के लिए एक बैकलिंक होता है जिसे वे अनुक्रमित कर रहे हैं - ढेर के मामले में, यह एक विशिष्ट डेटा पृष्ठ पर रिकॉर्ड संख्या के लिए एक भौतिक लिंक है। जब एक ढेर डेटा पृष्ठ सिकुड़ कर चला जाता है, तो उस पृष्ठ पर रिकॉर्ड करने वाले सभी गैर-अनुक्रमित सूचकांक रिकॉर्ड को पृष्ठ के नए स्थान के साथ अपडेट किया जाना चाहिए। 2000 में यह स्टोरेज इंजन द्वारा ही बहुत कुशलता से किया गया था। 2005 में, यह गैर-अनुक्रमित सूचकांक रिकॉर्ड को अपडेट करने के लिए क्वेरी प्रोसेसर को कॉल करके किया जाना चाहिए। यह कभी-कभी 2000 की तुलना में 100 गुना धीमा होता है।

2) ऑफ-पंक्ति LOB मान (या तो वास्तविक LOB डेटा-प्रकार या पंक्ति-ओवरफ़्लो डेटा) वे जिस डेटा या अनुक्रमणिका रिकॉर्ड का हिस्सा नहीं होते हैं, उसका एक बैकलिंक नहीं होता है। जब LOB रिकॉर्ड्स का एक पेज ले जाया जाता है, तो पूरी तालिका या इंडेक्स का हिस्सा उन्हें स्कैन करने के लिए स्कैन करना चाहिए कि कौन सा डेटा / इंडेक्स रिकॉर्ड उन्हें इंगित करता है, इसलिए उन्हें नए स्थान के साथ अपडेट किया जा सकता है। यह भी बहुत, बहुत धीमी है।

3) डेटाबेस का उपयोग करने वाली एक और प्रक्रिया हो सकती है जो सिकुड़ते हुए ताले को प्रतीक्षा करने के लिए अवरुद्ध कर रही है जिससे इसे पृष्ठों को स्थानांतरित करने की आवश्यकता होती है।

4) आपके पास स्नैपशॉट अलगाव सक्षम हो सकता है, और जब तक कि उन पुराने संस्करणों की आवश्यकता वाले लेन-देन पूरे नहीं हो जाते, तब तक संस्करण स्टोर लिंक के साथ पेज को स्थानांतरित नहीं कर सकते।

5) आपके I / O सबसिस्टम को कम किया जा सकता है। कम एकल अंकों से अधिक एक डिस्क कतार लंबाई का मतलब है कि मैं / हे सबसिस्टम अड़चन में है।

किसी भी या इन सभी को धीमी गति से चलने वाले समय में सिकुड़ने में योगदान दिया जा सकता है।

हालांकि सामान्य तौर पर, आप सिकुड़ना नहीं चाहते हैं। विवरण के लिए इस ब्लॉग पोस्ट को देखें: आपको अपनी डेटा फ़ाइलों को क्यों नहीं सिकोड़ना चाहिए

उम्मीद है की यह मदद करेगा!


1
@ पाओल रैंडल: मैं आपकी टिप्पणी और लिंक की सराहना करता हूं कि क्यों हटना चाहिए जब तक कि आवश्यक न हो। मैं सिफारिश (अलग फाइलग्रुप में फ़ाइलों को ले जाना) की कोशिश करूँगा और देखूंगा कि यह कैसे निकलता है।
नृत्य 2

8

आप प्रतिशत पूरा करने के लिए इस स्क्रिप्ट को चला सकते हैं!

SELECT 
    percent_complete, 
    start_time, 
    status, 
    command, 
    estimated_completion_time, 
    cpu_time, 
    total_elapsed_time
    --,*
FROM 
    sys.dm_exec_requests
WHERE
    command = 'DbccFilesCompact'

2

मैं SQL Server 2008 SP1 में एक डेटाबेस को सिकोड़ रहा हूं और एक तरह से मैं बता सकता हूं कि श्रिंक कमांड की प्रगति sp_lock spid को निष्पादित करके है और अधिकांश भाग के लिए मैं देख सकता हूं कि यह फ़ाइल 1 पर लॉक लगाता है, फिर जब यह किया जाता है फ़ाइल आईडी 2 पर लॉक, और इसी तरह से मैं बता सकता हूं कि यह अंतिम फ़ाइल आईडी पर कब काम कर रहा है और यह मेरा संकेत है जो लगभग पूरा हो गया है।

धन्यवाद,

एलेक्स एगुइलर


आपका Db कितना बड़ा है?
जॉन ज़ब्रोस्की

0

मुझे पता चला कि क्या समस्या थी (मेरे मामले में) और मैं यहां उस समाधान की पेशकश करता हूं जिसका मैंने उपयोग किया था।

मेरे पास डेटाबेस का उपयोग करने के लिए कुछ भी नहीं था, और मास्टर मेरे सत्र पर डिफ़ॉल्ट डेटाबेस था, मैंने सत्यापित किया है कि sp_who2 का उपयोग करना। फिर मैंने डेटाबेस पर राइट क्लिक किया, "कार्य" और फिर "सिकुड़" और "ओके" संवाद का चयन करें। Sp_who2 के साथ फिर से बदल रहा है, स्थिति कई मिनटों तक "निलंबित" है और उसके बाद निरस्त becouse "कोई विशेष लॉक प्राप्त नहीं किया जा सकता है"। अपने आप को लगता है, लेकिन मुझे यकीन है कि संवाद ही वह है जो इसका कारण बनता है।

इसलिए मैंने कमांड लाइन का उपयोग करके जाने का फैसला किया:

DBCC SHRINKDATABASE (myDataBase)

(डायन हर जगह प्रलेखित है), फिर सिकुड़न में बस कुछ सेकंड लगे।


1
DBCC SHRINKDATABASEबचना चाहिए क्योंकि यह डेटाबेस के लिए सभी फ़ाइलों को सिकोड़ देगा - कोई भी डेटा फ़ाइलें और कोई लॉग फ़ाइल।
ज़ैक फ़रागेर

माना। हम केवल देव वातावरण में इसका उपयोग करते हैं। AWS में डिस्क स्थान को बचाने के लिए आसान जहां डिस्क की पैमाइश की गई है।
जॉन ज़ब्रोस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.