我目前正在调查一个与我们的 SQL 2008 数据库有关的问题,该数据库似乎一直处于锁定状态。它可以正常运行几个小时,然后突然间我们所有使用该数据库的应用程序都将停止工作。它已经发生了大约 2 周,在此之前没有任何问题。那段时间没有太大变化,当然也没有什么会导致这个问题。
我已经运行了 SQL Profiler 来尝试弄清楚发生了什么。它显示全天每秒运行数百个查询,一点问题都没有,然后突然出现 10 分钟的间隔,只有几个查询运行。当时环顾四周,我发现一个插入查询已经运行了一个多小时。当一切都卡住时,相同的查询(但不同的数据)已经多次锁定数据库。
通常我们需要做的就是重新启动 sql server 服务,显然这会消除任何锁并终止任何查询,然后一切都会重新开始。然而,它随后再次停止,有时在一个小时内,有时在几个小时后。
这是一个简单的插入,基本上只是说“插入表 (x, y, z) 从源表中选择 x, y, x”。当我运行耗时一个小时的语句的 select 部分时,它没有时间运行(字面意思是 00:00:00),所以我不太明白发生了什么。
有一段时间我们确实遇到了一些错误,说其中一个表可能已损坏(尽管不是插入语句的目标或源)。我们对该表运行了 DBCC 命令,但它没有报告任何错误。
我将查看运行该语句的 .net 应用程序,看看是否有任何原因导致它,但不太可能,并且想知道是否有人以前见过这样的事情并且知道什么可能是原因吗?
提前致谢。
最佳答案
如果您提出正确的问题,服务器会告诉您等待的原因。查看挂起的 session_id 的 sys.dm_exec_requests 和 sys.dm_os_waiting_tasks,看看它在等待什么。这可能会让您对正在发生的事情有一些了解。
关于sql-server - 插入单行需要一个小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5430785/