以兼容级别 80 运行 SQL Server 2005 数据库是不是会对性能产生负面影响?

Posted

技术标签:

【中文标题】以兼容级别 80 运行 SQL Server 2005 数据库是不是会对性能产生负面影响?【英文标题】:Does running a SQL Server 2005 database in compatibility level 80 have a negative impact on performance?以兼容级别 80 运行 SQL Server 2005 数据库是否会对性能产生负面影响? 【发布时间】:2010-09-05 15:41:57 【问题描述】:

我们的软件必须能够在 SQL Server 2000 和 2005 上运行。为了简化开发,我们运行兼容级别为 80 的 SQL Server 2005 数据库。但是,在某些情况下,SQL 2005 上的数据库性能似乎比 SQL 2000 慢案例(我们尚未使用基准确认这一点)。将兼容性级别升级到 90 会提高 SQL 2005 服务器的性能吗?

【问题讨论】:

【参考方案1】:

您是否在查询中使用子选择

根据我的经验,在 SQL Server 2000 上运行良好的带有子选择的 SELECT 语句可以在 SQL Server 2005 上爬行(它可能会慢 10 倍!)。

做一个实验 - 重新编写一个查询以消除子选择,看看它的性能如何变化。

【讨论】:

【参考方案2】:

我想我在某处读到,SQL Server 2005 数据库引擎应该比 SQL Server 2000 引擎快 30%。可能是,您必须在兼容模式 90 下运行数据库才能获得这些好处。

但我偶然发现了两种情况,与 mssql 2000 相比,使用 mssql 2005 时性能会急剧下降:

    参数嗅探:当使用存储过程时,sql server 会计算出当时正好一个执行计划,你首先调用该过程。执行计划取决于为该调用提供的参数值。在我们的例子中,通常需要大约 10 秒的程序在 mssql 2005 下运行了几个小时。看看here 和here。

    使用分布式查询时,mssql 2005 的行为与关于远程服务器上排序顺序的假设不同。默认行为是,服务器将查询中涉及的整个远程表复制到本地 tempdb,然后在本地执行连接。解决方法是使用 OPENQUERY,您可以在其中准确控制从远程服务器传输的结果集。

【讨论】:

【参考方案3】:

也仅供参考,如果您运行兼容级别 90,则不再支持某些内容,例如旧式外连接 (*= and =*)

【讨论】:

【参考方案4】:

在您将数据库移至 2005 年之后,您是否

使用全面扫描更新统计信息? 重建索引?

先尝试一下,然后再次检查性能

【讨论】:

以上是关于以兼容级别 80 运行 SQL Server 2005 数据库是不是会对性能产生负面影响?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 兼容性级别和基数估计

SQL Server 兼容性级别和基数估计

SQL Server 兼容性级别和基数估计

SQL Server 2014 兼容级别错误

SQL Server 兼容级别

有关SQL SERVER的问题