选择运行时,性能就会降低.在您升级到 SQL Server 2012年及更高版本的查询

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 3144525
症状
从 Microsoft SQL Server 2008 R2 或较早版本升级到 SQL Server 2012年或更高版本后,您可能会注意到,选择...到包含用户定义函数的查询需要较长的时间比早期版本中完成。
原因
因为该选择,则会发生此问题。.到语句包含用户定义函数 (Udf) 是完整记录的操作和需要更多时间完成 SQL Server 2012年及更高版本中。

注意:任何选择.到语句包含用户定义的函数是在早期版本中的最小日志记录的操作 (SQL Server 2008 R2 和更早版本)。引入此更改的目的是要确保数据的完整性,为用户定义的函数可以执行对同一对象的读/写操作并启用最小日志记录可能会导致数据损坏。
替代方法
如果选择了在中使用用户定义的函数...到语句不执行任何数据访问操作,则可以指定将这些用户定义的函数的派生的UserDataAccess属性设置为 0 的用户定义函数的架构绑定子句。此更改,请选择后...到语句将最低记录。有关详细信息,请参阅 有关使用架构绑定的示例日志中的示例.

注意:如果该语句仍引用此属性设置为 1 的至少一个用户定义的函数,将完整地记录该操作。
更多信息
下面的代码示例演示如何在 SQL Server 2008 R2 SQL Server 2012年和 2014年之间的行为差异:

create database DB1gouse DB1gocreate function dbo.MyTrim (@name as varchar(100))returns varchar (100)asbeginreturn (RTRIM(ltrim(@name)))endgocreate table dbo.tab_prod (c1 int, c2 varchar(10))godeclare @a int set @a = 1while @a <= 100000begin insert into tab_prodvalues (@a , '  test ')set @a = @a + 1endbegin transelect  *,  dbo.mytrim(c2) as trimc2 into tab_test from tab_prod

下表比较选择到运行 SQL Server 2008 R2 中的 SQL Server 2014年的 CPU 时间:

版本执行时间 (CPU 时间)
SQL Server 2008 R2719 ms
SQL Server 20141360 ms

下表比较了事务日志选择到运行 SQL Server 2008 R2 中的 SQL Server 2014年的用法:

版本数据库名称日志大小 (MB)使用的日志空间 (%)状态
SQL Server 2008 R2DB10.742187551.578950
SQL Server 2014DB132.1796938.44380
重要说明在这些表中的结果只是 SQL Server 2008 R2 和 SQL Server 2014年之间的行为中的更改的示例,具体为用于此测试实验室环境。在您环境中的实际性能差异将取决于您的 SQL 实例运行的硬件。
注意:本篇“快速发布”文章是从 Microsoft 支持组织直接创建的。 文中包含的信息按原样提供,用于响应紧急问题。 由于发布仓促,材料可能包含印刷错误,并且可能随时修订,恕不另行通知。 有关其他注意事项,请参阅使用条款

警告:本文已自动翻译

属性

文章 ID:3144525 - 上次审阅时间:03/03/2016 22:31:00 - 修订版本: 1.0

Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL 2005 Server Workgroup, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Express, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Web, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Express, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Web, Microsoft SQL Server 2008 R2 Workgroup

  • kbsurveynew kbtshoot kbexpertiseadvanced kbmt KB3144525 KbMtzh
反馈