SQLデータベース数が増加した場合に、ドライブのシャドウコピー及びバックアップが失敗する
エラー内容
ソース SQLVDI イベントID 1 SQLVDI: Loc=TriggerAbort. Desc=invoked. ErrorCode=(0). Process=15380. Thread=11968. Server. Instance=MSSQLSERVER. VD=Global\{265F0E25-B544-420B-8036-63DF3D35BFF6}72_SQLVDIMemoryName_0.
ソース MSSQLSERVER イベントID 3041 BACKUP で、コマンド BACKUP DATABASE <データベース名> を完了できませんでした。詳細メッセージについては、バックアップ アプリケーション ログを確認してください。
ソース SQLWRITER イベントID 24583 Sqllib エラー: ICommandText::Execute を呼び出し中に OLEDB エラーが発生しました。hr = 0x80040e14。 SQLSTATE: 42000, Native Error: 3013 Error state: 1, Severity: 16 Source: Microsoft SQL Server Native Client 10.0 Error message: BACKUP DATABASE が異常終了しています。 SQLSTATE: 42000, Native Error: 3224 Error state: 1, Severity: 16 Source: Microsoft SQL Server Native Client 10.0 Error message: ワーカー スレッドを作成できません。
ソース MSSQLSERVER イベントID 18210 BackupVirtualDeviceFile::PrepareToFreeze: バックアップ デバイス '{265F0E25-B544-420B-8036-63DF3D35BFF6}19' で エラーが発生しました。オペレーティング システム エラー 995(スレッドの終了またはアプリケーションの要求によって、I/O 処理は中止されました。)。
ソース Backup イベントID 521 バックアップ対象のボリュームのシャドウ コピーを作成するボリューム シャドウ コピー サービスの操作が、次のエラー コード '2155348129' により失敗したため、'‎2013‎-‎01‎-‎23T03:00:51.486000000Z' に開始したバックアップ操作は失敗しました。イベントの詳細で解決策を確認し、問題の解決後にバックアップ操作を再実行してください。
原因
- SQL VSS Writerが同時に多数のデータベースを処理できないため。
- おおよそ、600データベース以上になるとエラーになる模様。
- ワーカースレッドの最大数を増やすことにより、回避可能。
- シャドウコピー起動時に正常にバックアップが作成されたDB数とエラーになったDB数
正常 イベントID 3041 385個 エラー イベントID 3421 457個
- コマンドプロンプトでvssadmin list writers を実行すると、SQL Server Writerがエラーになっていることが確認出来る。
インストールしたSQL Serverを確認
インストールしたドライブの下記ファイルを開く
C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ERRORLOG
2013-01-25 21:22:33.32 Server Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
64bitになっていることを確認。
64bit版Management Studio Expressを入手
http://www.microsoft.com/ja-jp/download/details.aspx?id=22985
SQLManagementStudio_x64_JPN.exe
SQL Server 2008 R2 - Management Studio Expressをインストール
- インストーラのダウンロード
http://www.microsoft.com/ja-jp/download/details.aspx?id=22985
※[既存のSQL Server 2008 R2インスタンスに機能を追加する]をクリックすると
インストーラ出来なくなるバグのため、選択しない。
誤って選択した場合は、インストーラを再起動する。
- [ライセンス条項に同意する。]をクリック
- [管理ツール - 基本]をクリック
max worker threadsの確認
- max worker threadsは、デフォルトでは 0 が設定されている。
- 0 に設定されている場合、max worker threadsがSQL Server のスケジューラー数に
応じて自動で設定される。
- Management Studio Expressを起動
- 下記クエリを実行し、現在のmax worker threadsを確認
SELECT max_workers_count FROM sys.dm_os_sys_info
実行した環境では、512になっていた。
max worker threadsを増やす
- Management Studio Expressでサーバ名を右クリックし、プロパティを実行
- プロセッサをクリック
- ワーカースレッドの最大数を 0 → 1024 に変更。
- 設定可能な最大値は、下記を参照。
- max worker threads オプション
- http://msdn.microsoft.com/ja-jp/library/ms187024(v=sql.90).aspx