web-dev-qa-db-ja.com

AlwaysOn可用性グループの使用中のトランザクションログのメンテナンス

SQL Server 2012のHADR(AlwaysOn可用性グループ)機能を使用しています。サーバーとAGの構成は次のとおりです。

  1. SQL12_SRV1-> AG1(PRIMARY)-SYNC->> DBTest

  2. SQL12_SRV2-> AG1(SECONDARY)->> DBTest-ASYNC

DBTestデータベースは増大しており(200GB)、毎日ほぼ毎月増大しており、同じトランザクションログファイルもデータに応じて増大します。

ログのバックアップを取る適切な方法を使用してトランザクションログファイルのサイズを最小限に抑える方法ログのバックアップを取る必要があるレプリカ。

前もって感謝します。

8
user25184

どちらのレプリカからでもトランザクションログをバックアップできます。プライマリレプリカまたはセカンダリレプリカのいずれかでトランザクションログバックアップを実行すると、両方のレプリカのトランザクションログが再利用可能としてマークされます(アクティブなトランザクションなどの他のストッパーがない場合)。

テストを行うには、非運用環境で、運用システムと同じように可用性グループをセットアップします(セカンダリレプリカへの非同期コミット)。

私のテスト環境にはテストデータベースTestBackupDatabaseがあり、ログに記録されたトランザクションでダミーテーブルを介して肥大化しました。

_use TestBackupDatabase;
go

create table dbo.TestTable
(
    id int identity(1, 1) not null,
    some_int int not null
        default 1
);
go

insert into dbo.TestTable
default values;
go 1000
_

プライマリでトランザクションログバックアップを実行すると、DBCC SQLPERF(LOGSPACE)を使用して、両方のトランザクションログ(プライマリとセカンダリ)で、ログの切り捨てが原因で使用されているスペースが減少したことがわかります。プライマリでの同じテストでトランザクションログを膨らませます。

_insert into dbo.TestTable
default values;
go 1000
_

次に、セカンダリ非同期レプリカでトランザクションログバックアップを実行します。各レプリカでDBCC SQLPERF(LOGSPACE)を再度実行すると、トランザクションログの再利用という同じ動作が見られます。

BOLリファレンス: アクティブなセカンダリ:セカンダリレプリカのバックアップ(AlwaysOn可用性グループ)

10
Thomas Stringer

AlwaysOn可用性グループを使用する場合、適切なバックアップを取っても、ログファイルが大きくなり、ログドライブが時間の経過とともにいっぱいになる可能性があります。適切な(最小化された)ログファイルサイズを維持するために、次の手法を使用できます。

  1. alwaysOn構成で、バックアップ優先順位オプションをプライマリレプリカ/サーバーに変更します。
  2. データベースはデフォルトで完全復旧モードになっているため、少なくとも1つの完全バックアップを取り、1トランザクションログバックアップを取ります。
  3. プライマリレプリカ上のすべてのデータベースのログファイルを圧縮します。これにより、すべての可用性レプリカの空のログドライブが切り捨てられます。
  4. 最後に、定期的に適切なバックアップを取るジョブをスケジュールします。これにより、ログファイルを適切なサイズに保つことができます。

これが役に立てば幸いです!

可用性グループでは、いずれかのレプリカでバックアップ、t-logバックアップを実行でき、すべてのレプリカに登録されます。したがって、質問に対して、どちらかのサーバーでt-logバックアップを作成すると、両方のレプリカに登録され、両方のレプリカでt-logを再利用できるようになります。トランザクションログファイルのサイズを最小限に抑えるために、ワークロードに応じてt-logバックアップを頻繁に実行します。 1時間ごとのt-logバックアップが機能しない(スペースがいっぱいになる)場合は、明らかにより頻繁に実行する必要があります。

0
Sajid