sql server 2005简单查询不再返回

时间:2009-11-30 12:08:35

标签: sql-server

我有一个包含大约15个表的数据库。其中14个工作正常。 。突然在其中一个上做“select * from table”(通常需要< 2秒才能返回,现在似乎没有回来。(我已经等了8分钟)。接下来最好的步骤是什么调试发生了什么?我注意到这一点,因为我的asp.net网站开始计时,但我直接从sql server mgmt studio得到了相同的问题。

4 个答案:

答案 0 :(得分:3)

可怕的DB可能是正确的建议它是锁,这是一个方便的脚本我一直在检查锁定特定数据库,输出锁定的对象名称,锁定类型,登录持有它以及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

答案 1 :(得分:1)

如果您无法从表中检索数据,可能是因为它被某些其他进程锁定了。假设您在SQL Server 2005或2008中运行针对动态管理视图sys.dm_exec_requests的select。您将能够看到您感兴趣的表上是否存在带锁的未完成请求。

答案 2 :(得分:0)

我会在数据库上使用SqlServerProfiler设置一个sqlTrace,然后你就可以看到查询发生了什么,以及它在哪里被卡住了。

答案 3 :(得分:0)

可以是锁,块,您的统计信息已过期

运行以下

exec sp_who2

您在BlkBy列中看到任何SPID吗?