DBCC SHRINKFILE की प्रगति की जांच कैसे करें?


31

क्या DBCC SHRINKFILEबयान की प्रगति का पता लगाने का कोई तरीका है ?

यहाँ है कि मैं इसे कैसे चला रहा था

dbcc सिकुड़ा हुआ ('main_data', 250000)

मैं एसक्यूएल सर्वर 2005 और 2008 दोनों पर बयान से ऊपर चल रहा हूं।

[अद्यतन] यहां वह क्वेरी है जिसे मैंने प्रगति और पाठ को चलाने के लिए चलाया था।

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

जवाबों:


33

क्या आपने sysinos_exec_requests में प्रतिशत_पूर्ण की जाँच की है?


वर्तमान में यह जांचना कि उस DMV से लौटाए गए डेटा को कैसे पढ़ना है।
नृत्य 2

14

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

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

पुनश्च एक और बात की जाँच करने के लिए अगर यह एक लंबा समय ले रहा है और प्रतिशत_ पूर्ण नहीं बढ़ रहा है - अवरुद्ध करने के लिए देखें। सिकुड़ जाएगा अनंत-प्रतीक्षा ताले की जरूरत है।


4
"मैं सिकुड़न कोड का मालिक था, इसलिए मुझे पता है कि मैं किस बारे में बात कर रहा हूं।" अच्छा!
छपना

1
यह 600G डेटा फ़ाइल को सिकोड़ने के लिए हमेशा के लिए ले रहा था ... मैं इसे पढ़ूंगा और सूचकांक डीफ़्रैग का उपयोग करने पर विचार करूंगा। धन्यवाद पॉल!
नृत्य 2

1
ध्यान रखें कि मुझे यह उत्तर मिला क्योंकि मैं DBCC SHRINKFILE (MyFile, EMPTYFILE) पर प्रगति की तलाश कर रहा था ... मैं मूल ड्राइव को खाली करने और इसे छोड़ने के लिए नई ड्राइव पर फ़ाइल समूह में फ़ाइल जोड़कर ड्राइव के बीच डेटा ले जा रहा हूं।
सैम केसर

@ पाओल, मैं देख रहा हूं कि किसी फ़ाइल को लक्ष्य आकार में सिकोड़ने में थोड़ा समय लगता है, लेकिन पूरा होता है (मैं इसे फ़ाइल आकार में देख रहा हूं) -लेकिन हालांकि यह पूरी तरह से सफल होने के लिए देखा जाता है, फिर भी शिंक करने की प्रक्रिया अभी भी जारी है और हमेशा के लिए चलती है। छोटे (कुछ एमबी या बड़े (1 जीबी) मात्रा में शिंक मात्रा) के साथ। sysinos_exec_requests लगातार अंतहीन गतिविधि दिखाती है, जबकि संसाधन ताले बदलते हैं जबकि प्रतिशत_कंप्लीशन 32,8% के आसपास किसी चीज पर अटक जाता है। इस बिंदु पर मैं इस प्रक्रिया को रद्द कर सकता हूं और आधिकारिक तौर पर एक सफलता का जश्न मना सकता हूं - यह जानते हुए कि अभी भी चल रहा है ... किसी भी विचार में क्या गलत है? 2008r2
मैगियर

ब्लॉग पोस्ट का लिंक टूटा हुआ है, यह अब मान्य प्रतीत होता है: sqlskills.com/blogs/paul/…
जोनाथन गिल्बर्ट

5
SELECT 
    d.name,
    percent_complete, 
    session_id,
    start_time, 
    status, 
    command, 
    estimated_completion_time, 
    cpu_time, 
    total_elapsed_time
FROM 
    sys.dm_exec_requests E left join
    sys.databases D on e.database_id = d.database_id
WHERE
    command in ('DbccFilesCompact','DbccSpaceReclaim')

2
आपके उत्तर में आपका कोड क्या करता है, इसका विवरण शामिल करना उपयोगी हो सकता है
BE77Y

एक उत्कृष्ट क्वेरी के लिए +1, लेकिन इस तथ्य के छह साल बाद ओपी ने जो कहा है उसे दोहराने के लिए। यदि आपकी क्वेरी कुछ मामलों में उसकी तुलना में बेहतर है, तो कृपया इसका वर्णन करें, अन्यथा यह केवल व्यर्थ जगह है।

5

नीचे दी गई क्वेरी आपको इस तरह दिखाएगी: ट्रैक dbcc सिकुड़ती स्थिति

-------------------------------
--Track DBCC shrink status
-------------------------------
select
a.session_id
, command
, b.text
, percent_complete
, done_in_minutes = a.estimated_completion_time / 1000 / 60
, min_in_progress = DATEDIFF(MI, a.start_time, DATEADD(ms, a.estimated_completion_time, GETDATE() ))
, a.start_time
, estimated_completion_time = DATEADD(ms, a.estimated_completion_time, GETDATE() )
from sys.dm_exec_requests a
CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) b
where command like '%dbcc%'

3

रुचि रखने वाले किसी भी व्यक्ति के लिए अपना स्वयं का संस्करण जोड़ना, यह मिलसेकंड टाइम कॉलम को और अधिक पढ़ने योग्य मिनट और सेकंड में परिवर्तित करता है।

select 
[status],
start_time,
convert(varchar,(total_elapsed_time/(1000))/60) + 'M ' + convert(varchar,(total_elapsed_time/(1000))%60) + 'S' AS [Elapsed],
convert(varchar,(estimated_completion_time/(1000))/60) + 'M ' + convert(varchar,(estimated_completion_time/(1000))%60) + 'S' as [ETA],
command,
[sql_handle],
database_id,
connection_id,
blocking_session_id,
percent_complete
from  sys.dm_exec_requests
where estimated_completion_time > 1
order by total_elapsed_time desc

-1

या आप बस sp_who3 को चला सकते हैं।


2
इसके लिए बेहतर स्पष्टीकरण की जरूरत होगी।
स्वेन

-1

sp_whoisactive - कॉलम "प्रतिशत_ अपूर्ण" है


1
यह प्रश्न का उत्तर प्रदान नहीं करता है। एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी करने में सक्षम होंगे ; इसके बजाय, ऐसे उत्तर प्रदान करें जिन्हें पूछने वाले से स्पष्टीकरण की आवश्यकता न हो । - समीक्षा से
bjoster
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.