Infracciones de acceso y archivos de volcado de memoria al usar la sesión XEvent con sqlos.wait_info evento en SQL Server

Este artículo le ayuda a resolver el problema que se produce cuando se usa una sesión XEvent que tiene un sqlos.wait_info evento en SQL Server.

Versión del producto original: SQL Server
Número de KB original: 4033835

Síntomas

Considere el caso siguiente:

  • Cree una sesión XEvent que tenga un sqlos.wait_info evento en Microsoft SQL Server.

  • En esta sesión, se define un filtro (predicado) en el siguiente patrón:

    [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%< **Query Text** >')
    

En este escenario, puede experimentar cualquiera de los siguientes problemas:

  • SQL Server genera infracciones de acceso o un archivo de volcado de memoria de desbordamiento de pila.

  • SQL Server genera un archivo de volcado de memoria del programador que no produce.

  • Las consultas no devuelven resultados o no se puede cancelar ni eliminar una consulta.

  • Cuando SQL Server genera una excepción y un EXCEPTION_ACCESS_VIOLATION archivo de volcado de memoria de desbordamiento de pila en el registro de errores de SQL Server, se generan mensajes de error similares a cualquiera de los siguientes mensajes:

    <> Marca de tiempo spid52 *
    <> Marca de tiempo spid52 * BEGIN STACK DUMP:
    <> Marca de tiempo spid52 *<Marca> de tiempo espiado 52
    <> Marca de tiempo spid52 *
    <> Marca de tiempo spid52 *
    <Time Stamp> spid52 * Exception Address = 00007FFA414ED763 Module(sqlmin+0000000000D763)
    <> Marca de tiempo spid52 * Código de excepción = c0000005 EXCEPTION_ACCESS_VIOLATION
    <> Marca de tiempo spid52 * Se produjo una infracción de acceso 0000000000000008
    <Time Stamp> spid55 No se puede crear el archivo de volcado de pila debido a la escasez de la pila (Ubicación: scheduler.cpp:2090
    Expresión: !pWorker-WorkerQueueElem>::IsInList ()
    SPID: 55
    Id. de proceso: 8548)
    <> La firma de pila spid55 de marca de tiempo para el volcado de memoria es 0x0000000000000000
    <> No es posible el volcado de desbordamiento de la pila de marca de tiempo spid55<>: excepción c00000fd EXCEPTION_STACK_OVERFLOW en 0x00007FFA4EF85F35
    <> Marca de tiempo spid55 SqlDumpExceptionHandler: Address=0x00007FFA4EF85F35 Código de excepción = c00000fd
    <> Marca de tiempo spid55 Rax=000000000000044c Rbx=0000000002612320 Rcx=0000000002612050 Rdx=00000000662baf59
    <Time Stamp> spid55 Rsi=000000004b04f848 Rdi=000000004b000270 Rip=0000000004ef85f35 Rsp=000000000002611fd0
    <> Marca de tiempo spid55 Rbp=000000000000000 EFlags=0000000000010202
    <Time Stamp> spid55 cs=0000000000000033 ss=000000000000002b ds=000000000000002b
    es=000000000000002b fs=0000000000000053 gs=000000000000002b
    <> Marca de tiempo spid55 1: Frame 00000000000000000 Dirección de devolución 00007FFA4EF85F35

Solución alternativa

Para solucionar este problema, evite usar condiciones de filtro complejas junto con el wait_info evento . Esto se debe a que el wait_info evento consume muchos recursos y puede ralentizar significativamente una consulta.

Si desea realizar un seguimiento <Query Text> en esta situación, cambie el patrón De predicado de filtro a lo siguiente:

([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[sql_text],N'<Query Text>')