FIX: 系统性能可能会降低应用程序提交对 SQL Server 2005 数据库使用简单的参数化的多个查询时

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 920206
本文已归档。它按“原样”提供,并且不再更新。
Microsoft 将 Microsoft SQL Server 2005 修补程序分发作为一个可下载的文件。因为该修补程序是累积性的因此每个新版本包含的所有修补程序和所有安全修补程序附带以前 SQL Server 2005 修补都程序版本。
概要
本文介绍以下有关此修补程序版本:
  • 通过此修补程序包修复的问题
  • 安装此修补程序包的先决条件
  • 在安装此修补程序包后是否必须重新启动计算机
  • 此修补程序包是否替换任何其他修补程序包
  • 是否必须进行任何注册表更改
  • 修补程序包中包含的文件
症状
请考虑以下情形: 应用程序提交对 Microsoft SQL Server 2005 数据库的许多查询。查询具有相同的查询文本,并声明相同的参数。但是,查询还可以在参数声明字符串中不同的精度和小数位数的数字数据类型值的组合。SQL Server 2005 数据库使用简单的参数化。在这种情况下 SQL Server 2005 系统性能可能会很慢。此外,您可能会遇到 CPU 使用率过高。

当 SQL Server 2005 数据库很大,并在高强度的情况下是将更频繁地发生此问题。

注意SQL Server 2005 数据库的默认行为是使用简单的参数化。
原因
出现此问题的原因是 SQL Server 必须检查很多查询以查找一个查询来查询文本、 在的参数和参数声明字符串匹配。
解决方案

修补程序信息

可以从 Microsoft 获得支持的修补程序。但是,此修补程序被用于解决本文所述的此问题。此修补程序仅应用于出现这一特定问题的系统。此修补程序可能会接受进一步的测试。因此,如果此问题没有对您造成严重的影响,我们建议您等待包含此修补程序的下一个软件更新。

是否可供下载此修补程序没有"提供修补程序下载"部分中,在这篇知识库文章的顶部。如果不会显示此部分,请联系 Microsoft 客户服务和支持以获取此修复程序。

注意如果出现其他问题,或者如果需要进行任何故障诊断,则您可能不得不创建单独的服务请求。将正常收取支持费用将应用于其他支持问题和不需要进行此特定的修补程序的问题。有关完整列表的 Microsoft 客户服务和支持的电话号码,或创建一个单独的服务请求,请访问下面的 Microsoft 网站:注意"提供修补程序下载"窗体所显示的此修复程序是可用的语言。如果您看不到您的语言,则是一个修复程序不能用于该语言。

系统必备组件

若要将此修补程序,您必须具有 SQL Server 2005 Service Pack 1 (SP1) 安装在计算机上。
有关如何获取 SQL Server 2005 Service Pack 1 的详细信息单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
913089如何获取最新的 service pack,SQL Server 2005 年

重新启动信息

您不必在应用此修补程序后,重新启动计算机。

注册表信息

您不必更改注册表。

修补程序替换信息

此修补程序不替代任何其他修补程序。

修补程序文件信息

