我们的数据库有一个 SQL Server 2008R2 企业版来支持前端应用程序。我们以前从未遇到过任何超时问题。最近,该公司决定将数据库升级到 SQL Server 2014 企业版,其中 2 个节点始终在集群设置上。新服务器比旧服务器有更好的 CPU 和内存。
升级后我做了所有必要的修改,检查数据库一致性,运行 DBCC UPDATEUSAGE,更新统计信息,重建索引,重新编译存储过程等等。数据库切换和迁移一切顺利。但是,我们的用户开始抱怨超时问题。
我一直在查看不同的文章、博客文章并进行了一些修改,例如更改连接字符串并添加 MultiSubnetFailover = 'True',这似乎有很大帮助并最大限度地减少了超时频率,但问题仍然存在。有谁知道什么会导致这个问题以及如何解决它?我非常感谢您提出解决此问题的建议和建议。
基数估计逻辑已针对 SQL Server 2014 进行了更新,这可能是一个原因。您必须使用旧的基数估计器测试相同的查询并比较性能指标。您可以通过将兼容性级别降低到 <120 来做到这一点。
我会在测试服务器上而不是在生产环境中执行所有这些测试。
https://msdn.microsoft.com/en-us/library/dn600374(v=sql.120).aspx https://www.brentozar.com/archive/2014/04/sql-2014-cardinality-estimator-吃坏tsql早餐/
我终于找出了问题所在。经过几天的努力,我检查了 SQL Server 报告,发现临时 db 数据库出现了非常大的自动增长情况。问题的原因是,在将数据库迁移到我们的新服务器后,系统数据库文件大小未配置,并且 tempdb 有办法使文件大小小于应有的大小。
看起来每当在 tempdb 上发生自动增长操作时,查询都会被迫回滚并导致问题。我只是更改文件大小以及文件增长大小。现在它就像一个魅力,从那时起就没有问题了。