Sql Server 2012比2005年慢?

时间:2012-06-07 06:40:26

标签: sql performance sql-server-2005 sql-server-2012

我们已部署SQL Server 2012 Enterprise,但我们遇到了性能问题:

  • 相同的数据(从我们的SQL Server 2005 Enterprise备份并在2012年恢复)
  • 3200 sql SELECT语句的测试脚本

我们使用Management Studio进行测试:

  1. 以纯文本结果
  2. 会生成一个文件
  3. 在同一台电脑上:

    1. 2005:15秒,2012:2分钟
    2. 2005:14秒,2012:30秒
    3. 即使使用功能更强大的计算机,2012年仍然比2005年慢。

      有什么不对?我们安装SQL Server 2012和默认参数的方式?我们恢复备份的方式?我们能做什么?

1 个答案:

答案 0 :(得分:1)

当我看到类似的变体时,我首先想到的是确保您为所有表重新生成统计信息。网上有很多脚本用于执行此操作以及有关是否使用内置sprocs,是否执行fullscan等的大量讨论。这是一个快速而肮脏的脚本,我将在进行比较之前运行。

CREATE  PROCEDURE sp_UtilityUpdateStats AS
SET NOCOUNT ON

DECLARE @iCounter       INT
DECLARE @iCounterMax    INT

DECLARE @TableList TABLE
(
    iTable INT IDENTITY(1,1) PRIMARY KEY,
    szTableName VARCHAR(128)
)

INSERT @TableList (szTableName)
SELECT [name] FROM sysobjects
WHERE [type] = 'u'
ORDER BY [name] DESC


SET @iCounterMax = (SELECT MAX(iTable) FROM @TableList)
SET @iCounter = 0
DECLARE @szTableName VARCHAR(128)

RAISERROR(N'------STARTING sp_UtilityUpdateStats------', 10, 1) WITH LOG
WHILE @iCounter < @iCounterMax
BEGIN
    SET @iCounter = @iCounter + 1

    SELECT  @szTableName = szTableName
    FROM @TableList
    WHERE iTable = @iCounter

    RAISERROR(N'UPDATE STATISTICS YourDB.dbo.%s', 10, 1, @szTableName) WITH LOG
    EXEC ('UPDATE STATISTICS YourDB.dbo.' + @szTableName)

END
RAISERROR(N'------FINISHING sp_UtilityUpdateStats------', 10, 1) WITH LOG

SET NOCOUNT OFF
GO