尽管这是两个具有相同配置的不同虚拟机,但它还是有很多差异:
- 您检查过两台服务器的 IOPS 数量吗?
从 View1 选择前 1000 个...期间为 10 MB/s
- 尽管两者的 RAM 相同,但分配给 SQL Server 的有多少?
两个虚拟机上为“SQL Server 2014”分配了 60GB/64GB
- 数据加载模式:数据加载如何发生以及索引如何重建/重新组织?其时间表是怎样的?
没有 DBA“在场”,我希望他下周能回来
- 统计信息更新:即使您重建了索引,两个服务器中的统计信息是否都是最新的?
请问,如何强制更新统计数据?在两个虚拟机上,上次更新是
1.5个月前!但它说统计数据是最新的......
- 网络测试如何进行?如果您从远程计算机查询是否存在连接问题?
测试是通过“终端服务器”在 VM1 和 VM2 上使用“SQL
Server Management Studio”。在此期间网络活动非常低
在VM2上测试
- 在您不知情的情况下,同一张表上有任何额外的触发器、约束吗?
理论上不会,但是……也许吧。我会和 DBA 一起看看他什么时候会
后退。
第 3 点和第 4 点对于估计和实际处决数量及其差异至关重要。
有关 View1 的附加信息:它使用 2 个表 - view0:470 万行,无
性能问题(选择前 1000 个
在VM2上测试View1时,1个CPU的使用率为100%。
有没有一个工具可以快速比较两个数据库及其参数
组件(表、视图、索引...)?
感谢您的帮助 ! :)
对于第 3 点:您可以执行以下脚本:
SELECT a.index_id, name, avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(N'YourDatabase'), OBJECT_ID(N'YourTable'), NULL, NULL, NULL) AS a
JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id;
UAT 和 PROD 的结果
结果 UAT 和 PROD https://i.stack.imgur.com/wDUct.png
按照以下百分比重建或重组索引:
avg_fragmentation_in_percent 值 更正说明
5% 和
https://msdn.microsoft.com/en-us/library/ms189858.aspx https://msdn.microsoft.com/en-us/library/ms189858.aspx
对于第 4 点:
您可以运行以下脚本:
update statistics yourtablename
这将更新您的统计数据。之后,您可以使用以下命令检查统计直方图
dbcc show_statistics(yourtablename, yourindexname)
它在两台服务器中均匀分布,这使得查询优化器能够选择最佳计划。
考虑到两个执行计划是相似的。如果您发布两个执行计划,我们可以找到确切的差异。