トランザクション ログ ファイルのサイズの管理Manage the size of the transaction log file

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) 適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions)

このトピックでは、SQL ServerSQL Server のトランザクション ログ サイズの監視、トランザクション ログの圧縮、トランザクション ログ ファイルの追加と拡大、tempdb トランザクション ログ増加率の最適化、トランザクション ログ ファイルのサイズ拡大の管理の方法について説明します。This topic covers how to monitor SQL ServerSQL Server transaction log size, shrink the transaction log, add to or enlarge a transaction log file, optimize the tempdb transaction log growth rate, and control the growth of a transaction log file.

ログ領域の使用量の監視Monitor log space use

sys.dm_db_log_space_usage を利用し、ログ領域の使用量を監視します。Monitor log space use by using sys.dm_db_log_space_usage. この DMV は、現在使用されているログ領域の量に関する情報を返し、いつトランザクション ログを切り捨てる必要があるかを示します。This DMV returns information about the amount of log space currently used, and indicates when the transaction log needs truncation.

ログ ファイルの現在のサイズ、最大サイズ、およびファイルの自動拡張オプションについては、sys.database_files にある、そのログ ファイルに関する sizemax_sizegrowth の各列も使用できます。For information about the current log file size, its maximum size, and the autogrow option for the file, you can also use the size, max_size, and growth columns for that log file in sys.database_files.

重要

ログ ディスクの過負荷を避けてください。Avoid overloading the log disk. ログ ストレージがトランザクション負荷の IOPS 要件と短い待ち時間要件に対応できることを確認してください。Ensure the log storage can withstand the IOPS and low latency requirements for your transactional load.

ログ ファイルのサイズを圧縮するShrink log file size

物理ログ ファイルの物理サイズを削減するには、ログ ファイルを圧縮する必要があります。To reduce the physical size of a physical log file, you must shrink the log file. トランザクション ログ ファイルに未使用領域が含まれていることがわかっている場合にはこの方法が有効です。This is useful when you know that a transaction log file contains unused space. ログ ファイルの圧縮を実行できるのは、データベースがオンラインで、1 つ以上の仮想ログ ファイル (VLF) が解放されている間だけです。You can shrink a log file only while the database is online, and at least one virtual log file (VLF) is free. 場合によっては、次のログの切り捨てまでログを圧縮できないことがあります。In some cases, shrinking the log may not be possible until after the next log truncation.

注意

実行時間の長いトランザクションなど、長期間にわたって VLF がアクティブなままになる要因があると、ログの圧縮が制限されたり、ログがまったく圧縮できないことがあります。Factors such as a long-running transaction, that keep VLFs active for an extended period, can restrict log shrinkage or even prevent the log from shrinking at all. 詳細については、「ログの切り捨てが遅れる原因となる要因」を参照してください。For information, see Factors that can delay log truncation.

ログ ファイルを圧縮すると、論理ログのどの部分も保持しない 1 つまたは複数の VLF (つまり、非アクティブな VLF) が削除されます。Shrinking a log file removes one or more VLFs that hold no part of the logical log (that is, inactive VLFs). トランザクション ログ ファイルを圧縮すると、ログ ファイルが目的のサイズにできるだけ近いサイズに縮小されるように、非アクティブな VLF がログ ファイルの末尾から削除されます。When a transaction log file is shrunk, inactive VLFs are removed from the end of the log file to reduce the log to approximately the target size.

重要

トランザクション ログを圧縮する前に、ログの切り捨てが遅れる原因となる要因に留意してください。Before shrinking the transaction log, keep in mind Factors that can delay log truncation. ログの圧縮後、ストレージ領域が再び必要になると、トランザクション ログが再び増え、その分のパフォーマンスのオーバーヘッドが発生します。If the storage space is required again after a log shrink, the transaction log will grow again and by doing that, introduce performance overhead during log growth operations. 詳細については、このトピックの「推奨事項」を参照してください。For more information, see the Recommendations in this topic.

データベース ファイルを圧縮せずにログ ファイルを圧縮するShrink a log file (without shrinking database files)

ログ ファイルの圧縮イベントを監視するMonitor log-file shrink events

ログ領域の監視Monitor log space

ログ ファイルの追加または拡大Add or enlarge a log file

