弊社の基幹システムDBは、数段のバックアップ手法で信頼性を確保しています。
①毎日夜中にストレージ内でD2Dのコピー
NEC製ストレージの仕組みです。よくわかってません。
②①のコピー先ディスクをLTOにバックアップ
コピー先ディスクをバックアップサーバにマウントしてARCserve
③①、②の導入前からSQLServerのメンテナンスプランで稼働しているバックアップ
週次でフル、平日の朝バッチ後と昼休みに差分でバックアップ
ただ、現場の古株に聞いたところ③の作業は誰もやった事がないそうで。
DB自体のロールフォワード回復は一般的な手順で当然出来ますが、
業務の回復手段が確立されていません。
というか、システム処理が個別処理単位でコミットされてしまうので、
トランザクション全体の整合性が取れない(そういう思想の)作りになってます。
なので、③のバックアップは意味をなしていないのだし不要ではないか、
と何度も進言しているのですが、直近まで回復したい病の上司には通じず。
あろうことか、使いみちのなさそうなバックアップの処理が容量不足でコケて、
対策までさせられる事になりました。
というのが、タイトルに書いたバックアップファイル圧縮の前置きになります。
やってみたらめっちゃくちゃ簡単で影響も少ない作業でした。
■バックアップ圧縮について
docs.microsoft.comにて詳細が解説されています。
- デバイスI/O削減により高速化
- 1つのバックアップセット内に圧縮・非圧縮のデータ共存不可
- 設定の有効範囲には「バックアップ処理単位」と「サーバー全体」の二種類
- 規定ではサーバー全体の設定無効(構成オプション:backup compression default)
- バックアップ処理単位の設定はサーバー全体設定より優先
といった特徴があるとの事でした。
■テスト
まずは普通にバックアップ
1.適当にメンテナンスプラン(全DBフル)を作成
3枚めにある「バックアップの圧縮の設定」、ここではデフォルトのままです。
2.「規定のサーバー設定」の内容確認
「バックアップを圧縮する」のチェックは外れています。
3.バックアップ実行
作成したメンテナンスプランを右クリックして「実行」
4.結果確認
ファイルサイズと実行時間ですが、時間短縮は見えそうにないですね。。。
■バックアップ圧縮の設定手順
パターンA:メンテナンスプランの個別設定
1.メンテナンスプランのオプションタブから下記を設定
これだけです。
2.結果確認
ファイルサイズが約1/6、実行時間は半分(4秒減)でした。
ちなみに実行時間は、メンテナンスプランの履歴を参照しています。
パターンB:サーバーレベル構成オプションでの設定
1.メンテナンスプランのバックアップ設定を「サーバーの規定」に戻しておきます
2.サーバーのプロパティから圧縮にチェックしてOKをクリック
※以後サーバープロパティの全般タブに以下のメッセージが表示されるようになります。
SQLServerのサービス再起動後も消えませんでした。
3.結果確認
時間、サイズともパターンAと同様です。
■結論
設定一つ触るだけで簡単にバックアップファイルが圧縮出来ました。
バックアップ容量に悩んでいるなら活用しない手はないと思います。
弊社の本番サーバーには既に反映済なのですが、
バックアップファイル240GBが140GBまで減りました。
バックアップ領域が溢れて処理がコケるので、
この240GBを退避する作業を、毎週人手でやってました。。。