2012-06-07 61 views
0

我们已经部署SQL Server 2012的企业,我们有性能问题:Sql Server 2012比2005年慢吗?

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

使用Management Studio我们做测试:

  1. 结果为纯文本
  2. 所生成的文件

在同一计算机:

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

即使一台功能更强大的电脑,2012年仍然比2005年慢。

什么可能是错的?我们安装SQL Server 2012的方式和默认参数?我们恢复备份的方式?我们可以做什么?

+2

没有指标 - 谁能说?它可能是磁盘,它可能是索引,它可能是内存,它可能是腐败..等..你需要缩小到一个最小的案件和调查。目前人们无法提供帮助。但我建议你先重建所有指标,然后从那里着手调查。 –

+0

我知道它缺乏指标。我想知道是否有人遇到过相同的问题,因为在同一台计算机上,我们与2个默认安装(2005/2012)有不同的结果。 –

+0

当你提供一些在2012年较慢的查询时,可能有一个想法。 –

回答

1

当我看到这样的变化时,我首先想到的是确保您重新生成了所有表格的统计信息。网上有很多脚本来做这件事,还有很多关于是否使用内置sprocs,是否进行全扫描等方面的讨论。这里有一个快速和肮脏的脚本,通过它我会比较之前运行。

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 
+0

运行这样的脚本与使用内置维护计划更新统计信息有何不同? – brentil

相关问题