REVISIÓN: El rendimiento de una operación DML que desencadena un desencadenador puede disminuir cuando el plan de ejecución del desencadenador vuelve a compilar repetidamente

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): 870972
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Nº de error: 470083 (SQL Server 8.0)
Resumen
En este artículo describe lo siguiente acerca de esta versión de revisión:
  • Los problemas que corrigen este paquete de revisiones.
  • Los requisitos previos para instalar el paquete de hotfix.
  • Si debe reiniciar o no el equipo después de instalar el paquete de hotfix.
  • Si el paquete de hotfix queda reemplazado o no por otro paquete de hotfix.
  • Si debe hacer cambios en el registro.
  • Archivos contenidos en el paquete de hotfix.
back to the top
Síntomas
Cuando ejecuta una instrucción de lenguaje (DML) de manipulación de datos como UPDATE, INSERT o DELETE instrucción que activa un desencadenador, las recompilaciones de programa de Microsoft SQL Server la ejecución del desencadenador va a mejorar el rendimiento de la ejecución del desencadenador. Sin embargo, la recompilación repetida del desencadenador de plan de ejecución puede disminuir el rendimiento de la ejecución del desencadenador.

La recompilación repetida del desencadenador de plan de ejecución puede producirse cuando se cumplen las condiciones siguientes:
  • Ejecutar la instrucción DML varias veces.
  • El número de filas que se ven afectados por la instrucción DML es diferente cada vez que se ejecuta la instrucción DML.
Para obtener una lista de revisiones anteriores, consulte la sección "Microsoft SQL Server 2000 Service Pack 3 o Microsoft SQL Server 2000 Service Pack 3a revisiones" en el siguiente artículo de Microsoft Knowledge Base:
290211Cómo obtener el service pack más reciente de SQL Server 2000
back to the top
Solución

Información de Service Pack

Para resolver este problema, consiga el Service Pack más reciente para Microsoft SQL Server 2000. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
290211Cómo obtener el Service Pack más reciente de SQL Server 2000

Información de revisiones

Requisitos previos

Esta revisión requiere Microsoft SQL Server 2000 Service Pack 3 (SP3). Para obtener información adicional acerca de cómo obtener Service Pack 3 de SQL Server 2000, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
290211Cómo obtener el service pack más reciente de SQL Server 2000
back to the top

Información de reinicio

No es necesario que reinicie el equipo una vez aplicado este hotfix.

Nota Después de aplicar esta revisión, debe reiniciar el programa de SQL Server 2000 que se ejecuta en el equipo.

back to the top

Información de archivos de hotfix

Este hotfix contiene sólo los archivos necesarios para corregir los problemas recogidos en este artículo. Esta revisión no puede contenga todos los archivos que debe tener para actualizar plenamente un producto a la compilación más reciente.

