AlwaysOn可用性グループの使用中にトランザクションログを圧縮する


17

私たちは、使用しているAlwaysOn Availability Group2012年の正規完全データベースバックアップとトランザクションログのバックアップがセカンダリデータベース上で毎日行われているSQL Serverの機能を。

私は読んだことが、ここでのプライマリレプリカまたはセカンダリレプリカのいずれかにトランザクションログのバックアップを行うことは、再利用可能なよう両方のレプリカトランザクション・ログをマークします。とにかく、トランザクションログのバックアップサイズは大きく、縮小ファイルを使用して縮小できます。

ここに画像の説明を入力してください

データベースをローカルに復元し、縮小操作を実行しました。ログファイルのサイズは160 MBに縮小されました。

私の質問は、どのデータベースでトランザクションログファイル(プライマリ、セカンダリ、またはその両方)の縮小操作を実行する必要があるかということです。


過去数年間、ログファイルのバックアップは作成されていなかったため、非常に大きくなりました。実行するDBCC SQLPERF (LOGSPACE)0.06%、ファイルのみが使用されていることがわかります。このような巨大なサイズのログファイルを保持する意味はありません。で[sys].[database_files]、私はそのことを確認してくださいがmax_sizeに設定されている-1growthする65536ことは、それが得るより多くのスペースを必要とするとき、私は推測するようにします。とにかく、将来の成長を防ぐために、たとえば5%に縮小できます。私はそうすることは悪い考えではないという確認を見つけようとしています。


実際、(データベースとログファイルの)バックアップはセカンダリデータベースでのみ実行されるため、それらのデータベースでシュリンクファイルを実行する方が簡単ですが、プライマリログファイルのサイズも小さくなりますか?

回答:


21

AGでは、書き込みはプライマリでのみ発生します。縮小操作は書き込みです。したがって、プライマリで縮小を行う必要があります。縮小は期待したほど縮小しない可能性があることに注意してください。復元されたDBでのテストでは、おそらく単純な復旧モデルを活用していました。読むSQL Serverのログを縮小する方法詳細は。

160MBに縮小しないでください。ログが繰り返されないようにログが121Gbになった理由を判断します(疑いがある場合は、可能であれば確認してください)。ログを運用上のニーズに適したサイズに変更します。ログの増加は深刻な問題です。インスタントファイルの初期化を使用できず、ログが増加して0で初期化されている間、すべてのデータベースアクティビティがフリーズします。ユーザーとアプリは、それが発生したときにそれを嫌います。場合あなたが影響を理解し、ユーザーがOKをしている、あなたは縮小することができたら、少量の(160メガバイトはおそらく小さすぎるかの場合)、それが安定するまで、それが成長しましょう。


7

あなたが試すことができます:

  1. 可用性グループ内のすべてのサーバー上のデータベースは、同期状態である必要があります。
  2. 使用するページを縮小してからトランザクションログの先頭に移動します。
  3. ログの使用可能な空き領域は99%である場合がありますが、SQL Serverは未使用領域を解放できません。可用性グループの各サーバーを順番に再起動してください。
  4. MS SQL Serverが空き領域を解放する前に、トランザクションログを2回焼き付けて縮小する必要がある場合があります(ファイルの最後にある論理ログファイルが使用中のため、ログファイル(DB_Log)を縮小できません)。

このスクリプトを試してください:

    -現在のデータベースをジョブステップまたはスクリプト内に設定する
    -プライマリでのみ実行を確認
    if(SELECTロール
        FROM sys.dm_hadr_availability_replica_states AS a
        sys.availability_replicas AS bに参加する
            ON b.replica_id = a.replica_id
    WHERE b.replica_server_name = @@ SERVERNAME)= 1
    ベギン
        -[test_db]を使用します-MS SQL 2014では機能しません。この行をコメントして、ジョブステップまたはスクリプト内で現在のデータベースを設定してください
        -1)Bakup Trn
        バックアップログ[test_db] TO DISK = N'D:\ MSSQL \ Backup \ test_db.trn 'WITH NOFORMAT、INIT、NAME = N' Trn Backup '、SKIP、NOREWIND、NOUNLOAD、COMPRESSION、STATS = 10
        -2)使用済みページを移動する
        DBCC SHRINKFILE(N'test_db_log '、3000、NOTRUNCATE)
        -3)SHRINKFILEログ
        DBCC SHRINKFILE(N'test_db_log '、3000)
    終わり
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.