2009-12-11 22 views
9

Tôi có máy chủ SQL 2005 x64 và khi tôi cố gắng đưa ra một số truy vấn (ví dụ: khi tôi cố gắng tạo chỉ mục), SPID của tôi chuyển sang trạng thái "ngủ" ngay lập tức và dường như đợi ở đó vô thời hạn. Nó không bị chặn (cột "BLKBY" trong SP_WHO2 trống), và các giá trị CPU và DiskIO là rất nhỏ (dưới 300 mỗi), và không phát triển.SQL Server - Tại sao SPID của tôi bị "SUSPENDED" nhưng không bị chặn, trong khi tạo chỉ mục?

Truy vấn của tôi có thể đang chờ đợi điều gì? Nếu tôi làm một SELECT * khỏi bảng tôi lập chỉ mục, tôi nhận được tất cả triệu hàng trong vòng một phút hoặc lâu hơn, do đó, nó không bị chặn truy cập bảng, hoặc thậm chí (có vẻ như) tranh chấp bàn.

Bất kỳ suy nghĩ nào về những thứ khác mà tôi có thể kiểm tra? Tôi chỉ cần cung cấp cho và khởi động lại trường hợp SQL của tôi? :)

CHI TIẾT: Tôi đang chạy CREATE INDEX từ tab khác trong SSMS và không bao giờ trả lại - nó chỉ hiển thị "Thực thi" và không bao giờ trả về, vì vậy tôi không nghĩ rằng quá trình đã bị hủy.

Trả lời

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>; 

Điều này sẽ không chỉ hiển thị trạng thái yêu cầu mà còn hiển thị tất cả các tác vụ được yêu cầu. Một CREATE INDEX trực tuyến có thể sinh ra các luồng song song và sẽ tự treo cho đến khi chúng kết thúc.

+0

câu trả lời xuất sắc. Chỉ cần những gì tôi đang tìm kiếm. http://blog.sqlauthority.com/2009/01/07/sql-server-find-currently-running-query-t-sql/ đưa tôi đi, và điều này cho tôi thấy chính xác vấn đề ở đâu. –

+0

Cảm ơn bạn đã cứu thịt xông khói của tôi! –

+0

Và nếu chỉ hàng được trả lại và trạng thái của nó bị "treo"? – Nuzzolilo

-1

Lệnh được hoàn thành và kết nối đang chờ lệnh tiếp theo.

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

Từ URL: "Vấn đề này là như cũ như SQL Server Trong thực tế, nó đi lại cho ngày Sybase nhưng vẫn tiếp tục đánh lừa và quản trị câu đố

Một phiên có trạng thái đó.. của lệnh sleep/awaiting chỉ đơn giản là một kết nối máy khách mà không có truy vấn hoạt động nào đến SQL Server. Bảng dưới đây cho thấy các chuyển tiếp từ trạng thái ngủ sang một phiên. "

+0

Nhưng tôi chạy lệnh từ SSMS, và phiên tôi vẫn cho thấy "Thực hiện" - nó dường như không được thực hiện ở tất cả, và nó đã đi đến "Đình chỉ" cách quá nhanh để có thực sự hoàn thành. Thú vị liên kết, mặc dù - Tôi đã không biết kết nối đó. – SqlRyan

1

Trạng thái 'Bị tạm ngưng' đôi khi có thể gây hiểu nhầm. Ví dụ: truy vấn của bạn có thể bị 'Tạm ngừng' trong khi chờ hoàn tất quá trình nhập/xuất đĩa. Điều này có thể được xác minh bằng cách chạy truy vấn bên dưới và kiểm tra cột wait_type. PAGEIOLATCH_EX cho biết truy vấn bị chặn do chờ I/O đĩa. Điều này không có nghĩa là truy vấn không tiến triển.

Xem this page để biết thêm thông tin về PAGEIOLATCH_EX

Và đây là các truy vấn mà trả về thông tin nói trên

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

Cảm ơn bạn đã truy vấn. Nó thực sự hữu ích trong pin-trỏ lệnh đó là lấy thời gian CPU và IO. –

Các vấn đề liên quan