sys.dm_db_log_stats (Transact-SQL)

适用于:SQL Server 2016 SP 2 及更高版本 Azure SQL 数据库Azure SQL 托管实例

返回有关数据库的事务日志文件的摘要级别属性和信息。 使用此信息监视和诊断事务日志运行状况。

Transact-SQL 语法约定

语法

 sys.dm_db_log_stats ( database_id )

参数

database_id |NULL | 默认

数据库的 ID。 database_idint。 有效输入是数据库的 ID 号、 NULLDEFAULT。 默认值为 NULLNULLDEFAULT 是当前数据库上下文中的等效值。
可以指定内置函数 DB_ID。 使用 DB_ID 但不指定数据库名称时,当前数据库的兼容级别必须为 90 或更高。

返回的表

列名称 数据类型 说明
database_id int 数据库 ID
recovery_model nvarchar(60) 数据库的恢复模式。 可能的值包括:
SIMPLE
BULK_LOGGED
FULL
log_min_lsn nvarchar(24) 事务日志中的当前启动 日志序列号 (LSN)
log_end_lsn nvarchar(24) 日志序列号 (事务日志 中最后一条日志记录的 LSN) 。
current_vlf_sequence_number bigint 当前 虚拟日志文件在执行时 (VLF) 序列号。
current_vlf_size_mb float 当前 虚拟日志文件 (VLF) 大小(以 MB 为单位)。
total_vlf_count bigint 事务日志 中 (VLF) 虚拟 日志文件总数。
total_log_size_mb float 事务日志总大小(以 MB 为单位)。
active_vlf_count bigint 事务日志 中) (VLF 的活动虚拟 日志文件总数。
active_log_size_mb float 活动事务日志总大小(以 MB 为单位)。
log_truncation_holdup_reason nvarchar(60) 日志截断保留原因。 该值与 log_reuse_wait_descsys.databases列相同。 (有关这些值的详细说明,请参阅 事务日志) 。
可能的值包括:
NOTHING
CHECKPOINT
LOG_BACKUP
ACTIVE_BACKUP_OR_RESTORE
ACTIVE_TRANSACTION
DATABASE_MIRRORING
复制
DATABASE_SNAPSHOT_CREATION
LOG_SCAN
AVAILABILITY_REPLICA
OLDEST_PAGE
XTP_CHECKPOINT
其他暂时性
log_backup_time datetime 上次事务日志备份时间。
log_backup_lsn nvarchar(24) 上一个事务日志备份 日志序列号 (LSN)
log_since_last_log_backup_mb float 自上次事务日志备份 日志序列号 (LSN) 以来的 日志大小(以 MB 为单位)。
log_checkpoint_lsn nvarchar(24) 最后一个检查点 日志序列号 (LSN)
log_since_last_checkpoint_mb float 自上次检查点 日志序列号 (LSN) 以来的日志 大小(以 MB 为单位)。
log_recovery_lsn nvarchar(24) 恢复 日志序列号 (数据库的 LSN) 。 如果 log_recovery_lsn 发生在检查点 LSN 之前, log_recovery_lsn 是最早的活动事务 LSN,否则 log_recovery_lsn 为检查点 LSN。
log_recovery_size_mb float 日志大小,以 MB 为单位,因为日志恢复 日志序列号 (LSN)
recovery_vlf_count bigint 如果发生故障转移或服务器重启,则) 要恢复的 VLF (虚拟日志文件 总数。

注解

针对作为辅助副本参与可用性组的数据库运行时 sys.dm_db_log_stats ,将仅返回上述字段的子集。 目前,针对辅助数据库运行时,仅 database_id返回 、 recovery_modellog_backup_time

权限

需要数据库中 VIEW SERVER STATE 的权限。

SQL Server 2022 及更高版本的权限

需要对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。

示例

A. 确定具有大量 VLF 的SQL Server实例中的数据库

以下查询返回日志文件中 VLF 数超过 100 个的数据库。 大量 VLF 可能会影响数据库的启动、还原和恢复时间。

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 time' 
FROM sys.databases AS s
CROSS APPLY sys.dm_db_log_stats(s.database_id); 

另请参阅

动态管理视图和函数 (Transact-SQL)
与数据库有关的动态管理视图 (Transact-SQL)
sys.dm_db_log_space_usage (Transact-SQL)
sys.dm_db_log_info (Transact-SQL)