La versión en inglés de este hotfix tiene los atributos de archivo (o atributos de último archivo) mostrados en la siguiente tabla. Las fechas y horas de estos archivos aparecen en hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria de la herramienta fecha y hora en el panel de control.
    Date         Time   Version       Size       File name   ------------------------------------------------------------------   18-Jun-2004  14:14  2000.80.954.0    664,128  Autoplt.dll         18-Jun-2004  14:14  2000.80.954.0     78,400  Console.exe         18-Jun-2004  14:14  2000.80.954.0    315,968  Custtask.dll        18-Jun-2004  14:14  2000.80.954.0     33,340  Dbmslpcn.dll        08-Apr-2004  09:12                   786,432  Distmdl.ldf   08-Apr-2004  09:12                 2,359,296  Distmdl.mdf   10-Oct-2003  06:18                       180  Drop_repl_hotfix.sql   18-Jun-2004  14:14  2000.80.954.0  1,905,216  Dtspkg.dll          18-Jun-2004  14:14  2000.80.954.0    528,960  Dtspump.dll         18-Jun-2004  14:14  2000.80.954.0  1,557,052  Dtsui.dll           18-Jun-2004  14:14  2000.80.954.0    639,552  Dtswiz.dll          10-Oct-2003  06:18                   747,927  Instdist.sql   10-Oct-2003  06:18                     1,581  Inst_repl_hotfix.sql   18-Jun-2004  14:14  2000.80.954.0    352,828  Isqlw.exe           18-Jun-2004  14:14  2000.80.954.0     82,492  Itwiz.exe           18-Jun-2004  14:14  2000.80.954.0     90,692  Msgprox.dll         19-May-2004  11:13  8.11.40209.0     209,408  Mssdi98.dll         18-Jun-2004  14:14  2000.80.954.0     62,024  Odsole70.dll        18-Jun-2004  14:15  2000.80.954.0     25,144  Opends60.dll        18-Jun-2004  14:14  2000.80.954.0     57,904  Osql.exe            18-Jun-2004  14:14  2000.80.954.0    279,104  Pfutil80.dll        10-Oct-2003  06:07                   550,780  Procsyst.sql   08-Apr-2004  09:12                    12,305  Qfe469315.sql   08-Apr-2004  09:12                    19,195  Qfe469571.sql   17-Jun-2004  02:42                 1,105,167  Replmerg.sql   18-Jun-2004  14:14  2000.80.954.0    221,768  Replprov.dll        18-Jun-2004  14:14  2000.80.954.0    307,784  Replrec.dll         16-Jun-2004  14:07  2000.80.954.0    159,813  Replres.rll   10-Oct-2003  06:18                 1,087,150  Replsys.sql   10-Oct-2003  06:18                   986,603  Repltran.sql   18-Jun-2004  14:14  2000.80.954.0    287,304  Rinitcom.dll        18-Jun-2004  14:14  2000.80.954.0     78,416  Sdiclnt.dll         18-Jun-2004  14:14  2000.80.954.0     66,112  Semmap.dll          18-Jun-2004  14:14  2000.80.954.0     57,916  Semnt.dll           18-Jun-2004  14:14  2000.80.954.0    492,096  Semobj.dll          16-Jun-2004  14:44  2000.80.954.0    172,032  Semobj.rll   18-Jun-2004  14:14  2000.80.954.0     53,832  Snapshot.exe        11-Mar-2004  14:40                   117,834  Sp3_serv_uni.sql   18-Jun-2004  14:13  2000.80.954.0     28,672  Sqlagent.dll        18-Jun-2004  14:14  2000.80.954.0    311,872  Sqlagent.exe        18-Jun-2004  14:13  2000.80.954.0    168,001  Sqlakw32.dll        18-Jun-2004  14:14  2000.80.954.0     33,344  Sqlctr80.dll        18-Jun-2004  14:14  2000.80.954.0  4,215,360  Sqldmo.dll          18-Jun-2004  14:14                    25,172  Sqldumper.exe       16-Jun-2004  13:54  2000.80.954.0     28,672  Sqlevn70.rll   18-Jun-2004  14:14  2000.80.954.0    180,792  Sqlmap70.dll        18-Jun-2004  14:14  2000.80.954.0    188,992  Sqlmmc.dll          16-Jun-2004  14:52  2000.80.954.0    479,232  Sqlmmc.rll   18-Jun-2004  14:14  2000.80.954.0    401,984  Sqlqry.dll          18-Jun-2004  14:14  2000.80.954.0     57,920  Sqlrepss.dll        18-Jun-2004  14:14  2000.80.954.0  7,581,777  Sqlservr.exe        18-Jun-2004  14:14  2000.80.954.0    590,396  Sqlsort.dll         18-Jun-2004  14:14  2000.80.954.0     45,644  Sqlvdi.dll          18-Jun-2004  14:14  2000.80.954.0    106,588  Sqsrvres.dll        18-Jun-2004  14:14  2000.80.954.0     33,340  Ssmslpcn.dll        18-Jun-2004  14:14  2000.80.954.0     82,492  Ssnetlib.dll        18-Jun-2004  14:14  2000.80.954.0     25,148  Ssnmpn70.dll        18-Jun-2004  14:14  2000.80.954.0    123,456  Stardds.dll         18-Jun-2004  14:14  2000.80.954.0    158,240  Svrnetcn.dll        18-Jun-2004  14:14  2000.80.954.0     76,416  Svrnetcn.exe        18-Jun-2004  14:14  2000.80.954.0     49,228  Ums.dll             18-Jun-2004  14:14  2000.80.954.0     98,872  Xpweb70.dll      
