SQL查询在DBCC DBReindex或Alter Index之后运行缓慢或卡住

时间:2010-02-09 18:21:32

标签: tsql optimization jdbc

所有

SQL 2005 sp3,数据库大小约为70gb。有一段时间,当我在所有表中重新索引所有索引时,前端似乎冻结或运行得非常慢。这些是来自前端的查询,而不是来自sql server的存储过程。前端使用JTDS JDBC连接来访问SQL Server。如果我们停止并重新启动发送查询的Web服务,问题似乎就会消失。据我所知,我们有一个连接池,我们重新使用连接,每次都不建立新的连接。

每次重新索引时都不会发生此问题。我已尝试使用dbcc dbreindex和alter index online = on并在tempdb = on中进行排序。

任何有关此问题为何偶尔发生以及如何防止此问题的见解都会非常有用。

提前致谢,

Gary Abbott

1 个答案:

答案 0 :(得分:1)

下次发生这种情况时,请查看sys.dm_exec_requests以查看阻止客户端请求的内容。 blocking_session_id将指示谁阻塞,wait_type和wait_resource将指示阻塞的内容。您也可以使用Activity Monitor来达到同样的效果。

在预先增长的数据库上,在线索引重建不会阻止正常活动9select / insert / update / delete)。由于联机索引重建,服务器上的负载可能会增加,这可能会导致整体响应速度变慢,但不应导致阻塞。

如果数据库没有预先增长,那么索引重建的额外分配将触发数据库增长事件,如果默认为10%增量并且未启用instant file initialisation,则可能会非常慢。在数据库增长事件期间,所有活动都在该数据库中冻结,即使索引是在线重建,这也可能是您的问题。同样,Activity Monitor和sys.dm_exec_requests都会清楚地表明这种情况正在发生。