El rendimiento se reduce cuando ejecuta una instrucción SELECT... EN la consulta después de actualizar a SQL Server 2012 y posteriores

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 3144525
Síntomas
Después de actualizar desde Microsoft SQL Server 2008 R2 o una versión anterior a SQL Server 2012 o una versión posterior, puede observar queSELECT... EN las consultas que contienen funciones definidas por el usuario tardan más en completarse que en las versiones anteriores.
Causa
Este problema se produce porque ese seleccione.. EN instrucciones que contienen funciones definidas por el usuario (UDF) son operaciones de registro completo y tarda más tiempo en completar en SQL Server 2012 y versiones posteriores.

Nota: Cualquier selección .. EN las instrucciones que contienen funciones definidas por el usuario son operaciones registradas al mínimo en las versiones anteriores (SQL Server 2008 R2 y versiones anteriores). Este cambio se introdujo para asegurarse de la integridad de los datos, como la función definida por el usuario puede realizar operaciones de lectura y escritura en el mismo objeto y puede causar daños en los datos si está habilitado el registro mínimo.
Solución
Si selecciona las funciones definidas por el usuario que se utilizan en la ... EN instrucción no realizar operaciones de acceso a datos, puede especificar la cláusula SCHEMABINDING para las funciones definidas por el usuario, que se establece la propiedad derivada de UserDataAccess para las funciones definidas por el usuario en 0. Después de este cambio, SELECT... EN instrucciones se registrará como mínimo. Para obtener más información, vea el ejemplo en el blog para obtener un ejemplo sobre el uso de SCHEMABINDING.

Nota: Si la instrucción aún hace referencia al menos una función definida por el usuario que tenga esta propiedad establecida en 1, se registra completamente la operación.
Más información
El código de ejemplo siguiente muestra la diferencia de comportamiento entre SQL Server 2008 R2 y SQL Server 2012 o 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

La tabla siguiente compara el tiempo de CPU para una operación en select en SQL Server 2008 R2 con el de 2014 de SQL Server:

VersiónTiempo de ejecución (tiempo de CPU)
SQL Server 2008 R2719 ms
SQL Server de 20141360 ms

La tabla siguiente compara el uso de registro de transacciones para una operación en select en SQL Server 2008 R2 con el de 2014 de SQL Server:

VersiónNombre de la base de datosTamaño del registro (MB)Espacio de registro utilizado (%)Estado
SQL Server 2008 R2DB10.742187551.578950
SQL Server de 2014DB132.1796938.44380
Nota importante Los resultados de estas tablas son sólo un ejemplo del cambio de comportamiento entre SQL Server 2008 R2 y SQL Server 2014 y son muy específicos para el entorno de laboratorio que se utilizó para esta prueba. La diferencia de rendimiento real en su entorno dependerá del hardware que se está ejecutando la instancia SQL.
Nota: es un artículo de "PUBLICACIÓN RÁPIDA" creado directamente por la organización de soporte técnico de Microsoft. La información aquí contenida se proporciona como está, como respuesta a problemas que han surgido. Como consecuencia de la rapidez con la que lo hemos puesto disponible, los materiales podrían incluir errores tipográficos y pueden ser revisados en cualquier momento sin previo aviso. Vea las Condiciones de uso para otras consideraciones

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 3144525 - Última revisión: 03/03/2016 22:42:00 - Revisión: 1.0

Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Enterprise Edition, 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 KbMtes
Comentarios