Dela via


Åtkomstöverträdelser och minnesdumpfiler när du använder XEvent-session med sqlos.wait_info händelse i SQL Server

Den här artikeln hjälper dig att lösa problemet som uppstår när du använder en XEvent-session som har en sqlos.wait_info händelse i SQL Server.

Ursprunglig produktversion: SQL Server
Ursprungligt KB-nummer: 4033835

Symptom

Föreställ dig följande scenario:

  • Du skapar en XEvent-session som har en sqlos.wait_info händelse i Microsoft SQL Server.

  • I den här sessionen definierar du ett filter (predikat) i följande mönster:

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

I det här scenariot kan du uppleva något av följande problem:

  • SQL Server genererar åtkomstöverträdelser eller en minnesdumpfil för stackspill.

  • SQL Server genererar en minnesdumpfil som inte ger resultat.

  • Frågor returnerar inte resultat eller så kan du inte avbryta eller avsluta en fråga.

  • När SQL Server skapar en EXCEPTION_ACCESS_VIOLATION minnesdumpfil för undantag och stackspill i SQL Server-felloggen genereras felmeddelanden som liknar något av följande meddelanden:

    <Tidsstämpel> spid52 *
    <Tidsstämpel> spid52 * BEGIN STACK DUMP:
    <Tidsstämpel> spid52 *<Tidsstämpel> spid 52
    <Tidsstämpel> spid52 *
    <Tidsstämpel> spid52 *
    <Tidsstämpel> spid52 * Undantagsadress = 00007FFA414ED763 Module(sqlmin+000000000000D763)
    <Tidsstämpel> spid52 * Undantagskod = c0000005 EXCEPTION_ACCESS_VIOLATION
    <Tidsstämpel> spid52 * Åtkomstöverträdelse inträffade skrivadress 0000000000000008
    <Tidsstämpel> spid55 Det går inte att skapa stackdumpfilen på grund av stackbrist (plats: scheduler.cpp:2090
    Uttryck: !pWorker-WorkerQueueElem>::IsInList ()
    SPID: 55
    Process-ID: 8548)
    <Tidsstämpel> spid55 Stack Signature för dumpen är 0x0000000000000000
    <Tidsstämpel> spid55 <Time Stamp> Stack Overflow Dump inte möjligt - Undantag c00000fd EXCEPTION_STACK_OVERFLOW på 0x00007FFA4EF85F35
    <Tidsstämpel> spid55 SqlDumpExceptionHandler: Address=0x00007FFA4EF85F35 Exception Code = c00000fd
    <Tidsstämpel> spid55 Rax=000000000000044c Rbx=0000000002612320 Rcx=0000000002612050 Rdx=00000000662baf59
    <Tidsstämpel> spid55 Rsi=000000004b04f848 Rdi=000000004b0000270 Rip=00000004ef85f35 Rsp=0000000002611fd0
    <Tidsstämpel> spid55 Rbp=0000000000000000 EFlags=0000000000010202
    <Tidsstämpel> spid55 cs=0000000000000033 ss=000000000000002b ds=000000000000002b
    es=000000000000002b fs=0000000000000053 gs=000000000000002b
    <Tidsstämpel> spid55 1: Bildruta 00000000000000 Returadress 00007FFA4EF85F35

Lösning

Undvik att använda komplexa filtervillkor tillsammans med händelsen för att undvika det wait_info här problemet. Det beror på att händelsen wait_info är resursintensiv och kan göra en fråga betydligt långsammare.

Om du vill spåra <Query Text> i den här situationen ändrar du mönstret Filterpredicate till följande:

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