我最近开始了一份新工作,他们有一个与单独的数据库服务器通信的 Web 服务器。最近,它在运行 ASP 页面时引发了死锁错误,例如:
错误:MSSQL 2kTransaction(进程 ID 103)与另一个进程在锁定资源上发生死锁,并被选为死锁牺牲品。重新运行该事务。
当 asp 页面尝试访问 MSSQL 2k 数据库时发生上述错误。
他们认为这是服务器问题,所以请我来处理。任何帮助都将不胜感激。
答案1
通常,死锁是数据库设计问题或应用程序访问数据库资源的方式不一致造成的。通常,您可以通过更改数据库而不是基础架构来解决问题。在功能测试期间,通常不会发现死锁,但在进行性能和可扩展性测试时往往会发现死锁。
您可以使用跟踪来帮助开发团队解决这个问题,跟踪会导致更详细的信息记录到 SQL 日志中。
例如:DBCC TRACEON (3605,1205,-1) - 捕获完日志消息后,请确保将其关闭(DBCC TRACEOFF)!
接下来,使用任何 SQL 安装验证典型事项:
- 确保它处于SP4
- 具有适当的硬件设置 - raid 1 驱动器上的日志文件、raid 5 驱动器上的数据文件、raid 1 驱动器上的 tempdb 以及 raid 5 驱动器上的备份 - 我称之为任何真实服务器的最低限度。
- 已设置维护计划(备份、重建索引、完整性检查、更新统计数据)。我相信 SQL 2000 有一个用于此的维护计划向导。
最后,开始计划迁移到 SQL 2008 R2 - SQL 2000 现在已结束主流支持,并将于 2013 年退出扩展支持。