sys.dm_hs_database_log_rate(Transact-SQL)

适用于:Azure SQL 数据库

每个结果集行返回一个组件,该组件控制超大规模数据库中的日志生成速率(化简)。 超大规模层体系结构中有多个 组件 可能导致日志生成率降低。

某些类型的组件(例如辅助计算副本或页面服务器)可以暂时降低主计算副本上的日志生成率,以确保数据库的整体运行状况和稳定性。

如果日志生成速率不受任何组件减少,则会为主计算副本组件返回一行,其中显示了数据库允许的最大日志生成速率。

此动态管理函数仅在会话连接到主副本时返回行。

注意

sys.dm_hs_database_log_rate 动态管理功能目前仅适用于 Azure SQL 数据库超大规模层。

语法

sys.dm_hs_database_log_rate ( 
{ database_id | NULL }                                     
)                             

参数

database_id

database_id 是表示数据库 ID 的 整数,没有默认值。 有效输入是数据库 ID 或 NULL

指定的 database_id:返回该特定数据库的行。

NULL:对于单一数据库,返回当前数据库的行。 对于弹性池中的数据库,返回调用方具有足够 权限池中所有数据库的行。

可以指定内置函数 DB_ID

返回的表

列名 数据类型 描述
database_id int NOT NULL 数据库的标识符。 这些值在单个数据库或弹性池中是唯一的,但不在逻辑服务器中。
replica_id uniqueidentifier NOT NULL replica_id中的 sys.dm_database_replica_states 列对应的计算副本的标识符。 当 NULL 对应于“超大规模”页面服务器时,component_id

当连接到副本时,DATABASEPROPERTYEX(DB_NAME(), 'ReplicaID') 函数调用将返回此值。
file_id int NULL 数据库中与限制日志生成速率的页面服务器对应的数据库文件的 ID。 仅当角色为页面服务器时,才会填充该角色,否则返回 NULL。 此值对应于 file_id中的 sys.database_files 列。
current_max_log_rate bigint NOT NULL 主计算副本上日志生成速率的当前最大日志速率限制(以字节/秒为单位)。如果没有组件减少日志生成速率,则报告“超大规模”数据库的日志生成速率限制。
component_id uniqueidentifier NOT NULL 超大规模组件(例如页面服务器或计算副本)的唯一标识符。
role smallint NOT NULL 可减少日志生成的所有现有组件角色。

Unknown = 0
Storage = 1
Primary = 2
Replica = 4
LocalDestage = 5
Destage = 6
GeoReplica = 10
StorageCheckpoint = 12
MigrationTarget = 14
日志生成速率有限时,可能会在主计算副本上观察到对应于每个角色的以下等待类型:
1 - RBIO_RG_STORAGE
4 - RBIO_RG_REPLICA
5 - RBIO_RG_LOCALDESTAGE
6 - RBIO_RG_DESTAGE
10 - RBIO_RG_GEOREPLICA
12 - RBIO_RG_STORAGE_CHECKPOINT
14 - RBIO_RG_MIGRATION_TARGET
有关详细信息,请参阅 日志速率限制等待
role_desc nvarchar(60) NOT NULL Unknown = 组件角色未知
Storage = 页面服务器(s)
Primary = 主计算副本
Replica = 辅助计算副本,例如高可用性(HA)副本或命名副本。
LocalDestage = 日志服务
Destage = 长期日志存储
GeoReplica = 异地辅助副本
StorageCheckpoint = 页面服务器上的检查点
MigrationTarget = 从“超大规模”反向迁移到非“超大规模”数据库期间的目标数据库。
catchup_rate bigint NOT NULL Catchup Rate in bytes/sec.如果未减少日志速率,则返回零。
catchup_bytes bigint NOT NULL 组件必须应用的事务日志量(以字节为单位)以赶上主要计算副本。 当组件被赶上时返回 0
last_reported_time 日期/时间 上次超大规模日志服务报告值的时间。

言论

在 Azure SQL 数据库的“超大规模”服务层级中,日志服务可确保分布式组件在应用事务日志方面并不落后。 这是维护整个系统运行状况和稳定性所必需的。 当组件落后并且其追赶率低于当前日志生成速率时,日志服务会降低主服务器上的日志生成速率。 sys.dm_hs_database_log_rate() DMF 可用于了解哪个组件导致日志速率下降以及日志速率的减少时间。

有关日志速率降低的更多上下文,请参阅“超大规模”中的 性能诊断。

权限

此动态管理功能需要 VIEW DATABASE PERFORMANCE STATE 权限。

例子

一个。 返回导致特定数据库中日志速率降低的组件

以下示例返回导致日志速率降低的组件的行。 如果任何组件未降低日志生成速率,则会为主计算返回一行,其中显示了数据库允许的最大日志生成速率。

SELECT current_max_log_rate_bps, role_desc, catchup_rate_bps, catchup_distance_bytes
FROM sys.dm_hs_database_log_rate(DB_ID(N'Contosodb'));                   

B. 返回导致日志速率降低的组件

连接到弹性池中的数据库时,以下示例为导致日志速率降低的组件返回一行,该行适用于池中拥有足够权限的每个数据库。 连接到单个数据库时,返回数据库的行。

SELECT current_max_log_rate_bps, role_desc, catchup_rate_bps, catchup_distance_bytes 
FROM sys.dm_hs_database_log_rate(NULL);