現象
次のような状況を考えます。
-
Microsoft SQL Server でのsqlos.wait_infoイベントをあるXEventセッションを作成するとします。
-
このセッションでは、次のパターンでは、フィルター (述語) を定義します。
[sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%<Query Text>')
このシナリオでは、以下の問題のいずれかが発生する可能性があります。
-
SQL Server は、アクセス違反やスタック オーバーフローのメモリ ダンプ ファイルを生成します。
-
SQL Server には、解放されていないスケジューラ メモリ ダンプ ファイルが生成されます。
-
クエリは、結果を戻すことはしませんか、キャンセルまたはクエリを強制終了することはできません。
-
SQL Server には、例外を参照し、 SQL Server エラー ログにスタック オーバーフローのメモリ ダンプのファイルが生成される、次のメッセージのいずれかのようなエラー メッセージが生成されます。
< 時刻スタンプ > spid52 *
< 時刻スタンプ > spid52 * 開始スタック ダンプ。
< 時刻スタンプ > spid52 * < 時刻スタンプ > spid 52
< 時刻スタンプ > spid52 *
< 時刻スタンプ > spid52 *
< 時刻スタンプ > spid52 * 例外アドレス = 00007FFA414ED763 Module(sqlmin+000000000000D763)
< 時刻スタンプ > spid52 * 例外コード = c0000005 参照
< 時刻スタンプ > spid52 * アクセス違反が発生した書き込みアドレス 0000000000000008スタックが不足しているのため、スタック ダンプ ファイルを作成するのには、< 時刻スタンプ > spid55 できません (場所: scheduler.cpp:2090
式:! -> WorkerQueueElem::IsInList () の pWorker
SPID: 55
プロセス ID: 8548)
spid55 の < 時刻スタンプ > スタック署名ダンプは、0x0000000000000000 です。
spid55 の < 時刻スタンプ > < 時刻スタンプ > スタック オーバーフローをダンプ不可能 - 0x00007FFA4EF85F35 での例外 c00000fd EXCEPTION_STACK_OVERFLOW
< 時刻スタンプ > spid55 SqlDumpExceptionHandler: アドレス = 0x00007FFA4EF85F35 例外コード = c00000fd
spid55 Rax の < 時刻スタンプ > = 000000000000044 c Rbx 0000000002612320 Rcx を = = 0000000002612050 Rdx = 00000000662baf59
< 時刻スタンプ > spid55 Rsi Rdi の 000000004b04f848 の = = 000000004b000270 Rip 000000004ef85f35 Rsp を = = 0000000002611fd0
< 時刻スタンプ > spid55 Rbp 0000000000000000 立てるの = = 0000000000010202
< 時刻スタンプ > spid55 cs = 0000000000000033 の 000000000000002b ds を = = 000000000000002b
es=000000000000002b fs=0000000000000053 gs=000000000000002b
< 時刻スタンプ > spid55 1: フレーム 0000000000000000 リターン アドレス 00007FFA4EF85F35
回避策
この問題を回避するには、 wait_infoイベントとの複雑なフィルター条件を使用しないようにします。Wait_infoイベントはリソース集中型であり、大幅にクエリの速度が低下するためです。
このような状況で <テキスト> を追跡する場合は、フィルター述語のパターンを次のように変更します。
([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[sql_text],N'<Query Text>').