जब मैं एक अनुक्रमणिका का पुनर्गठन / पुनर्निर्माण करता हूं, तो मैं प्रगति / स्थिति की जांच कैसे कर सकता हूं?
जब मैं एक अनुक्रमणिका का पुनर्गठन / पुनर्निर्माण करता हूं, तो मैं प्रगति / स्थिति की जांच कैसे कर सकता हूं?
जवाबों:
यह कहना वास्तव में कठिन है कि आपका पुनर्निर्माण कितना समय लेगा, क्योंकि एसक्यूएल खुद को वास्तव में पहले से नहीं जानता है और आपको अनुमान नहीं लगा सकता है।
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 की इस अच्छी ब्लॉग पोस्ट को पढ़ सकते हैं , जो इसे ".. यह निर्भर करता है" कहकर सारांशित करता है।
और चूँकि हम सभी एक ही हार्डवेयर का उपयोग नहीं कर रहे हैं, एक ही सॉफ्टवेयर का उपयोग कर रहे हैं, या एक ही डेटा को देख रहे हैं, तो उत्तर देना होगा… यह निर्भर करता है
निराशा, लेकिन सच है, दुख की बात है।
मैं इस ब्लॉग पोस्ट को मैजिक स्क्रिप्ट के साथ खोजने में कामयाब रहा, जो कथित रूप से कार्य करता है, इसलिए जांच नहीं कर सकता क्योंकि यह 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
मुझे स्वीकृत उत्तर अच्छे से ऊपर मिले, लेकिन एक महत्वपूर्ण बात याद आ रही है: कमांड स्टेटस (जैसे कमांड ब्लॉक किया गया है)
यह सरल चयन स्टेटस फ्रंट और सेंटर दिखाता है:
SELECT percent_complete, *
FROM sys.dm_exec_requests
WHERE session_id = <session id of alter index>