Nota Debido a la interdependencia entre archivos, la revisión más reciente que contiene estos archivos también puede contener archivos adicionales.back to the top
Estado
Microsoft ha confirmado que se trata de un error de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Este problema se corrigió por primera vez en Pack 4 de Microsoft SQL Server 2000.

back to the top
Más información
Esta actualización de revisión mejora los umbrales en que se vuelve a compilar el plan de ejecución de un desencadenador. Mejora de los umbrales surta efecto, debe habilitar el indicador de traza 9055 después de instalar esta revisión de SQL Server. Para habilitar el indicador de traza 9055 para una instancia de SQL Server, utilice uno de los métodos siguientes:
  • Ejecute la siguiente instrucción de Transact-SQL en SQL Query Analyzer en la instancia de SQL Server:
    DBCC TRACEON (9055, -1)
  • Agregar -T9055 los parámetros de inicio de SQL Server.

Pasos para reproducir el comportamiento

Para reproducir un escenario que causa una recompilación de plan de ejecución de desencadenador, siga estos pasos:
  1. Inicie el Analizador de consultas SQL y, a continuación, conectarse a una instancia de SQL Server 2000.
  2. Crear una tabla y un desencadenador de actualización en la tabla. Nombre de la tabla como cache_test y nombre del desencadenador de actualización como cache_test_update . Para ello, ejecute las instrucciones de Transact-SQL siguientes:
    use pubsgoset nocount ongoif exists (select 1 from sysobjects where id = object_id('dbo.cache_test'))drop table dbo.cache_testgocreate table dbo.cache_test(id int not null,descr varchar(30) not null,rowcreateddt datetime not null default getdate(),rowcreatedby varchar(30) not null default right(system_user,30),testcolumn varchar(30) null,primary key (id))gocreate trigger dbo.cache_test_updateon dbo.cache_testfor updateasif exists ( select 1 from inserted where id = 98654 )print 'test'returngo
  3. Insertar algunos registros en la tabla cache_test y quite todos los elementos de la caché de procedimiento. To do this, run the following Transact-SQL statements:
    insert into cache_test (id, descr, testcolumn) select 1,'Descr 1','Test 1'insert into cache_test (id, descr, testcolumn) select 2,'Descr 2','Test 2'insert into cache_test (id, descr, testcolumn) select 3,'Descr 3','Test 3'insert into cache_test (id, descr, testcolumn) select 4,'Descr 4','Test 4'insert into cache_test (id, descr, testcolumn) select 5,'Descr 5','Test 5'insert into cache_test (id, descr, testcolumn) select 6,'Descr 6','Test 6'insert into cache_test (id, descr, testcolumn) select 7,'Descr 7','Test 7'insert into cache_test (id, descr, testcolumn) select 8,'Descr 8','Test 8'insert into cache_test (id, descr, testcolumn) select 9,'Descr 9','Test 9'insert into cache_test (id, descr, testcolumn) select 10,'Descr 10','Test 10'godbcc freeproccache
  4. Actualizar una única fila en la tabla cache_test y, a continuación, consulte el plan para esta actualización de fila única que está en la caché. Para ello, ejecute las instrucciones de Transact-SQL siguientes:
    update cache_testset testcolumn = 'testing '+cast(id as varchar)where id between 1 and 1goselect SetOpts,UseCounts,* from master..SyscacheObjects where ObjId=Object_ID('cache_test_update') order by SetOpts, CacheObjTypego
    se observe un resultado similar al siguiente:
    SetOpts UseCounts bucketid cacheobjtype     objtype  objid      dbid dbidexec uid refcounts usecounts pagesused lasttime maxexectime avgexectime lastreads lastwrites setopts langid dateformat status sqlbytes sql5371	1	  10394	   Compiled Plan    Trigger  1029578706	5    5	      1	  2	    1	      1	        0	 0	     0	         0	   0	      5371    0	     1	        0	34	cache_test_update5371	1	  10394	   Executable Plan  Trigger  1029578706	5    5	      1	  1	    1	      1	        0	 0	     0	         0	   0	      5371    0	     1	        0	34	cache_test_update
  5. Actualice cuatro filas en la tabla cache_test y, a continuación, ver el plan para esta actualización varios fila que está en la caché. Para ello, ejecute las instrucciones de Transact-SQL siguientes:
    update cache_testset testcolumn = 'testing '+cast(id as varchar)where id between 1 and 4goselect SetOpts,UseCounts,* from master..SyscacheObjects where ObjId=Object_ID('cache_test_update') order by SetOpts, CacheObjTypego
    dará cuenta de un resultado similar al siguiente:
    SetOpts UseCounts bucketid cacheobjtype     objtype  objid      dbid dbidexec uid refcounts usecounts pagesused lasttime maxexectime avgexectime lastreads lastwrites setopts langid dateformat status sqlbytes sql4347	1	  10394	   Compiled Plan    Trigger  1029578706	5    5	      1	  2	    1	      1	        0	 0	     0	         0	   0	      4347    0	     1	        0	34	cache_test_update4347	1	  10394	   Executable Plan  Trigger  1029578706	5    5	      1	  1	    1	      1	        0	 0	     0	         0	   0	      4347    0	     1	        0	34	cache_test_update5371	1	  10394	   Compiled Plan    Trigger  1029578706	5    5	      1	  2	    1	      1	        0	 0	     0	         0	   0	      5371    0	     1	        0	34	cache_test_update5371	1	  10394	   Executable Plan  Trigger  1029578706	5    5	      1	  1	    1	      1 	0	 0	     0	         0	   0	      5371    0	     1	        0	34	cache_test_update
  6. Actualización cinco filas) en el tabla cache_test y, a continuación, consulte el plan para esta actualización de fila de varias que es en la caché. Para ello, ejecute las instrucciones de Transact-SQL siguientes:
    update cache_testset testcolumn = 'testing '+cast(id as varchar)where id between 1 and 5goselect SetOpts,UseCounts,* from master..SyscacheObjects where ObjId=Object_ID('cache_test_update') order by SetOpts, CacheObjTypego
    se observe un resultado similar al siguiente:
    SetOpts UseCounts bucketid cacheobjtype     objtype  objid      dbid dbidexec uid refcounts usecounts pagesused lasttime maxexectime avgexectime lastreads lastwrites setopts langid dateformat status sqlbytes sql4347	1	  10394	   Compiled Plan    Trigger  1029578706	5    5	      1	  2	    1	      1	        0	 0	     0	         0	   0	      4347    0	     1	        0	34	cache_test_update4347	2	  10394	   Executable Plan  Trigger  1029578706	5    5	      1	  1	    2	      1	        0	 0	     0	         0	   0	      4347    0	     1	        0	34	cache_test_update

    Si compara este resultado con el resultado en el paso 5, puede que observe las siguientes condiciones que podrían conducir a la reducción del rendimiento de la ejecución del desencadenador:
    • Se elimina el plan de ejecución corresponde a la actualización de fila varios en el resultado del paso 5. Este comportamiento se produce porque se recompila el plan de ejecución que corresponde a la actualización de fila varias para crear un nuevo plan de ejecución.
    • Aunque parezca han vuelto a compilar el plan de ejecución, la columna usecounts indica que se ha utilizado el plan ejecutable dos veces. No es correcto.
    • Además, el plan de ejecución que corresponde a la actualización de fila se ha eliminado de la caché.
back to the top
Referencias
Para obtener más información, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):Para obtener información adicional acerca del esquema de nomenclatura actualizaciones de Microsoft SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
822499Nuevo esquema de nomenclatura para los paquetes de actualización del software de Microsoft SQL Server
Para obtener información adicional acerca de la terminología que usa Microsoft cuando corrige software después de haberlo publicado, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684Descripción de la terminología estándar utilizada para describir las actualizaciones de software de Microsoft
Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
263889SQL debido a [[COMPILE]] bloqueos
back to the top
Varias filas de recompilación de plan de ejecución de desencadenadores Update

Propiedades

Id. de artículo: 870972 - Última revisión: 01/17/2015 08:43:47 - Revisión: 2.4

Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Workgroup Edition, Microsoft SQL Server 2000 Desktop Engine (Windows), Microsoft SQL Server 2000 Enterprise Edition 64-bit

  • kbnosurvey kbarchive kbmt kbtrigger kbbug kbfix kbsqlserv2000presp4fix kbhotfixserver kbqfe KB870972 KbMtes
Comentarios