対象者:SQL Server 2016 (13.x) SP2 以降のバージョン
Azure SQL Database
Azure SQL Managed Instance
SQL Database in Microsoft Fabric
sys.dm_db_log_stats動的管理機能は、概要レベルの属性と、データベースのトランザクション ログ ファイルに関する情報を返します。 この情報は、トランザクション ログの正常性の監視と診断に使用します。
Syntax
sys.dm_db_log_stats ( database_id )
引数
{ database_id |NULL | DEFAULT }
データベースの ID。
database_id は int です。有効な入力は、データベース、 NULL、または DEFAULTの ID 番号です。 既定値は NULL です。
NULL と DEFAULT は、現在のデータベースのコンテキストで同等の値です。
database_idの組み込み関数DB_IDを指定することもできます。
返されるテーブル
| 列名 | データの種類 | Description |
|---|---|---|
database_id |
int | データベース ID。 Azure SQL Database では、値は 1 つのデータベースまたは Elastic Pool 内で一意ですが、論理サーバー内では一意ではありません。 |
recovery_model |
nvarchar(60) | データベースの復旧モデル。 指定できる値は、次のとおりです。SIMPLEBULK_LOGGEDFULL |
log_min_lsn
1 |
nvarchar(24) | トランザクション ログの現在の開始ログ シーケンス番号 (LSN)。 |
log_end_lsn
1 |
nvarchar(24) | トランザクション ログ内の最後のログ レコードのログ シーケンス番号 (LSN)。 |
current_vlf_sequence_number
2 |
bigint | 実行時の現在の仮想ログ ファイル (VLF) シーケンス番号。 |
current_vlf_size_mb
2 |
float | 現在の仮想ログ ファイル (VLF) サイズ (MB)。 |
total_vlf_count
2 |
bigint | トランザクション ログ内の仮想ログ ファイル (VTF) の合計数。 |
total_log_size_mb |
float | トランザクション ログの合計サイズ (MB 単位)。 |
active_vlf_count
2 |
bigint | トランザクション ログ内のアクティブな仮想ログ ファイル (VTF) の合計数。 |
active_log_size_mb |
float | アクティブなトランザクション ログの合計サイズ (MB 単位)。 |
log_truncation_holdup_reason |
nvarchar(60) | ログの切り捨て保留理由。 値は、log_reuse_wait_descのsys.databases列と同じです。 (これらの値の詳細については、 トランザクション ログを参照してください)。指定できる値は、次のとおりです。 NOTHINGCHECKPOINTLOG_BACKUPACTIVE_BACKUP_OR_RESTOREACTIVE_TRANSACTIONDATABASE_MIRRORINGREPLICATIONDATABASE_SNAPSHOT_CREATIONLOG_SCANAVAILABILITY_REPLICAOLDEST_PAGEXTP_CHECKPOINTOTHER TRANSIENT |
log_backup_time |
datetime | 最後のトランザクション ログ バックアップの開始時刻。 |
log_backup_lsn
1 |
nvarchar(24) | 最後のトランザクション ログ バックアップ ログ シーケンス番号 (LSN)。 |
log_since_last_log_backup_mb
1 |
float | 最後のトランザクション ログ バックアップ ログ シーケンス番号 (LSN) 以降のログ サイズ (MB)。 |
log_checkpoint_lsn
1 |
nvarchar(24) | 最後のチェックポイント ログ シーケンス番号 (LSN)。 |
log_since_last_checkpoint_mb
1 |
float | 最後のチェックポイント ログ シーケンス番号 (LSN) 以降のログ サイズ (MB)。 |
log_recovery_lsn
1 |
nvarchar(24) | データベースの復旧ログ シーケンス番号 (LSN)。 チェックポイント LSN の前に log_recovery_lsn が発生した場合、 log_recovery_lsn は最も古いアクティブなトランザクション LSN です。それ以外の場合 log_recovery_lsn はチェックポイント LSN です。 |
log_recovery_size_mb
1 |
float | ログ回復ログ シーケンス番号 (LSN) 以降のログ サイズ (MB)。 |
recovery_vlf_count
2 |
bigint | フェールオーバーまたはサーバーの再起動があった場合に復旧する仮想ログ ファイル (VTF) の合計数。 |
1 詳細については、 ログ・シーケンス番号 (LSN) を参照してください。
2 詳細については、 仮想ログ ファイル (VLF) を参照してください。
注釈
セカンダリ レプリカとして可用性グループに参加しているデータベースに対して sys.dm_db_log_stats を実行すると、クエリは前の表で説明したフィールドのサブセットのみを返します。 現在、セカンダリ データベースに対して実行すると、クエリは database_id、 recovery_model、および log_backup_time のみを返します。
Permissions
SQL Server 2019 (15.x) 以前のバージョンでは、サーバーに対する VIEW SERVER STATE アクセス許可が必要です。
SQL Server 2022 (16.x) 以降のバージョンでは、サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。
Examples
A. VTF の数が多い SQL Server インスタンス内のデータベースを特定する
次のクエリでは、ログ ファイル内に 100 を超える VTF を含むデータベースが返されます。 多数の VTF がデータベースの起動、復元、復旧時間に影響する可能性があります。
SELECT name AS 'Database Name',
total_vlf_count AS 'VLF count'
FROM sys.databases AS s
CROSS APPLY sys.dm_db_log_stats(s.database_id)
WHERE total_vlf_count > 100;
B. 4 時間以上前のトランザクション ログ バックアップを使用して SQL Server インスタンス内のデータベースを特定する
次のクエリは、インスタンス内のデータベースの最後のログ バックアップの開始時刻を決定します。
SELECT name AS 'Database Name',
log_backup_time AS 'last log backup start time'
FROM sys.databases AS s
CROSS APPLY sys.dm_db_log_stats(s.database_id);