2009-11-30 77 views
1

我有一個約15表的數據庫。其中14個工作正常。 。突然做一個「select * from table」(其中通常需要< 2秒才能返回,現在似乎不會再返回(我已經等待了8分鐘),下一步調試的最佳步驟是什麼發生了什麼事?我注意到這是因爲我的asp.net網站開始超時,但我直接從sql server mgmt studio得到相同的問題。sql server 2005簡單的查詢不再返回

回答

3

可怕的數據庫可能是正確的建議它是鎖,這是一個方便的腳本,我一直在檢查鎖特定的數據庫,輸出鎖定的對象名,鎖類型,登錄持有它,什麼SQL語句正在運行到持有鎖:

SELECT L.request_session_id AS SPID, 
     DB_NAME(L.resource_database_id) AS DatabaseName, 
     O.Name AS LockedObjectName, 
     P.object_id AS LockedObjectId, 
     L.resource_type AS LockedResource, 
     L.request_mode AS LockType, 
     ST.text AS SqlStatementText,   
     ES.login_name AS LoginName, 
     ES.host_name AS HostName, 
     TST.is_user_transaction as IsUserTransaction, 
     AT.name as TransactionName, 
     CN.auth_scheme as AuthenticationMethod 
FROM sys.dm_tran_locks L 
     LEFT JOIN sys.partitions P ON P.hobt_id = L.resource_associated_entity_id 
     LEFT JOIN sys.objects O ON O.object_id = P.object_id 
     LEFT JOIN sys.dm_exec_sessions ES ON ES.session_id = L.request_session_id 
     LEFT JOIN sys.dm_tran_session_transactions TST ON ES.session_id = TST.session_id 
     LEFT JOIN sys.dm_tran_active_transactions AT ON TST.transaction_id = AT.transaction_id 
     LEFT JOIN sys.dm_exec_connections CN ON CN.session_id = ES.session_id 
     CROSS APPLY sys.dm_exec_sql_text(CN.most_recent_sql_handle) AS ST 
WHERE resource_database_id = db_id() 
ORDER BY L.request_session_id 
0

我會設置一個sqlTrace使用SqlServerProfiler,在數據庫上,然後你可以看到到底發生了什麼,查詢和它卡住的地方

+0

hmm。我似乎沒有安裝。 – leora 2009-11-30 12:34:03

1

如果你無法從表中檢索數據,那可能是因爲它被其他進程鎖定了,假設你在SQL Server 2005或2008針對動態管理視圖sys.dm_exec_requests運行select 。您可以查看是否存在您感興趣的表上有鎖的突出請求。

+0

你能澄清你的意思嗎? 。當我自己運行sys.dm_exec_requests時,我得到:過程'dm_exec_requests'的請求失敗,因爲'dm_exec_requests'是一個視圖對象。 – leora 2009-11-30 12:14:47

+0

我從sys.dm_exec_requests中運行select *,並且看到了一些記錄,但我不確定這裏要做什麼。 。 – leora 2009-11-30 12:16:50

+0

上面的鎖定腳本很好。基本上,您需要查看blocking_session_id列以查看您的查詢是否被阻止。之後有更多的細節,但它會讓你開始。 – ScaryDBA 2010-03-08 14:41:25

0

可能是要麼鎖,塊,你的統計信息已過時的

運行以下

exec sp_who2 

您是否看到BlkBy列中的任何SPID?