既存のログ ファイルを拡大するか (ディスク領域が十分にある場合)、通常、別のディスク上にあるデータベースにログ ファイルを追加することによって、領域を確保することができます。You can gain space by enlarging the existing log file (if disk space permits) or by adding a log file to the database, typically on a different disk. ログ領域が不足し、さらにログ ファイルが保存されているボリュームでディスク容量が不足しない限り、トランザクション ログ ファイルは 1 つで十分です。One transaction log file is sufficient unless log space is running out, and disk space is also running out on the volume that holds the log file.

  • データベースにログ ファイルを追加するには、ALTER DATABASE ステートメントの ADD LOG FILE 句を使用します。To add a log file to the database, use the ADD LOG FILE clause of the ALTER DATABASE statement. ログ ファイルを追加すると、ログを大きくすることができます。Adding a log file allows the log to grow.
  • ログ ファイルを大きくするには、ALTER DATABASE ステートメントの MODIFY FILE 句を使用します。SIZE および MAXSIZE 構文を指定します。To enlarge the log file, use the MODIFY FILE clause of the ALTER DATABASE statement, specifying the SIZE and MAXSIZE syntax. 詳細については、「ALTER DATABASE (Transact-SQL) の File および Filegroup オプション」を参照してください。For more information, see ALTER DATABASE (Transact-SQL) File and Filegroup options.

詳細については、このトピックの「推奨事項」を参照してください。For more information, see the Recommendations in this topic.

tempdb トランザクション ログのサイズの最適化Optimize tempdb transaction log size

サーバー インスタンスを再起動すると、 tempdb データベースのトランザクション ログのサイズが、元の自動拡張前のサイズに変更されます。Restarting a server instance resizes the transaction log of the tempdb database to its original, pre-autogrow size. これにより、 tempdb のトランザクション ログのパフォーマンスが低下することがあります。This can reduce the performance of the tempdb transaction log.

このオーバーヘッドは、サーバー インスタンスを起動または再起動した後、 tempdb のトランザクション ログのサイズを増やすことで回避できます。You can avoid this overhead by increasing the size of the tempdb transaction log after starting or restarting the server instance. 詳細については、「 tempdb Database」をご覧ください。For more information, see tempdb Database.

トランザクション ログ ファイルのサイズ拡大の管理Control transaction log file growth

トランザクション ログ ファイルのサイズ拡大を管理するには、ALTER DATABASE (Transact-SQL) の File および Filegroup オプション ステートメントを使用します。Use the ALTER DATABASE (Transact-SQL) File and Filegroup options statement to manage the growth of a transaction log file. 次のことを考慮してください。Note the following:

  • 現在のサイズを KB、MB、GB、TB 単位で変更するには、SIZE オプションを使用します。To change the current file size in KB, MB, GB, and TB units, use the SIZE option.
  • 拡張増分値で変更するには、FILEGROWTH オプションを使用します。To change the growth increment, use the FILEGROWTH option. 0 は、自動拡張がオフで、領域を追加できないことを示します。A value of 0 indicates that automatic growth is set to off and no additional space is permitted.
  • ログ ファイルの最大サイズを KB、MB、GB、TB 単位で制御するか、拡張値を UNLIMITED に設定するには、MAXSIZE オプションを使用します。To control the maximum the size of a log file in KB, MB, GB, and TB units or to set growth to UNLIMITED, use the MAXSIZE option.

詳細については、このトピックの「推奨事項」を参照してください。For more information, see the Recommendations in this topic.

推奨事項Recommendations

