迁移后SQL Server性能不稳定

时间:2011-09-23 19:11:28

标签: sql-server performance sql-server-2005

我最近将一个Web应用程序迁移到另一个数据中心。这包括将数据库从SQL 2000移动到2005,这不应该是一个问题本身(我运行SQL 2000到2008 R2的同一个应用程序的其他实例)。

问题是,在迁移之后,某些操作(尤其是UPDATE)变得非常慢(在我的应用程序中定义的任何限制之后超时,我尝试了6分钟)。

我尝试在Management Studio上运行相同的查询,但结果不一致。有时它只是立即运行,但有时它需要永远,我必须取消查询。在我的应用程序上,它总是超时(经典ASP应用程序)。

它发生在多个查询上,但最常见的是一个看起来像这样的查询:

UPDATE mytable SET timestampcol = GETDATE() WHERE record_id = 12345 /* record_id is the PK */

我已经尝试过了:

  • 首先,我怀疑表大小(~2M行)。所以我删除了旧记录,只留下了大约40,000行,但问题仍然存在。
  • 然后我尝试重新创建索引,但它没有用。
  • 我也试过同时运行sp_updatestatssp_updatestats 'resample',但没有运气。

所以,我被困住了。有没有人知道可能发生的事情,我该如何解决?

更新

查看sys.dm_tran_locks,我可以看到在我的应用运行查询时有两个锁定了:

request_mode        request_type    request_session_id
S                   LOCK            65
IX                  LOCK            67

我还意识到在我尝试运行SP调用卡上的查询之前出现了S锁定。我现在正在修改SP以试图理解为什么在SP完成运行后锁仍然存在。

更新2 - Aaron Bertrand的答案问题(见评论)

  • 该程序是否使用交易? 不,整个应用程序中没有交易

  • 是否有可能未提交交易的代码路径? N / A

  • 谁在调用其他存储过程?相同的脚本正在调用它,在有问题的查询之前几行

  • 您是否在.NET中使用某种事务上下文?不,它不是.NET,它是经典的asp(我必须维护旧的遗留代码)

    < / LI>
  • 为什么app不调用存储过程?你的意思是代替直接从(ADO)connection.execute运行有问题的查询?好吧,也试过了,结果相同。

  • 为什么在SSMS中运行有问题的查询时调用其他存储过程不会影响您?我不知道!但是目前SSMS的更新运行正常,无论我是否在此之前调用sp。

伙计们,谢谢你们所有的帮助,但我即将放弃这一点。在某人决定移动服务器之前,事情才有效。问题只是落在了我的手上,我会试着将它传递给其他人。

2 个答案:

答案 0 :(得分:0)

如果没有合适的统计信息(表和索引),则sp_updatestats不提供任何内容。检查实际执行计划并查找缺少的统计信息(显式警告和实际行与估计行之间的不匹配表示统计信息可能不对)

答案 1 :(得分:0)

原来这是对桌子的锁定。我仍然不明白为什么它被锁定,但我通过将WITH(NOLOCK)提示添加到我的存储过程来解决它。