現象
Microsoft SQL Server の起動時に、データベースの回復が完了してクライアント接続が有効になった直後に、次のいずれかの現象が発生します。
現象 1
SQL Server エラーログに次のようなエラーメッセージとアサーションが表示されます。
2014-12-13 08:03:34.85 spid24s Using 'dbghelp.dll' version '4.0.5'2014-12-13 08:03:34.85 spid24s **Dump thread - spid = 0, EC = 0x0000000082274B202014-12-13 08:03:34.85 spid24s ***Stack Dump being sent to C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0001.txt2014-12-13 08:03:34.85 spid24s * *******************************************************************************2014-12-13 08:03:34.85 spid24s *2014-12-13 08:03:34.85 spid24s * BEGIN STACK DUMP:2014-12-13 08:03:34.85 spid24s * 12/13/14 08:03:34 spid 242014-12-13 08:03:34.85 spid24s *2014-12-13 08:03:34.85 spid24s * Location: ghost.cpp:17422014-12-13 08:03:34.85 spid24s * Expression: tcln1 != NULL2014-12-13 08:03:34.85 spid24s * SPID: 242014-12-13 08:03:34.85 spid24s * Process ID: 354442014-12-13 08:03:34.85 spid24s *2014-12-13 08:03:35.47 spid24s Error: 17066, Severity: 16, State: 1.2014-12-13 08:03:35.47 spid24s SQL Server Assertion: File: <ghost.cpp>, line=1742 Failed Assertion = 'tcln1 != NULL'. このエラーは、タイミングに関連している可能性があります。 ステートメントの再実行後もエラーが発生する場合は、DBCC CHECKDB を使用してデータベースの構造の整合性を確認するか、またはサーバーを再起動して、メモリ内のデータ構造体が破損していないことを確認します。
現象 2
SQL Server エラーログに次のようなエラーメッセージと例外が表示されます。
2014-12-13 12:38: 30.25 spid51 ' ' バージョン ' 4.0.5 ' 2014-12-13 12:38: 30.25 spid51 * * * スタックダンプは、SQL Server \ MSSQL10_50 に送信されました。 SQL2008R2\MSSQL\LOG\SQLDump0003.txt2014-12-13 12:38: 30.25 spid51 SqlDumpExceptionHandler:51 生成された致命的な例外 c0000005 EXCEPTION_ACCESS_VIOLATION。 SQL Server is terminating this process.2014-12-13 12:38:30.25 spid51 * *******************************************************************************2014-12-13 12:38:30.25 spid51 *2014-12-13 12:38:30.25 spid51 * BEGIN STACK DUMP:2014-12-13 12:38:30.25 spid51 * 12/13/14 12:38:30 spid 512014-12-13 12:38:30.25 spid51 *2014-12-13 12:38:30.25 spid51 *2014-12-13 12:38:30.25 spid51 * Exception Address = 000000000030D47C Module(sqlservr+00000000000FD47C)2014-12-13 12:38:30.25 spid51 * Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATION2014-12-13 12:38:30.25 spid51 * Access Violation occurred reading address FFFFFFFFFFFFFFFF2014-12-13 12:38:30.25 spid51 * Input Buffer 54 bytes -2014-12-13 12:38:30.25 spid51 * exec usp_select12014-12-13 12:38:30.77 Server Error: 17310, Severity: 20, State: 1.2014-12-13 12:38:30.77 Server A user request from the session with SPID 51 generated a fatal exception. SQL Server がこのセッションを終了しています。 ログディレクトリで生成されたダンプを使用して、製品サポートサービスに連絡します。アクセス違反には、次のようなコールスタックがあります。 sqlservr.exe!TaskGhostCleanup:: IsHashed + 0x8dsqlservr!TaskGhostCleanup:: エンキュー + 0x32sqlservr!IndexRowScanner:: MoveToRowOnNextPage + 0x9csqlservr!IndexDataSetSession:: GetNextRowValuesInternal + 0x11cb
現象3
上記の症状のセクションで説明したメッセージが表示されると、SQL Server エラーログに次のメッセージが表示されます。
2014-12-13 08:04: 53.37 Server Process 0:0:0 (0x23c8) ワーカー0x000000002880C1A0 は、Scheduler 23 では生成されません。 スレッドの作成時間: 13062953007877。 おおよそのスレッド CPU 使用率: カーネル0ミリ秒、ユーザー0ミリ秒。 プロセスの使用率は0%。 システムアイドル88%。 間隔: 70013 0x000000002A8D21A0 08:04: 53.37 Server Process 0:0:0 (0x71d8) ワーカーは、スケジューラ30では生成されないように見えます。 スレッドの作成時間: 13062953007891。 おおよそのスレッド CPU 使用率: カーネル0ミリ秒、ユーザー0ミリ秒。 プロセスの使用率は0%。 システムアイドル88%。 Interval: 70013 ms.2014-12-13 08:04:53.38 Server ***Unable to get thread context for spid 02014-12-13 08:04:53.38 Server * *******************************************************************************2014-12-13 08:04:53.38 Server *2014-12-13 08:04:53.38 Server * BEGIN STACK DUMP:2014-12-13 08:04:53.38 Server * 12/13/14 08:04:53 spid 294882014-12-13 08:04:53.38 Server *2014-12-13 08:04:53.38 Server * Non-yielding Scheduler2014-12-13 08:04:53.38 Server *2014-12-13 08:04:53.38 Server * *******************************************************************************2014-12-13 08:04:53.38 Server Stack Signature for the dump is 0x00000000000003412014-12-13 08:04:55.43 Server External dump process return code 0x20000001. 外部ダンププロセスでエラーが返されませんでした。 2014 ~ 12-13 08:04: 55.43 Server Process 0:0:0 (0x9358) ワーカー0x0000000081CE41A0 はスケジューラ4では発生しません。 スレッドの作成時間: 13062953009701。 おおよそのスレッド CPU 使用: カーネル0ミリ秒、ユーザー15ミリ秒。 プロセスの使用率は0%。 システムアイドル88%。 間隔: 70011 ミリ秒。
この時点で、SQL Server がユーザー要求に応答しない可能性があります。 この場合は、サービスを再起動して問題を解決する必要があります。
原因
この問題は、このプロセスが完全に初期化される前に、ユーザーがゴーストクリーンアップキューを使用しようとしたために発生します。
解決方法
Service pack の情報
この問題を解決するには、SQL Server 2014 の Service Pack 1 を入手してください。
SQL Server 2014 Service Pack 1 (SP1) の詳細については、「 Sql server 2014 Service pack 1 で修正されたバグ」を参照してください。
SQL Server 2008 SP4 の修正プログラム
この問題を解決するには、KB 3034373 を適用し ます。オンデマンドの修正プログラムパッケージは、SQL Server 2008 SP4 で利用できます。
SQL Server 2008 R2 SP3 の修正プログラム
この問題を解決するには、KB 3033860 を適用します 。オンデマンドのホットフィックス更新パッケージは、SQL Server 2008 R2 SP3 で利用できます。
累積的な更新プログラムの情報
機能の改善は、次の SQL Server の累積的な更新プログラムで導入されました。
SQL Server 2014 の累積更新プログラム6 /en-us/help/3031047
SQL Server 2012 SP2 の累積更新プログラム4 /en-us/help/3007556
SQL Server 2012 SP1 の累積更新プログラム14 /en-us/help/3023636
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
回避策
この問題を回避するには、次の手順を実行します。
-
T669をスタートアップパラメーターとして設定します。 このトレースフラグは、ユーザーがゴーストクリーンアッププロセスへの要求をキューに送信できないようにします。
-
Sql Server エージェントの通知をセットアップして、SQL メッセージ3408でジョブをトリガーします。 たとえば、次の通知を設定します。
回復が完了しました。 これは情報メッセージだけです。 ユーザー操作は必要ありません。
-
このジョブでは、TSQL スクリプトを実行して 5 ~ 10 分待ってから、 DBCC TRACEOFF (669,-1) コマンドを実行します。
この手順では、SQL Server の起動時にのみこのトレースフラグがアクティブになるようにします。 このトレースフラグを使うと、バックグラウンドのゴーストクリーンアップ処理の通常の機能には影響しません。
状態
Microsoft は、これが SQL Server に関する問題であり、現在この問題の解決について調査中であることを確認しています。 このサポート技術情報の記事には、利用可能になったときに追加情報が記載されています。
参照情報
ストレージエンジン内部: 詳細 な警告のSP_ADD_ALERT (transact-sql)DBCC traceoff (Transact-sql)トレースフラグデータベースエンジンの起動オプション