トランザクション ログ ファイルを使用して作業するときの一般的な推奨事項を次に示します。Following are some general recommendations when you are working with transaction log files:

  • トランザクション ログの自動拡張 (autogrow) の増分は FILEGROWTH オプションで設定されますが、トランザクションの作業負荷に対して常に余裕を持たせられるよう、十分な量にする必要があります。The automatic growth (autogrow) increment of the transaction log, as set by the FILEGROWTH option, must be large enough to stay ahead of the needs of the workload transactions. ログ ファイルの拡張増分値は、拡張を頻繁に行わなくても済むように十分な大きさにする必要があります。The file growth increment on a log file should be sufficiently large to avoid frequent expansion. トランザクション ログのサイズは、次の時間のログ量を監視することで正しく判断できます。A good pointer to properly size a transaction log is monitoring the amount of log occupied during:

    • 完全バックアップに必要な時間。完全バックアップが終わるまでログはバックアップされないためです。The time required to execute a full backup, because log backups cannot occur until it finishes.
    • 最も大規模なインデックス保守管理に必要な時間。The time required for the largest index maintenance operations.
    • データベースで最も大規模な一括処理を実行するときに必要な時間。The time required to execute the largest batch in a database.
  • FILEGROWTH オプションを利用し、データとログのファイルに自動拡張を設定するとき、パーセンテージよりサイズで設定したほうが増加の制御に優れている場合があります。割合は常に増加する量であるためです。When setting autogrow for data and log files using the FILEGROWTH option, it might be preferred to set it in size instead of percentage, to allow better control on the growth ratio, as percentage is an ever-growing amount.

    • トランザクション ログではファイルの瞬時初期化を活用できないことに留意してください。そのため、ログ拡張の回数増加が重要になります。Keep in mind that transaction logs cannot leverage Instant File Initialization, so extended log growth times are especially critical.
    • ベスト プラクティスとしては、トランザクション ログに対して FILEGROWTH オプションの値を 1,024 MB 以上に設定しないでください。As a best practice, do not set the FILEGROWTH option value above 1,024 MB for transaction logs. FILEGROWTH オプションの既定値:The default values for FILEGROWTH option are:
    VersionVersion 既定値Default values
    SQL Server 2016 (13.x)SQL Server 2016 (13.x) 以降Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) データ 64 MB。Data 64 MB. ログ ファイル 64 MB。Log files 64 MB.
    SQL Server 2005 (9.x)SQL Server 2005 (9.x) 以降Starting with SQL Server 2005 (9.x)SQL Server 2005 (9.x) データ 1 MB。Data 1 MB. ログ ファイル 10%。Log files 10%.
    SQL Server 2005 (9.x)SQL Server 2005 (9.x) の前Prior to SQL Server 2005 (9.x)SQL Server 2005 (9.x) データ 10%。Data 10%. ログ ファイル 10%。Log files 10%.
  • 増分が少ないと小さな VLF が過度に生成され、パフォーマンスが低下します。A small growth increment can generate too many small VLFs and can reduce performance. 指定されたインスタンスにおいて、すべてのデータベースの現在のトランザクション ログ サイズに最適な VLF 配布と必要なサイズを得るために必要な増分を決定するには、このスクリプトをご覧ください。To determine the optimal VLF distribution for the current transaction log size of all databases in a given instance, and the required growth increments to achieve the required size, see this script.

  • 増分が大きいと大きな VLF が生成される回数が極めて少なく、やはりパフォーマンスに影響が出ます。A large growth increment can generate too few and large VLFs and can also affect performance. 指定されたインスタンスにおいて、すべてのデータベースの現在のトランザクション ログ サイズに最適な VLF 配布と必要なサイズを得るために必要な増分を決定するには、このスクリプトをご覧ください。To determine the optimal VLF distribution for the current transaction log size of all databases in a given instance, and the required growth increments to achieve the required size, see this script.

  • 自動拡張を有効にしても、増加が遅く、クエリのニーズを満たせなければ、トランザクション ログがいっぱいになったというメッセージが表示されます。Even with autogrow enabled, you can receive a message that the transaction log is full, if it cannot grow fast enough to satisfy the needs of your query. 増分変更の詳細については、「ALTER DATABASE (Transact-SQL) の File および Filegroup オプション」を参照してください。For more information on changing the growth increment, see ALTER DATABASE (Transact-SQL) File and Filegroup options

  • データベースにログ ファイルが複数存在すると、パフォーマンスが向上しません。トランザクション ログ ファイルでは、同じファイル グループのデータ ファイルのように比例配分を利用することがないためです。Having multiple log files in a database does not enhance performance in any way, because the transaction log files do not use proportional fill like data files in a same filegroup.

  • ログ ファイルは自動的に圧縮するように設定できます。Log files can be set to shrink automatically. ただし、これは推奨されませんauto_shrink データベース プロパティは既定で FALSE に設定されています。However this is not recommended, and the auto_shrink database property is set to FALSE by default. auto_shrink を TRUE に設定すると、ファイル領域の 25% を超える領域が未使用の場合にのみ、自動圧縮によってファイルのサイズが縮小されます。If auto_shrink is set to TRUE, automatic shrinking reduces the size of a file only when more than 25 percent of its space is unused.

関連項目See also

BACKUP (Transact-SQL) BACKUP (Transact-SQL)
満杯になったトランザクション ログのトラブルシューティング (SQL Server エラー 9002) Troubleshoot a Full Transaction Log (SQL Server Error 9002)
SQL Server トランザクション ログのアーキテクチャと管理ガイドのトランザクション ログ バックアップ Transaction Log Backups in the SQL Server Transaction Log Architecture and Management Guide
トランザクション ログのバックアップ (SQL Server) Transaction Log Backups (SQL Server)
ALTER DATABASE (Transact-SQL) の File および Filegroup オプションALTER DATABASE (Transact-SQL) File and Filegroup options