トランザクション ログ ファイルのサイズの管理
場合によっては、SQL Server データベースのトランザクション ログの物理ログ ファイルを物理的に圧縮または拡張すると便利な場合があります。 このトピックでは、SQL Serverトランザクション ログのサイズを監視する方法、トランザクション ログを圧縮する方法、トランザクション ログ ファイルを追加または拡大する方法、tempdb トランザクション ログの増加率を最適化する方法、およびトランザクション ログ ファイルの拡張を制御する方法について説明します。
ログ領域の使用量の監視
ログ領域の使用量は、DBCC SQLPERF (LOGSPACE) を使用して監視することができます。 このコマンドは、現在使用されているログ領域の量に関する情報を返し、いつトランザクション ログを切り捨てる必要があるかを示します。 詳細については、「 DBCC SQLPERF (Transact-SQL)」を参照してください。 ログ ファイルの現在のサイズ、最大サイズ、およびファイルの自動拡張オプションについては、sys.database_files にある、そのログ ファイルに関する size、max_size、growth の各列も使用できます。 詳しくは「sys.database_files (Transact-SQL)」をご覧ください。
重要
ログ ディスクが過負荷にならないようにすることをお勧めします。
ログ ファイルのサイズの圧縮
物理ログ ファイルの物理サイズを削減するには、ログ ファイルを圧縮する必要があります。 トランザクション ログ ファイルに不要な未使用領域が含まれていることがわかっている場合にはこの方法が有効です。 ログ ファイルの圧縮を実行できるのは、データベースがオンラインで、1 つ以上の仮想ログ ファイルが解放されている間だけです。 場合によっては、次のログの切り捨てまでログを圧縮できないことがあります。
注意
実行時間の長いトランザクションなど、長期間にわたって仮想ログ ファイルがアクティブなままになる要因があると、ログの圧縮が制限されたり、ログがまったく圧縮できないことがあります。 ログの切り捨てを遅らせる要因については、「トランザクション ログ (SQL Server)」を参照してください。
ログ ファイルを圧縮すると、論理ログのどの部分も保持しない 1 つまたは複数の仮想ログ ファイル (つまり、 非アクティブな仮想ログ ファイル) が削除されます。 トランザクション ログ ファイルを圧縮すると、ログ ファイルが目的のサイズにできるだけ近いサイズに縮小されるように、非アクティブな仮想ログ ファイルがログ ファイルの末尾から削除されます。
データベース ファイルを圧縮せずにログ ファイルを圧縮するには
ログ ファイルの圧縮イベントを監視するには
To monitor log space
sys.database_files (Transact-SQL) (ログ ファイルまたはファイルの size、max_size、growth 列を参照してください。)
注意
データベースおよびログ ファイルの圧縮は、自動的に行われるように設定できます。 ただし、自動圧縮は推奨されず、autoshrink
データベース プロパティは既定で FALSE に設定されています。 autoshrink
を TRUE に設定すると、ファイル領域の 25% を超える領域が未使用の場合にのみ、自動圧縮によってファイルのサイズが縮小されます。 ファイルは、ファイル領域の 25% のみが未使用領域になるサイズ、またはファイルの元のサイズの、どちらか大きい方のサイズまで圧縮されます。 プロパティの設定を変更する方法については、「データベースのautoshrink
プロパティを表示または変更する」を参照してください。[オプション] ページまたは ALTER DATABASE SET Options (Transact-SQL) の自動圧縮プロパティを使用して、AUTO_SHRINK オプションを使用します。
ログ ファイルの追加または拡大
既存のログ ファイルを拡大するか (ディスク領域が十分にある場合)、別のディスク上にあるデータベースにログ ファイルを追加することによって、領域を確保することもできます。
データベースにログ ファイルを追加するには、ALTER DATABASE ステートメントの ADD LOG FILE 句を使用します。 ログ ファイルを追加すると、ログを大きくすることができます。
ログ ファイルを拡大するには、ALTER DATABASE ステートメントの MODIFY FILE 句を使用し、SIZE および MAXSIZE 構文を指定します。 詳しくは、「 ALTER DATABASE (Transact-SQL)」をご覧ください。
tempdb トランザクション ログのサイズの最適化
サーバー インスタンスを再起動すると、 tempdb データベースのトランザクション ログのサイズが、元の自動拡張前のサイズに変更されます。 これにより、 tempdb のトランザクション ログのパフォーマンスが低下することがあります。 このオーバーヘッドは、サーバー インスタンスを起動または再起動した後、 tempdb のトランザクション ログのサイズを増やすことで回避できます。 詳細については、「 tempdb Database」をご覧ください。
トランザクション ログ ファイルのサイズ拡大の管理
ALTER DATABASE (Transact-SQL) ステートメントを使用して、トランザクション ログ ファイルの増加を管理できます。 次のことを考慮してください。
現在のサイズを KB、MB、GB、および TB 単位で変更する場合は、SIZE オプションを使用します。
拡張増分値で変更するには、FILEGROWTH オプションを使用します。 0 は、自動拡張がオフで、領域を追加できないことを示します。 ログ ファイルの自動拡張の増分値が小さい場合も、パフォーマンスが低下することがあります。 ログ ファイルの拡張増分値は、拡張を頻繁に行わなくても済むように十分な大きさにする必要があります。 通常は、既定の拡張増分値 (10%) が適しています。
ログ ファイルのファイル拡張プロパティを変更する方法については、「 ALTER DATABASE (Transact-SQL)」を参照してください。
ログ ファイルの最大サイズを KB、MB、GB、および TB 単位で制御するか、拡張値を UNLIMITED に設定するには、MAXSIZE オプションを使用します。
参照
BACKUP (Transact-SQL)
満杯になったトランザクション ログのトラブルシューティング (SQL Server エラー 9002)