SQL Server 2014:具有相同VM的不同性能(巨大的“执行次数”)

时间:2016-11-18 15:11:35

标签: sql-server performance sql-server-2014

我有 2个相同的VM (16个vCPU,RAM:64GB),具有相同的数据库,相同的表和视图以及相同的行数。 View1有4.7M行。

在VM1(UAT)上,SELECT TOP 1000 .. FROM View1在不到1秒的时间内回答。

在VM2(PROD)上,相同的查询在4分钟内回答。

我检查了数据库,表,view1的属性,但没有发现VM1和VM2之间有任何区别。 我已经检查了统计数据,但它显示没有必要进行任何修改。

VM2上的执行计划显示:

  • 估计执行次数:1000
  • 执行次数:4.2M

在VM1上:

  • 估计执行次数:1000
  • 执行次数:900

VM2(PROD)的问题可能与VM1(UAT)完全相同?

以下是两个VM上的“SELECT TOP 1000 .. FROM View1”的执行计划:

Execution plans on both VM: UAT and PROD

他们似乎非常相似。

以下是UAT与PROD统计数据:

UATsvPROD_IO_Stats

什么可以解释两种环境之间逻辑读取(和预读读取)数量的巨大差异???

通过提前,感谢帮助我理解这个“神秘”。

1 个答案:

答案 0 :(得分:1)

尽管两个不同的VM具有相同的配置,但它有很多不同之处:

  1. 您是否检查了服务器中的IOPS数量?
  2.   

    从View1

    中选择前1000名中的10 MB / s
    1. 尽管两个RAM都分配给SQL Server的数量是多少?
    2.   

      60GB / 64GB分配给" SQL Server 2014"在两个VM上

      1. 数据加载模式:数据加载的方式以及索引的重建/重组方式?那是什么时间表?
      2.   

        没有DBA"手头",我希望他下周回来

        1. 统计信息更新:尽管您重建了索引,但服务器中的统计信息是否最新?
        2.   

          请问,如何强制统计更新?在两个VM上,最后一次更新是   1.5个月前!但它说统计数据是最新的......

          1. 网络测试如何运作?如果从远程计算机查询,是否存在连接问题?
          2.   

            测试通过"终端服务器"在VM1和VM2上完成。使用" SQL   服务器管理工​​作室"。网络活动期间非常低   测试VM2

            1. 在您不知情的情况下,在同一张桌子上有任何额外的触发器,约束?
            2.   

              理论上不是......也许。我会在他和DBA见面的时候看到他   回来。

              第3点和第4点对估计和实际执行次数及其差异至关重要。

                

              关于View1的其他信息:它使用2个表 - view0:4.7M行,没有   性能问题(选择前1000< 1 s。) - table2:3行

                   

              在VM2上测试View1期间,使用100%的1个CPU。

                   

              是否有工具来比较2个数据库及其数据库的quiclky参数   组件(表,视图,索引......)?

                   

              感谢您的帮助! :)

              对于第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

              Results UAT & PROD

              按以下百分比重建或重组索引:

              avg_fragmentation_in_percent value纠正声明

                

              5%且< = 30%ALTER INDEX REORGANIZE   30%ALTER INDEX REBUILD(ONLINE = ON)*

              https://msdn.microsoft.com/en-us/library/ms189858.aspx

              第4点:

              您可以在以下脚本中运行:

              update statistics yourtablename
              

              这将更新您的统计信息。之后,您可以使用

              检查统计直方图
              dbcc show_statistics(yourtablename, yourindexname)
              

              它在两个服务器中均匀分布,使查询优化器能够选择最佳计划。

              考虑到两个执行计划都是相似的。如果您发布两个执行计划,我们可以找到确切的差异。