अनुक्रमणिका के पुनर्गठन / पुनर्निर्माण की प्रगति की जाँच करें


17

जब मैं एक अनुक्रमणिका का पुनर्गठन / पुनर्निर्माण करता हूं, तो मैं प्रगति / स्थिति की जांच कैसे कर सकता हूं?


1
प्रगति से आपका मतलब यह है कि इसे जाँचने वाली सूचियों की कितनी पंक्तियाँ और कितनी शेष हैं? मुझे नहीं लगता कि आप इसे कर सकते हैं। मॉनिटर करने के लिए आपका सबसे अच्छा शर्त DMV sysinos_exec_requests का उपयोग करना है
Shanky

जवाबों:


16

यह कहना वास्तव में कठिन है कि आपका पुनर्निर्माण कितना समय लेगा, क्योंकि एसक्यूएल खुद को वास्तव में पहले से नहीं जानता है और आपको अनुमान नहीं लगा सकता है।

Dm_exec_requests dmv का उपयोग करने के लिए आप निम्नलिखित क्वेरी का उपयोग कर सकते हैं कि आपका अनुक्रमणिका पुनर्निर्माण कितने समय से चल रहा है, और यह सत्यापित करने के लिए कि SQL का वास्तव में अनुमान नहीं है:

SELECT r.session_id,r.command,CONVERT(NUMERIC(6,2),r.percent_complete)
AS [Percent Complete],CONVERT(VARCHAR(20),DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time],
CONVERT(NUMERIC(10,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours],
CONVERT(VARCHAR(1000),(SELECT SUBSTRING(text,r.statement_start_offset/2,
CASE WHEN r.statement_end_offset = -1 THEN 1000 ELSE (r.statement_end_offset-r.statement_start_offset)/2 END)
FROM sys.dm_exec_sql_text(sql_handle)))
FROM sys.dm_exec_requests r WHERE command IN ('Alter Index')

हालाँकि जब यह समय पर एक वास्तविक अनुमान की आवश्यकता होती है, तो आप sqlmunkee की इस अच्छी ब्लॉग पोस्ट को पढ़ सकते हैं , जो इसे ".. यह निर्भर करता है" कहकर सारांशित करता है।

और चूँकि हम सभी एक ही हार्डवेयर का उपयोग नहीं कर रहे हैं, एक ही सॉफ्टवेयर का उपयोग कर रहे हैं, या एक ही डेटा को देख रहे हैं, तो उत्तर देना होगा… यह निर्भर करता है

निराशा, लेकिन सच है, दुख की बात है।


2
अच्छी स्क्रिप्ट के लिए धन्यवाद, मुझे उस क्लॉज को 'DBCC' में एडजस्ट करना पड़ा, लेकिन फिर मुझे कुछ जानकारी मिली, जिसमें कहा गया कि प्रतिशत 6.42 है और ETA मिन लगभग 707 (जो एक विभाजन के लिए है)। मैं इस पर नजर रखूंगा कि यह कितनी दूर होगी। पोस्ट को भी चेक करेंगे।
nojetlag

ऑनलाइन के लिए यह काम भी करता है?
साइमन_वेवर

1
@Simon_Weaver को हां करना चाहिए।
Reaces

यह केवल REORGANIZE के लिए काम करता है। यह REBUILD के लिए काम नहीं करता है। जहां यह काम करता है, उसकी पूरी सूची के लिए कृपया निम्न URL पर "प्रतिशत_ अपूर्ण" कॉलम देखें। अनुमानित_कंपनी_टाइम कॉलम एक ही श्रेणी में आता है, लेकिन इसे "आंतरिक केवल" के रूप में प्रलेखित नहीं किया जाता है। docs.microsoft.com/en-us/sql/relational-databases/...
जेफ Moden

4

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

;WITH cte AS
(
SELECT
object_id,
index_id,
partition_number,
rows,
ROW_NUMBER() OVER(PARTITION BY object_id, index_id, partition_number ORDER BY partition_id) as rn
FROM sys.partitions
)
SELECT
   object_name(cur.object_id) as TableName,
   cur.index_id,
   cur.partition_number,
   PrecentDone =
      CASE
         WHEN pre.rows = 0 THEN 0
      ELSE
         ((cur.rows * 100.0) / pre.rows)
      END,
   pre.rows - cur.rows as MissingRows
FROM cte as cur
INNER JOIN cte as pre on (cur.object_id = pre.object_id) AND (cur.index_id = pre.index_id) AND (cur.partition_number = pre.partition_number) AND (cur.rn = pre.rn +1)
ORDER BY 4

1

मुझे स्वीकृत उत्तर अच्छे से ऊपर मिले, लेकिन एक महत्वपूर्ण बात याद आ रही है: कमांड स्टेटस (जैसे कमांड ब्लॉक किया गया है)

यह सरल चयन स्टेटस फ्रंट और सेंटर दिखाता है:

SELECT percent_complete, *
FROM sys.dm_exec_requests
WHERE session_id = <session id of alter index>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.