sys.dm_db_log_stats (Transact-SQL)

适用于: SQL Server 2016 (13.x) 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。

在 Azure SQL 数据库中,这些值在单一数据库或弹性池中是唯一的,但在逻辑服务器中不是唯一的。
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 事务日志中的虚拟日志文件(VFS)总数。
total_log_size_mb float 事务日志总大小(以 MB 为单位)。
active_vlf_count bigint 事务日志中的活动 虚拟日志文件(VFS) 总数。
active_log_size_mb float 活动事务日志大小总计(以 MB 为单位)。
log_truncation_holdup_reason nvarchar(60) 日志截断保留原因。 该值与 log_reuse_wait_desc . 的 sys.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 如果发生故障转移或服务器重启,则恢复的虚拟日志文件(VDF)总数。

注解

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

权限

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

SQL Server 2022 及更高版本的权限

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

示例

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

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

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)