0

我们已部署 SQL Server 2012 Enterprise,但存在性能问题:

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

我们使用 Management Studio 进行测试:

  1. 结果为纯文本
  2. 结果是一个文件

在同一台计算机上:

  1. 2005 年:15 秒,2012 年:2 分钟
  2. 2005 年:14 秒,2012 年:30 秒

即使使用更强大的计算机,2012 年仍然比 2005 年慢。

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

4

1 回答 1

1

当我看到这样的变化时,我的第一个想法是确保您已为所有表重新生成统计信息。网上有很多脚本可以做到这一点,并且有很多关于是否使用内置存储过程、是否进行全扫描等的讨论。这是一个快速而肮脏的脚本,我会在进行比较之前运行它。

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
于 2012-12-07T21:37:50.563 回答