web-dev-qa-db-ja.com

ログのサイズよりも大きいログの自動拡張が、どのように縮小するかを説明しません

ログファイルサイズが1 GBのデータベースがあります。 AutoGrowthのロギングを実装して、データベースが自動拡張するときの通知を最終的に設定しました。

私が経験しているのは、SQL Serverがログファイルの自動拡張があったと言っているのに、ログファイルのファイルサイズが実際に変更されていないということです。今年の初めからファイルのサイズを12GBに増やすのに十分な自動拡張がありますが、ファイルはまだ1GBしかありません。

誰がどのように/なぜこれが起こるのか知っていますか?

Microsoft SQL Server 2017(RTM-CU16)(KB4508218)-14.0.3223.3(X64)Jul 12 2019 17:43:08 Copyright(C)2017 Microsoft Corporation Enterprise Edition(64-bit)on Windows Server 2016 Standard 10.0(Build 14393 :)(ハイパーバイザー)

enter image description here

ログファイルの自動圧縮や手動圧縮は行われていません。

enter image description here

2
Todd Histed

私が考えることができる最も可能性の高い説明は次のとおりです。

  • データベースがバックアップまたはスナップショットから復元されました
  • モニタリングにより、縮小イベントが欠落しているか、バグが原因で成長イベントが重複しています
    • デフォルトのトレースイベント「Log File Auto Shrink」は、automaticの縮小のみをキャプチャします。誰かが_DBCC SHRINKFILE_を使用すると、それは_Audit DBCC Event_イベントとして表示されます。両方をキャプチャしていることを確認してください

復元が定期的に行われているかどうかを確認します(たとえば、これがテストデータベースまたはレポートデータベースの場合)。それ以外の場合は、モニタリングクエリのコードを確認し、イベントの欠落や重複がないことを確認する必要がある場合があります。

より多くの情報を収集するための1つの方法は、DBCC SQLPERF('LOGSPACE')を使用して、ログのサイズが常に変化しているかどうかを判断することです(これを示唆してくれた Paul Randal に感謝します)。これを既存の15分ごとのチェックに追加するには、出力を一時テーブルにダンプします(そして、そこからログテーブルに挿入できます)。

_CREATE TABLE #log_space
( 
    [DatabaseName] sysname NOT NULL,
    LogSizeMb float NOT NULL,
    LogSpaceUsedPct float NOT NULL,
    [Status] int NOT NULL
);

INSERT INTO #log_space
EXEC ('DBCC SQLPERF(LOGSPACE);');
_

これにより、ファイルが実際に大きくなるかどうかを追跡できます。そうであれば、その日のどの時点で再び縮小しているかがわかります。

3
Josh Darnell