VM中的SQL脚本需要很长时间才能执行

时间:2012-02-15 08:50:54

标签: sql sql-server performance sql-server-2008 ssis

我有Execute SQL Script包,其中包含插入大约150K记录的脚本。

这里的问题是当我在虚拟机中执行包时,它需要25分钟左右的物理机器中的相同包装,需要2分钟

问题1?为什么花费这么多时间在VM中加载相同的数据。 问题2?如何解决这个性能问题。

物理机配置有4GB Ram和250GB HD + Windows服务器2008 R2 + SQL Server 2008 R2标准版。 虚拟机具有相同的配置

更新:问题在于VM中的SQL Server。

问题1?为什么花费那么多时间在VM中运行相同的脚本。

问题2?如何解决这个性能问题。

物理机和VM中的batabases架构都是相同的。其他数据库也是一样的。两台机器中的表都没有应用索引。数据类型相同。我说的硬盘具有相同的配置。

两台机器都没有RAID。

  

物理机具有2.67GHz RAM四核并且在虚拟机中具有   2.00GHz RAM四核

SQL PM的版本:

Microsoft SQL Server 2008 R2(RTM) - 10.50.1600.1(X64)2010年4月2日15:48:46版权所有(c)Windows NT 6.1上的Microsoft Corporation标准版(64位)(Build 7601:Service Pack 1) )

SQL PM的版本:

Microsoft SQL Server 2008 R2(RTM) - 10.50.1600.1(X64)2010年4月2日15:48:46版权所有(c)Windows NT 6.1上的Microsoft Corporation标准版(64位)(Build 7601:Service Pack 1) )(管理程序)

我执行了脚本执行计划两者都是相同的,因为计划没有区别。

供应商是HP ML350机器。

在同一台物理服务器上有近20台虚拟机,其中7台服务器处于活动状态。

3 个答案:

答案 0 :(得分:1)

这里有一篇关于为VM实现正确设置SQL配置的文章:Best Practices for SQL Server。以下是摘录,但文章包含其他提示和良好的性能测试计划:

  

存储配置问题是导致SQL性能问题的首要原因。通常会出现这些问题,因为DBA请求VI管理员的虚拟磁盘,VI管理员将VMDK放在可能满足或不满足DBA性能需求的LUN上。例如:

     
      
  1. 虚拟机的VMDK文件放置在没有足够主轴的VMFS卷上。
  2.   
  3. 许多VMDK文件放置在单个VMFS卷上,可以使用更多的磁盘轴。
  4.   
  5. 放在同一个LUN上的数据库和日志文件,你猜对了,可以使用更多的主轴。
  6.         

    对某些人来说这可能是显而易见的,但这个问题一次又一次地发生。 VI管理员应该了解一些有助于理解和避免此问题的技术项目:

         
        
    1. 根据DB文件的IO要求,确定一定数量   应该保证这个文件的主轴。这意味着它   必须将VMDK放在VMFS卷上以支持SQL Server   要求和该卷的所有其他要求。
    2.   
    3. 混合顺序活动(例如日志文件更新)和随机活动   (例如数据库访问)导致随机行为。这意味着   在虚拟前物理环境中的LUN配置   可能不足以满足整合环境。这是   在存储性能:VMFS和协议中讨论了一些内容。
    4.   
    5. 当存储不符合SQL Server的要求时,设备延迟   或者内核延迟(排队时间)会增加。阅读这些内容   存储性能分析和监控中的计数器。
    6.   

答案 1 :(得分:0)

此问题的最常见原因是缺少RAM。在一台小型4GB RAM机器上安装所有设备是你的问题。

当您尝试将这些150k行加载到内存中时(请记住,SSIS中发生的所有内容都在内存中),页面文件正在处理很多行。

虚拟机上的页面文件比物理机上的页面文件慢很多。

要解决此问题,请增加虚拟机上的RAM量。

答案 2 :(得分:0)

我有类似的问题。

两台客户机(一台物理机,一台虚拟机)使用SQLCMD执行批处理。此批处理在物理服务器上调用存储过程(因此,这不是内存问题,因为详细说明仅在服务器端)。

从物理机执行的批处理需要20分钟。从虚拟机执行的批处理需要1小时20分钟。

使用SQL分析器我注意到在执行缓慢的情况下,有一个等待类型ASYNC_NETWORK_IO。

虚拟化网络层可能未经过优化。

您是否可以运行SQL事件探查器并检查是否看到等待类型ASYNC_NETWORK_IO?