【问题标题】: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 服务器的性能吗?

【问题讨论】:

    标签: sql-server database


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-11
            • 2014-10-16
            • 1970-01-01
            相关资源
            最近更新 更多