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 = 0Storage = 1Primary = 2Replica = 4LocalDestage = 5Destage = 6GeoReplica = 10StorageCheckpoint = 12MigrationTarget = 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);