web-dev-qa-db-ja.com

差分バックアップ保守計画では圧縮設定は効果的ではありませんか?

SQL Serverのメンテナンスプラン機能を使用して、データベースのバックアップ(完全、差分、トランザクションログ)を取得しています。

バックアップの作成中に、バックアップファイルを圧縮するために圧縮オプションを選択し、「バックアップ圧縮のデフォルト」も有効にしました。

完全バックアップの保守計画では、バックアップファイルを圧縮しています。ファイルサイズはデータベースサイズの4倍です。しかし、差分バックアップに関しては、圧縮設定が機能していないと思います。

今日のバックアップ差分ファイルを観察しました。昨日、データベースの4つのテーブルにそれぞれ10 GBのデータが入力されたため、差分バックアップファイルのサイズは40 GBを超えました。新しいデータベースであり、その日にメンテナンスアクティビティが実行されなかったため、これらの変更が唯一の変更だったと確信しています。

.ldfバックアップが実行された日にファイルサイズが500 GBに増加しました。これにより、大きなサイズで問題が発生する可能性がありますが、データベースサイズ(.mdf)は50GB未満です。

詳細については、下の画像をご覧ください。

enter image description here

差分バックアップでは圧縮が機能しないことを確認したいのですが、それ以外に何か見逃していることがありますか?

それが機能しない場合は、Paul Randalの データベースパーセントの変更 スクリプトに基づいて、完全バックアップまたは差分バックアップをとることができます。

バージョン

select @@version;
Microsoft SQL Server 2012 (SP1) - 11.0.3156.0 (X64) 
    May  4 2015 18:48:09 
    Copyright (c) Microsoft Corporation
    Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)

サイズ情報

select type, 
       backup_size,
       compressed_backup_size
from msdb..backupset
where backup_start_date >= '20170927' 
and database_name = 'yourDB'
type    backup_size      compressed_backup_size
I       213,473,351,680  42,147,293,093
2

コミュニティwikiの回答

圧縮の確認

バックアップが圧縮されているかどうかを確認できます。 SQL Serverバックアップが圧縮されているかどうかはどうすればわかりますか? にはいくつかの方法があります。

backupsetmsdbテーブルのcompressed_backup_sizebackup_size columnの値を確認することもできます。例えば:

SELECT
    database_name,
    type,
    PctCompression =
        CONVERT(NUMERIC(20,2),100 - (compressed_backup_size / backup_size) * 100)
FROM msdb.dbo.backupset
WHERE ...

あなたの質問の更新は、差分バックアップが実際に圧縮されたことを示しています。

予想よりも大きいバックアップ

その10 GBのデータは多くのページに分散する可能性があり、それらのページの合計は、挿入した10 GBよりもはるかに多くなる可能性があります(特に、クラスター化インデックスの選択が適切でない場合)。また、差分バックアップはextentレベルで動作するため、8ページのエクステント内のページに変更を加えると、エクステント全体がバックアップされます。

ログのバックアップ後にlog_reuse_wait_descを確認するか、dbcc opentranを使用してください。昨日から開いているトランザクションがある場合、含まれているアクティブログのため、完全バックアップと差分バックアップは大きくなります。

現在、開いているトランザクションはない可能性がありますが、差分バックアップ時に実行時間の長いトランザクションがアクティブだった場合、バックアップファイルのサイズは予想より大きくなります。

ログが500GBに増えた(そして定期的にログバックアップを取っている)という事実は、何か(おそらく開いているトランザクション)が原因でログを長期間クリアできなかったことを意味します。そのトランザクションに関連するすべてのログが差分バックアップに追加されました。

そうであるかどうかを確認したい場合は、データベースを別の(新しい)データベース(おそらく別のサーバー)に復元してみてください。このようにして、2つのことを行います。

  1. 完全バックアップと差分バックアップを確認します。そして
  2. 差分の復元にかか​​る時間を確認できます。

差分に長い時間がかかる場合(3時間以上など)は、長時間実行されているオープントランザクションの影響を元に戻すのに多くの時間が費やされたことを示しています。

1
user126897