适用于:Azure SQL 数据库
动态 sys.dm_hs_database_log_rate 管理功能(DMF)返回有关 Azure SQL 数据库超大规模日志生成速率的信息。
结果集中的每一行都表示一个组件,该组件控制超大规模数据库中的日志生成速率(化简)。 超大规模层体系结构中有多个组件可以降低日志生成率,以保持数据库性能稳定和均衡。
某些类型的组件(例如辅助计算副本或页面服务器)可以暂时降低主计算副本上的日志生成率,以确保数据库的整体运行状况和稳定性。
如果日志生成速率不受任何组件减少,则会为主计算副本组件返回一行,其中显示了数据库允许的最大日志生成速率。
此动态管理函数仅在会话连接到主副本时返回行。
Syntax
sys.dm_hs_database_log_rate (
{ database_id | NULL }
)
Arguments
database_id
database_id 是表示数据库 ID 的 整数 ,没有默认值。 有效的输入是数据库 ID 或 NULL。
提供 a database_id 时, sys.dm_hs_database_log_rate 返回该特定数据库的行。
如果未提供或 NULL 何时提供,则为单一数据库返回当前数据库的行。 对于弹性池中的数据库,返回调用方具有足够 权限的池中所有数据库的行。
可以指定内置函数 DB_ID 。
返回的表
| 列名 | 数据类型 | Description |
|---|---|---|
database_id |
int NOT NULL | 数据库的标识符。 这些值在单个数据库或弹性池中是唯一的,但不在逻辑服务器中。 |
replica_id |
uniqueidentifier NOT NULL | 与列sys.dm_database_replica_states相对应的replica_id计算副本的标识符。
NULL 对应于 component_id “超大规模”页服务器。连接到副本时,函数调用将返回 DATABASEPROPERTYEX(DB_NAME(), 'ReplicaID') 此值。 |
file_id |
int 零 | 数据库中与限制日志生成速率的页面服务器对应的数据库文件的 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 = 6 GeoReplica = 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 |
datetime | 上次超大规模日志服务报告值的时间。 |
注解
动态 sys.dm_hs_database_log_rate 管理功能仅适用于 Azure SQL 数据库超大规模层。
在 Azure SQL 数据库的“超大规模”服务层级中,日志服务可确保分布式组件在应用事务日志方面并不落后。 这是维护整个系统运行状况和稳定性所必需的。 当组件落后并且其追赶率低于当前日志生成速率时,日志服务会降低主服务器上的日志生成速率。
sys.dm_hs_database_log_rate() DMF 可用于了解哪个组件导致日志速率下降以及日志速率的降低时间,以及日志速率的降低时间。
有关日志速率降低的更多上下文,请参阅 “超大规模”中的性能诊断。
Permissions
此动态管理功能需要 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);