修复: 性能降低,AFTER 触发器运行已分区的表或 SQL Server 2012 SQL Server 2008 R2 中时

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

点击这里察看该文章的英文版: 2606883

症状
请考虑以下方案:
  • 您创建分区表,或 Microsoft SQL Server 2012 Microsoft SQL Server 2008 R2 中。
  • 创建 在后 对于任何触发器 插入删除 在对表执行的操作。
  • 在执行 插入删除 在表上的操作。

在这种情况下,可能会出现性能降低。此外,如果您运行 SQL 事件探查器可能会出现多个逻辑读取。
原因
此问题是由于以下原因:
  • 存储引擎在内部维护单个版本链的每条语句。
  • 若要插入的行中查找的分区中的一个版本整个链的分区搜索查询的执行。

解决方案
要解决此问题,请应用以下修补程序,然后使用-T2470 跟踪标志

累积更新信息

SQL Server 2012 此问题的修补程序是首次推出累积更新 1 中的 SQL Server 2012年。有关此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2679368 累积更新包 1 个 SQL Server 2012
注意生成具有累积性的因为每个新修补程序版本包含的所有修补程序和所有安全修补程序包含以前的 SQL Server 2012年修补程序版本。Microsoft 建议您考虑应用最新的修补程序版本包含此修复程序。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2692828 SQL Server 2012年生成 SQL Server 2012年发布后发布
您必须将 SQL Server 2012年修补程序应用于的 SQL Server 2012年。

SQL Server 2008 R2 Service Pack 1

累积更新信息

此问题的修补程序是首次推出累积更新 3 中的 SQL Server 2008 R2 Service Pack 1。有关如何获取此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2591748 SQL Server 2008 R2 Service Pack 1 的累积更新包 3
注意生成具有累积性的因为每个新修补程序版本包含的所有修补程序和所有安全修补程序包括以前的 SQL Server 2008 R2 的修补程序版本。我们建议您考虑应用最新的修补程序版本包含此修复程序。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2567616 SQL Server 2008 R2 版本发布后发布 SQL Server 2008 R2 Service Pack 1

修补程序信息

可以从 Microsoft 获得支持的修补程序。但是,此修补程序用于解决本文中描述的问题。应用此修复程序只于出现这一特定问题的系统。

如果此修复程序可供下载,没有在此知识文库文章顶部"提供修补程序下载"部分。如果未显示此部分,将申请提交到 Microsoft 客户服务和支持,以获取此修复程序。

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

系统必备组件

若要应用此修补程序,您必须具有 Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) 安装。

重新启动要求

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

修补程序替换信息

此修补程序不替代以前发布的修补程序。

文件信息

这样的全球版具有的文件属性 (或更新的文件属性) 下表中列出。日期和时间,这些文件列出了以协调通用时间 (UTC)。当您查看文件信息时,它将转换为本地时间。若要了解 UTC 与本地时间之间的时差,请使用 时区 在选项卡 日期和时间 在控制面板中的项。

支持所有基于 x86 的 SQL Server 2008 R2 SP1 的版本
文件名称文件版本文件大小日期时间平台
安装数据库2009.100.2776.043,053,920-2011 年 9 月 1501: 47x86

支持所有基于 x64 版本的 xSQL Server 2008 R2 SP1

文件名称文件版本文件大小日期时间平台
安装数据库2009.100.2776.062,176,608-2011 年 9 月 1500: 57x64

所有支持的 ia-64版本SQL Server 2008 R2 SP1

文件名称文件版本文件大小日期时间平台
安装数据库2009.100.2776.0122,105,696-2011 年 9 月 1500: 23IA-64


替代方法
要解决此问题,请更改AFTER触发器,插入 INSTEAD OF触发器,或者删除 INSTEAD OF触发器。

例如,运行以下语句,创建后, AFTER触发器:
CREATE TRIGGER TR_Test ON Test FOR INSERTASBEGINDECLARE @groupe INTSELECT TOP 1 @groupe=Groupe FROM INSERTED ENDGO
在这种情况下,更改而不插入AFTER触发器使用以下语句:
CREATE TRIGGER TR_Test ON Test INSTEAD OF INSERTAS BEGIN DECLARE @groupe INT SELECT TOP 1 @groupe=Groupe FROM INSERTEDINSERT INTO Test (Groupe) SELECT @groupe FROM INSERTED END
状态
Microsoft 已经确认这是"适用于"一节中列出的 Microsoft 产品中的问题。

警告:本文已自动翻译

属性

文章 ID:2606883 - 上次审阅时间:04/16/2012 08:50:00 - 修订版本: 3.0

Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2012 Developer

  • kbqfe kbhotfixserver kbfix kbexpertiseadvanced kbsurveynew kbautohotfix kbmt KB2606883 KbMtzh
反馈