SQLServerの利用率モニターにて「PILEGATHEREEMPTIVE_OS_WRITEFR」で長時間の待ちが発生している
自宅サーバーのログシステムが、DBに書き込まれて行かないので調査したことろ以下の利用率モニターの「現在の待機の種類」にて「PILEGATHEREEMPTIVE_OS_WRITEFR」が発生していた。
SQLServerの利用率モニターが以下。
利用率モニターの「現在の待機の種類」は以下の内容を示すらしい。
sys.dm_os_waiting_tasks (Transact-SQL)
イベントログを調査すると、
ログの名前: Application
ソース: MSSQLSERVER
日付: 2017/08/08 0:15:32
イベント ID: 5144
タスクのカテゴリ: サーバー
レベル: 情報
キーワード: クラシック
ユーザー: NETWORK SERVICE
コンピューター: XXXX
説明:
データベース 'XXXXDataBase' のファイル 'XXXXDataBase' の自動拡張をユーザーが取り消したか、30006 ミリ秒でタイムアウトしました。ALTER DATABASE を使用して、このファイルの FILEGROWTH の値の設定を小さくするか、または新しいファイル サイズを明示的に設定してください。
と残っていた。
ちょっと前に自動拡張のサイズを大きくしたことを思い出した。
上記の待機の種類について検索すると以下のようなのが見つかった。
これはDB復元時だが、ファイルの初期化とあるので拡張した際に初期化するのに時間がかかり、タイムアウトしていると考えた。
対策としてはInstat File Initialization(ファイルの瞬時初期化)を有効にしてやればいいそうだが、SQLServerの再起動が必要みたいなので、仮対策として自動拡張のサイズを小さくした。
一応、これで問題は解決した。
なお、Instat File Initialization(ファイルの瞬時初期化)を有効化は以下のようにできるそうだ。