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' により失敗したため、'&#8206;2013&#8206;-&#8206;01&#8206;-&#8206;23T03:00:51.486000000Z' に開始したバックアップ操作は失敗しました。イベントの詳細で解決策を確認し、問題の解決後にバックアップ操作を再実行してください。

原因

  • SQL VSS Writerが同時に多数のデータベースを処理できないため。
  • おおよそ、600データベース以上になるとエラーになる模様。
  • ワーカースレッドの最大数を増やすことにより、回避可能。
  • シャドウコピー起動時に正常にバックアップが作成されたDB数とエラーになったDB数
正常	イベントID 3041	385個
エラー	イベントID 3421	457個

インストールした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 に変更。
  • 設定可能な最大値は、下記を参照。

サービスを再起動

以上

※その後、バックアップエラーが再発。
 サーバを再起動していないためかもしれない。