Sql server SQL server 2014:同一虚拟机的不同性能(大量执行)
我有两个相同的VM(16个vCPU,RAM:64GB),具有相同的数据库、相同的表和视图以及相同的行数。View1有4.7米的线条 在VM1(UAT)上,aSql server SQL server 2014:同一虚拟机的不同性能(大量执行),sql-server,performance,sql-server-2014,Sql Server,Performance,Sql Server 2014,我有两个相同的VM(16个vCPU,RAM:64GB),具有相同的数据库、相同的表和视图以及相同的行数。View1有4.7米的线条 在VM1(UAT)上,a选择前1000名。。从视图1在不到1秒的时间内回答问题 在VM2(PROD)上,相同的查询在4分钟内回答 我检查了数据库、表、视图1的属性,并没有发现VM1和VM2之间有任何区别。 我检查了统计数据,但它显示没有什么需要重新刷新的 VM2上的执行计划显示: 估计处决人数:1 000 处决人数:420万 在VM1上: 估计处决人数:1 0
选择前1000名。。从视图1
在不到1秒的时间内回答问题
在VM2(PROD)上,相同的查询在4分钟内回答
我检查了数据库、表、视图1的属性,并没有发现VM1和VM2之间有任何区别。
我检查了统计数据,但它显示没有什么需要重新刷新的
VM2上的执行计划显示:
- 估计处决人数:1 000
- 处决人数:420万
- 估计处决人数:1 000
- 处决人数:900
提前感谢您帮助我理解这个“谜团”。尽管它是两个不同的虚拟机,具有相同的配置,但它有很多不同之处:
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;
update statistics yourtablename
UAT和PROD的结果
按照以下百分比进行索引重建或重新组织:
平均碎片百分比值修正语句
5%和<=30%改变索引重组
30%更改索引重建(联机=打开)*
关于第4点:
您可以运行以下脚本:
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;
update statistics yourtablename
这将更新您的统计数据。之后,您可以使用
dbcc show_statistics(yourtablename, yourindexname)
它在两台服务器中分布均匀,使得查询优化器能够选择最佳计划
考虑到两个执行计划相似。如果您发布两个执行计划,我们可以找到确切的差异。您可以添加完整的执行计划吗?完成!希望能有所帮助:)更新了第3点和第4点的详细信息。您好,我已经更新了统计数据,并且有相同的性能问题。Kannan的回答非常好。我看不懂法语,但我猜它是在扫描而不是在表上搜索,所以我会在有问题的表上重建索引(这有更新统计数据的良好副作用)。在您的计划中,“Dataxyz_GeoLoc_Input”表只扫描UAT中的1000条记录,而它会扫描4665284的同一个表。该表在这两种环境中实际有多少条记录?还有为什么它会进行表扫描,如果您有聚集索引或非聚集索引,它会进行索引扫描,这可能会更快。。。此外,我没有看到任何过滤器应用于这两个计划。。。