トランザクションログVLFはパフォーマンスにとってどのくらい重要ですか?


12

データベースのパフォーマンスを考慮する場合、VLFはどれほど重要ですか?VLFの最適な状況とは何でしょうか?


さらに読書のために、で私の質問を参照してくださいdba.stackexchange.com/questions/25408/...
マックス・バーノン

クール-これはパフォーマンスのレポートに役立つことがわかります
-the_good_pony

1
:を参照してください@DBAWaffle SQL ServerののVLF、パート1での実験 > -グレン・ベリーからsqlskills.com/blogs/glenn/...
キンシャー

回答:


17

仮想ログファイルとは何ですか?

SQL Serverは、各データベースのトランザクションログファイルを「仮想ログファイル」(または略してVLF)と呼ばれる小さなチャンクに分割します。その主な機能は、ログバックアップでの切り捨てマーカーとしての機能です。つまり、SQL Serverは完全に空のVLFのみをクリア(および再利用可能にマーク)します。MSDNには、トランザクションログ-物理アーキテクチャに関する記事があります。

VLFの数を決定するものは何ですか?

ログファイルが(自動拡張または手動拡張を介して)大きくなるたびに、ログファイルの新しいセクションは、純粋に新しいセクションのサイズに基づいて、いくつかのVLFに分割されます(既存のトランザクションログはそのまま残されます)。そのため、小さな自動成長設定(つまり、デフォルトの10%自動成長)により、多数のVLFが作成されます。

多数のVLFの影響は何ですか?

多数のVLFが引き起こす主な問題は次のとおりです。

  • 回復が遅い(回復は、データベースの復元中に完了したトランザクションがデータページに書き込まれ、不完全なトランザクションがロールバックされるフェーズです)。
  • データベースミラーリング設定でのログリーダーのパフォーマンスが遅い。
  • データベーススナップショットの作成中のパフォーマンスの低下(DBCCバックグラウンドでデータベーススナップショットを使用してブロックせずに一貫性チェックを容易にするため、特定の機能も含まれることに注意してください)。

データベースにあるVLFの数を調べるにはどうすればよいですか?

DBCC LOGINFOデータベースのトランザクションログの各VLFに対して1行を返します。この質問には、サーバー上のすべてのデータベースに適用するための便利なスクリプトがいくつかあります。

VLFが多すぎますか?

それはあなたが自分でしなければならない判断の呼び出しです。私の個人的な経験則では、50未満はいじる価値がなく、100を超える(またはそれ以上)ので、自動成長の設定を修正し、(次のメンテナンスウィンドウで)ログを縮小および再作成することを心に留めます(以下を参照) 。

助けて!私には70億のVLFがあり、データベースの復旧には1日かかります。

短いアウトライン(Kimberly Trippのブログから):

  • データベースでアクティブな唯一の接続であることを確認してください(したがって、メンテナンスウィンドウでこれを行ってください)
  • トランザクションログをディスクにバックアップする(を使用BACKUP LOG
  • DBCC SHRINKFILEwith TRUNCATEONLYを実行して、ログファイルを可能な限り小さいサイズに縮小します。
  • 実行ALTER DATABASE [...] MODIFY FILE [...] SIZE=newsize**ワンステップであなたのトランザクションログのバックアップをリサイズします。

**注-非常に大きなログファイル(数十GB以上)がある場合、複数の手順でサイズを変更して、適切なサイズの適切な数のVLFを取得し、過度に「大量の」ログバックアップを回避することができます。VLFは切り捨ての単位であるため、Kimのブログで詳しく説明されているように、ログバックアップサイズも決定します。


おかげで、複数のVLFが、データが定期的に変更され、多数のコミットが行われる高OLTP環境でのパフォーマンスをより明らかに妨げると思いますか?
the_good_pony

多数のVLFは、上記で概説した状況(回復、スナップショット、ミラーリング)でのみ本当に注目に値します。OLTP環境ではパフォーマンスが多少低下する可能性がありますが、ごくわずかです。
サイモンRigharts

1
私にとって、20時間以上の回復は、低い(1,000未満)VLFカウントを維持することの重要性を私に確信させたものです。
マックスヴァーノン

@SimonRigharts私は興味があります。多数のVLFが通常のトランザクションパフォーマンスにまったく影響しますか?または、バックアップと復元のみに影響しますか?
クリスアルドリッチ

@ChrisAldrich トランザクションがVLF境界にまたがっている場合(ただし、聞いたことがない場合)、トランザクションにわずかなレベルのオーバーヘッドがあるかもしれませんが、質問で詳しく説明されているように、リカバリ、ミラーリング、またはスナップショット中に多数のVLFがあります。
サイモン・リガーツ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.