2009-12-11 23 views
9

मेरे पास एक SQL 2005 x64 सर्वर है, और जब मैं इसके खिलाफ कुछ प्रश्न जारी करने का प्रयास करता हूं (उदाहरण के लिए, जब मैं एक अनुक्रमणिका बनाने का प्रयास करता हूं), तो मेरा एसपीआईडी ​​तुरंत "सो रहा" जाता है, और अनिश्चित काल तक प्रतीक्षा करता है। इसे अवरुद्ध नहीं किया जा रहा है (SP_WHO2 में "BLKBY" कॉलम खाली है), और सीपीयू और डिस्कियो मान बहुत छोटे हैं (300 से कम प्रत्येक), और बढ़ते नहीं हैं।एसक्यूएल सर्वर - इंडेक्स बनाते समय मेरा एसपीआईडी ​​"निलंबित" क्यों नहीं होगा लेकिन अवरुद्ध क्यों होगा?

मेरी क्वेरी संभवतः प्रतीक्षा कर रही है? यदि मैं तालिका से एक SELECT * करता हूं, तो मैं अनुक्रमणित कर रहा हूं, मुझे एक लाख या उससे भी कम समय में सभी मिलियन पंक्तियां मिलती हैं, इसलिए यह टेबल एक्सेस अवरुद्ध नहीं है, या यहां तक ​​कि (ऐसा लगता है) तालिका विवाद।

अन्य चीजों पर कोई विचार जो मैं जांच सकता हूं? क्या मुझे बस अपना SQL इंस्टेंस देने और पुनरारंभ करने की आवश्यकता है? :)

विवरण: मैं एसएसएमएस में एक और टैब से CREATE INDEX चला रहा हूं, और यह कभी वापस नहीं आ रहा है - यह सिर्फ "निष्पादन" दिखाता है और कभी वापस नहीं आता है, इसलिए मुझे नहीं लगता कि प्रक्रिया को छोड़ दिया गया है।

उत्तर

19
select * 
from sys.dm_exec_requests r 
join sys.dm_os_tasks t on r.session_id = t.session_id 
where r.session_id = <spid of create index>; 

यह अनुरोध की स्थिति न केवल, लेकिन यह भी सभी कार्य अनुरोध के द्वारा पैदा की दिखाएगा। एक ऑनलाइन CREATE INDEX समानांतर धागे को जन्म दे सकता है और जब तक वे समाप्त नहीं हो जाते हैं तब तक खुद को निलंबित कर देंगे।

+0

उत्कृष्ट उत्तर। मुझे इसकी ही खोज थी। http://blog.sqlauthority.com/2009/01/07/sql-server-find-currently-running-query-t-sql/ मुझे जाने के लिए, और यह मुझे दिखाया कि समस्या वास्तव में कहां थी। –

+0

धन्यवाद बस मेरे बेकन बचाया! –

+0

और यदि केवल पंक्ति लौटा दी गई है और इसकी स्थिति "निलंबित" है? – Nuzzolilo

-1

आदेश पूरा हो गया है और कनेक्शन अगले आदेश के लिए प्रतीक्षा कर रहा है।

http://blogs.msdn.com/psssql/archive/2008/04/21/how-it-works-what-is-a-sleeping-awaiting-command-session.aspx

यूआरएल से: "यह समस्या SQL सर्वर के रूप में के रूप में पुरानी है वास्तव में, यह Sybase दिनों में वापस चला जाता है लेकिन मूर्ख और पहेली प्रशासकों के लिए जारी है

कि स्थिति के साथ एक सत्र।। नींद/प्रतीक्षा करने का आदेश बस एक क्लाइंट कनेक्शन है जिसमें SQL सर्वर के लिए कोई सक्रिय क्वेरी नहीं है। नीचे दी गई तालिका सत्रों के लिए सोने के राज्यों में चलने से संक्रमण को दिखाती है। "

+0

देता है लेकिन मैं SSMS से आदेश चल रहा हूँ, और मेरे सत्र अभी भी पता चलता "निष्पादित" - यह बिल्कुल नहीं किया जा रहा है, और यह वास्तव में पूरा होने के लिए "निलंबित" रास्ता बहुत तेजी से चला गया। दिलचस्प लिंक, हालांकि - मैं उस कनेक्शन से अनजान था। – SqlRyan

1

'निलंबित' राज्य कभी-कभी भ्रामक हो सकता है। उदाहरण के लिए, डिस्क I/O को पूरा करने के लिए प्रतीक्षा करते समय आपकी क्वेरी 'निलंबित' हो सकती है। यह नीचे दी गई क्वेरी को चलाकर सत्यापित किया जा सकता है, और wait_type कॉलम की जांच कर सकता है। PAGEIOLATCH_EX इंगित करता है कि क्वेरी I/O की प्रतीक्षा के कारण क्वेरी अवरुद्ध है। इसका मतलब यह नहीं है कि क्वेरी प्रगति नहीं कर रही है।

अधिक जानकारी के लिए this page देखें बारे में PAGEIOLATCH_EX

और यहाँ क्वेरी कि ऊपर उल्लिखित जानकारी

SELECT qs.percent_complete , 
     qs.session_id , 
     scheduler_id , 
     blocking_session_id , 
     qs.status , 
     command , 
     wait_time , 
     wait_type , 
     last_wait_type , 
     wait_resource , 
     ST.text , 
     host_name , 
     program_name 
FROM sys.dm_exec_requests qs 
     LEFT JOIN sys.dm_exec_sessions es ON (qs.session_id = es.session_id) 
     CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS ST 
+0

क्वेरी के लिए धन्यवाद। सीपीयू समय और आईओ लेने वाले कमांड को पिन-पॉइंट करने में यह वास्तव में सहायक था। –

संबंधित मुद्दे