Microsoft 在一个可下载的文件中分发 Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) 或 Microsoft SQL Server 2012 修补程序。 由于修补程序是累积的,因此每个新版本都包含前一个 SQL Server 2008 R2 Service Pack 1 (SP1) 或 Microsoft SQL Server 2012 更新版本中包含的所有修补程序和安全更新。
症状
请考虑以下情形:
- 从 Microsoft SQL Server 2005 升级到 Microsoft SQL Server 2008 或 Microsoft SQL Server 2008 R2 或 Microsoft SQL Server 2012。
- 运行使用 sp_cursoropen 存储过程的查询,然后指定 rowcount 参数以提取表的前几行。
在这种情况下,性能可能会低于在 SQL Server 2005 中运行相同查询时的性能。
原因
出现此问题的原因是查询优化器使用静态游标计划而不是动态游标计划。 对于静态游标计划,SQL Server 提取所有行并将其插入游标工作表中。 但是,对于动态游标计划,SQL Server 仅提取所需的行。
解决方法
累积更新信息
SQL Server 2012
此问题的修补程序首次在 SQL Server 2012 的累积更新 1 中发布。 有关此累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2679368 SQL Server 2012 累积更新包 1 注意 由于版本是累积的,因此每个新的修补程序版本都包含之前 SQL Server 2012 修补程序版本中包含的所有修补程序和所有安全修补程序。 Microsoft 建议考虑应用包含此修补程序的最新修补程序版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2692828 SQL Server 2012 发布之后发布的 SQL Server 2012 内部版本 必须将 SQL Server 2012 修补程序应用于 SQL Server 2012 的安装。
SQL Server 2008 R2 SP1 累积更新程序包 5
应用此修补程序后,启用跟踪标志 4199。
此问题的修补程序已在累积更新 5 中首次发布。 有关如何获取 SQL Server 2008 R2 SP1 的此累积更新程序包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2659694 SQL Server 2008 R2 SP1 累积更新包 5 注意 由于版本是累积的,因此每个新的修补程序版本都包含前一个 SQL Server 2008 R2 SP1 修补程序版本中包含的所有修补程序和安全修补程序。 建议应用包含此修补程序的最新修补程序版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2567616 在 SQL Server 2008 R2 SP1 发布之后发布SQL Server 2008 R2 内部版本
解决方法
要解决此问题,请向查询添加 FAST 查询提示。
详细信息
有关如何使用查询提示的更多信息,请访问以下 MSDN 网站:
有关如何使用查询提示的一般信息 有关跟踪标志 4199 的更多信息,请访问以下网站:
状态
Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。