此修补程序仅包含那些文件解决本文列出了该问题所必需的。此修补程序可能不包含将产品完全更新到最新版本所必需的所有文件。
此修补程序的英文版具有的文件属性 (或更新的文件属性) 在下表中列出。日期和时间对这些文件列出在协调世界时 (UTC)。当您查看文件信息时,将转换为本地时间。若要 UTC 与本地时间之间的时差使用控制面板中的日期和时间项中的 时区 选项卡。
SQL Server 2005 修补程序的 32 位
文件的名称文件版本文件大小日期时间平台
Microsoft.sqlserver.mgdsqldumper.dll2005.90.2164.075,5522006 年六月 14 日20: 29x86
Microsoft.sqlserver.sqlenum.dll9.0.2164.0908,0642006 年六月 14 日20: 32x86
Msgprox.dll2005.90.2164.0197,9202006 年六月 14 日20: 29x86
Msmdlocal.dll9.0.2164.015,661,8562006 年六月 14 日20: 33x86
Mssqlsystemresource.ldf不适用524,2882006 年六月 14 日14: 23不适用
Mssqlsystemresource.mdf不适用39,911,4242006 年六月 14 日14: 23不适用
Replprov.dll2005.90.2164.0547,6162006 年六月 14 日20: 31x86
Replrec.dll2005.90.2164.0782,1122006 年六月 14 日20: 32x86
Sqlaccess.dll2005.90.2164.0347,9362006 年六月 14 日20: 31x86
Sqlservr.exe2005.90.2164.028,950,8722006 年六月 14 日20: 33x86
SQL Server 2005 修补程序的 64 位
文件的名称文件版本文件大小日期时间平台
Microsoft.sqlserver.mgdsqldumper.dll2005.90.2164.075,5522006 年六月 14 日20: 29x86
Microsoft.sqlserver.mgdsqldumper.dll2005.90.2164.091,4242006 年六月 14 日21: 10x64
Microsoft.sqlserver.sqlenum.dll9.0.2164.0875,2962006 年六月 14 日21: 12x86
Msgprox.dll2005.90.2164.0259,3602006 年六月 14 日21: 10x64
Msmdlocal.dll9.0.2164.015,661,8562006 年六月 14 日20: 33x86
Mssqlsystemresource.ldf不适用524,2882006 年六月 14 日14: 23不适用
Mssqlsystemresource.mdf不适用39,911,4242006 年六月 14 日14: 23不适用
Replprov.dll2005.90.2164.0745,2482006 年六月 14 日21: 12x64
Replrec.dll2005.90.2164.01,008,4162006 年六月 14 日21: 12x64
Sqlaccess.dll2005.90.2164.0355,1042006 年六月 14 日21: 11x86
Sqlservr.exe2005.90.2164.039,251,2322006 年六月 14 日21: 13x64
SQL Server 2005 修补程序的 64 位 Itanium 处理器
文件的名称文件版本文件大小日期时间平台
Microsoft.sqlserver.mgdsqldumper.dll2005.90.2164.0163,1042006 年六月 14 日20: 29IA 64
Microsoft.sqlserver.mgdsqldumper.dll2005.90.2164.075,5522006 年六月 14 日20: 29x86
Microsoft.sqlserver.sqlenum.dll9.0.2164.0875,2962006 年六月 14 日20: 29x86
Msgprox.dll2005.90.2164.0542,4962006 年六月 14 日20: 28IA 64
Msmdlocal.dll9.0.2164.048,733,9842006 年六月 14 日20: 30IA 64
Mssqlsystemresource.ldf不适用524,2882006 年六月 14 日14: 23不适用
Mssqlsystemresource.mdf不适用39,911,4242006 年六月 14 日14: 23不适用
Replprov.dll2005.90.2164.01,617,1842006 年六月 14 日20: 29IA 64
Replrec.dll2005.90.2164.02,141,4722006 年六月 14 日20: 29IA 64
Sqlaccess.dll2005.90.2164.0349,4722006 年六月 14 日20: 28x86
Sqlservr.exe2005.90.2164.072,208,6722006 年六月 14 日20: 30IA 64
状态
Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。
替代方法
要变通解决此问题,请在客户端应用程序中使用显式参数化。当在客户端应用程序中使用显式参数化功能时,只有一个执行计划是创建并存储在过程高速缓存中。在这种解决方法 SQL Server 2005 系统性能能否按期望的方式运行。

有关显式参数化和执行计划的详细信息重复使用,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
更多信息
当应用程序提交针对 SQL Server 2005 的数据库的许多查询时,在执行查询之前必须存在在过程高速缓存中为每个查询执行计划。

注意如果不在过程高速缓存中存在的具体的查询执行计划 SQL Server 编译查询、 写入过程高速缓存查询的执行计划,然后执行查询。

时 SQL Server 2005 从过程高速缓存中检索缓存的执行计划具体的查询,SQL Server 通过使用已编译查询时已派生一个哈希键标识对应的执行计划。原始的发行版,SQL Server 2005 的查询文本仅从派生哈希键,并跳过参数声明字符串。 当 SQL Server 2005 查询文本仅从派生哈希键时,SQL Server 2005 将拥有相同的查询文本以及相同的参数相同的哈希存储桶中的所有查询的哈希键。即使每个查询参数声明字符串中有不同的精度和小数位数的数字值的组合,也会出现此行为。当试图从过程高速缓存的具体的查询中检索缓存的查询执行计划的 SQL Server 2005 时,SQL Server 必须检查所有查询执行计划在匹配的哈希存储桶中,以查找一个查询执行计划与查询文本,该的参数和参数声明字符串匹配。

应用此修补程序后,SQL Server 2005 将派生出查询文本和参数声明字符串的哈希键。当一个新的查询具有与另一个现有的查询不匹配的参数声明字符串中的精度和小数位数的数字值的组合时,SQL Server 2005 会将新查询的哈希键放在新的哈希存储桶中。新的查询具有相同的查询文本和作为另一个现有查询相同的参数的情况下,即使 SQL Server 2005 可将新查询的哈希键放入新的哈希存储桶。因此,SQL Server 2005 会在试图从过程高速缓存新查询中检索缓存的执行计划时, 匹配的哈希存储桶将包含要检查的 SQL Server 只有一个查询。

在此的修补程序的分辨率情况下 SQL Server 2005 仍有很多的执行计划。出现这种情况的原因是: 为每个查询参数声明字符串中有新的精度和小数位数的数字值的组合,创建一个单独的执行计划。每个执行计划要求 SQL Server 2005 系统资源来创建执行计划。 每个执行计划时需要 SQL Server 2005 系统资源存储在过程高速缓存中的执行计划。由于修补程序解决方案要求大量 SQL Server 2005 系统资源,SQL Server 2005 系统性能可能仍会比预期速度慢。
有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684用于描述 Microsoft 软件更新的标准术语的说明

警告:本文已自动翻译

属性

文章 ID:920206 - 上次审阅时间:01/17/2015 15:00:28 - 修订版本: 1.8

Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Standard X64 Edition, Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2005 Enterprise X64 Edition, Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems, Microsoft SQL Server 2005 Developer Edition

  • kbnosurvey kbarchive kbmt kbautohotfix kbbug kbfix kbtshoot kbhotfixserver kbqfe kbpubtypekc KB920206 KbMtzh
反馈