我目前正在查看我们的一个SQL 2008数据库上的问题,它一直出现锁定状态。它会运行好几个小时,然后突然我们使用该数据库的所有应用程序将停止工作。它已经发生了大约2周,之前没有问题。在那段时间里没有什么变化,当然没有什么可以导致这个问题。
我已经运行了SQL Profiler来试图弄清楚发生了什么。它显示了全天每秒运行的数百个查询完全没有问题,然后突然间有10分钟的差距,只有少数查询运行。环顾这段时间,我发现一个已经运行了一个多小时的插入查询。当所有事情都冻结时,相同的查询(但不同的数据)已被视为在数个时候锁定数据库。
通常我们要做的就是重新启动sql server服务,显然可以摆脱任何锁定并杀死任何查询,一切都会重新开始。然而,它会再次停止,有时会在一小时内停止,其他时间会在几小时后停止。
这是一个简单的插入,基本上只是说“插入表格(x,y,z)从源表格中选择x,y,x”。当我运行花费一个小时的语句的选择部分时,它没有时间运行(字面意思是00:00:00),所以我不太明白发生了什么。
我们确实得到了一些错误,说其中一个表可能已损坏(但不是插入语句的目标或来源)。我们在该表上运行了DBCC命令,但它没有报告任何错误。
我将查看正在运行该语句的.net应用程序,看看是否有任何导致它的内容,但它不太可能并且想知道是否有人之前已经看过这样的事情并知道可能会发生什么是原因?
提前致谢。
答案 0 :(得分:4)
如果您提出正确的问题,服务器会告诉您它为什么会等待。查看sys.dm_exec_requests和sys.dm_os_waiting_tasks,查看挂起的session_id,看看它在等待什么。这可能会让你深入了解正在发生的事情。