SQL Server仮想ログサイズ


8

私はやや偶発的なDBAで、データベース管理についてほとんど知らない人からいくつかのデータベースサーバー(2005年と2008年)を引き継いだ開発者であり、このテーマについてもっと学ぶことにあまり興味がなかったようです。

私は進むにつれて学んでいて、現在トランザクションログファイルを理解しようとしています。

すべてのデータベースは、単純な復旧モデルと自動圧縮で設定されています。自動圧縮を使用することは通常ひどい考えであることを理解しましたが、これはトランザクションログが制御不能に成長するのを防ぐために行われたことを理解しています。(自動圧縮は実際にログファイルまたはDBのみを圧縮しますか?)

SQL Server 2012についてこれが見つかり、2005と2008のどちらが正しいのか、そしてそれが何を意味するのかについて疑問に思っていました。 ..]仮想ログが70%になると、データベースエンジンはシンプルリカバリモデルで自動チェックポイントをトリガーします。」仮想ログのサイズはどこに指定されていますか?

すべてのデータベースで自動縮小を無効にしたいのですが、その前に、ログファイルがすぐに制御できなくなることがないことを知っておく必要があります。

どんな助けでも大歓迎です。


1
このrusanu.com/2012/07/27/how-to-shrink-the-sql-server-logを読んで、何が起こっているのかを明らかにしていないか確認してください。
Remus Rusanu 2012年

回答:


6

1つのトランザクションログファイルには物理的なサイズ(ディスク上に表示されるサイズ)があり、物理ファイル内で仮想ログファイル(VLF)と呼ばれる論理セクションに分割されます。

自動拡張と自動縮小はどちらも、物理トランザクションログファイルに対して機能します。

トランザクションログの切り捨て(「ログのクリア」とも呼ばれます)は、トランザクションログ(VLF)の論理セクションで動作し、物理ファイルのサイズには影響しません。この部分はしばしば混乱の対象になります。

大規模なトランザクションに対応するには、ログファイルを常に大きくする必要があります。自動圧縮をオフにすると、ログファイルのサイズが物理的に減少するのではなく、必要な最大サイズのままになります。

大きなトランザクションがない場合は、自動圧縮を無効にしても安全です。ログファイルは、データベースが存在していたFULL場合やBULK_LOGGED、トランザクションログのバックアップを作成していない場合に発生するような場合に限りなく大きくなりません。

この動作はSQL Server 2005以降でも同じです。


ありがとう、それは私が質問したときに探していたものです。Remusの以前の返信を読んだ後、私は同じ結論に達しました。
Petter Brodin、2012年

2

だから、ここに私がここで他の返信を読んで自分でいくつかの研究をした後に見つけたものがあります:

Q:「自動圧縮は実際にログファイルまたはDBのみを圧縮しますか?」A:私が理解していることから:はい、そうです。自動圧縮はデータベースレベルで設定され、すべてのファイルに影響します(データベースを右クリックした場合->プロパティ->ファイル、またはクエリ1を実行した場合)。ただし、自動拡張はファイルレベルごとに機能します。

Q:「仮想ログのサイズはどこに指定されていますか?」A:Jon Seigelの返信とRemusが投稿したリンクを参照してください。物理ログと論理ログのサイズを確認するには、クエリ2を使用します

1つの問題は、データベースでフルリカバリモードがアクティブ化され、サイズが大きくなり、その後リカバリモードがシンプルに変更された場合、VLFが自動拡張されるためチェックポイントがトリガーされないことです。クエリ3を実行して、これを解決しようとすることができます(ログファイルの先頭/末尾に関する潜在的な問題については、Remusの返信を参照してください)。

クエリ:

1)

SELECT name, physical_name AS current_file_location, DB_NAME(database_id) AS dbname
FROM sys.master_files
WHERE DB_NAME(database_id) = 'mydb'

2)

DECLARE @tmpt TABLE(
    dbname VARCHAR(255),
    logsize DECIMAL,
    logspaceused DECIMAL,
    stat INT
)

INSERT INTO @tmpt
    EXEC ('DBCC SQLPERF(LOGSPACE)')

SELECT * FROM @tmpt WHERE dbname LIKE 'mydb' ORDER BY logspaceused DESC

3)

checkpoint
DBCC SHRINKFILE('logfile_name')

2

質問で言及したように、SQL 2005および2008では、チェックポイントの後、トランザクションログファイルも切り捨てられます。

私の提案は、復旧モデルを完全に設定し、トランザクションログファイルからバックアップを取るジョブを作成することです。このジョブはデータベースでスケジュールすることができ、バックアップを取った後にトランザクションログを切り捨てます。自動的にログファイルが切り捨てられます。以下のリンクをご覧ください。

SQL Server 2005:http : //technet.microsoft.com/en-us/library/ms189085(v=sql.90).aspx

SQL Server 2008:http : //technet.microsoft.com/en-us/library/ms189085(v=sql.100).aspx


ええ、それは長い目で見れば私の計画ですが、今のところは自動圧縮を解除したいだけです。
Petter Brodin 2012年

変更は、完全復旧に変更したいが、実際にそれが必要かどうかを評価する前です。できる限り災害に近い状態に復元する必要がある場合は、そうします。最後の完全バックアップ(通常は毎晩)に戻っても問題ない場合は、SIMPLEリカバリーモードで問題なく機能します。
cfradenburg 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.