如何查看Azure SQL Database上次自动暂停的时间及持续时长?
查看Azure SQL Database无服务器实例的自动暂停时间及时长
先解决你遇到的两个问题
1. Azure CLI报错ResourceGroupNotFound
该错误大概率是当前CLI上下文的订阅不包含目标资源组,解决步骤:
- 检查当前订阅:
az account show - 切换到资源组所在的订阅:
az account set --subscription "你的订阅名称或ID" - 也可以在查询命令中显式指定订阅:
说明:az sql db show --subscription <订阅ID> -g $resourceGroupName -s $serverName -n $databaseName --query "[status, automaticPauseTime]"automaticPauseTime仅在数据库当前处于暂停状态时返回具体时间,若数据库正在运行,该字段为null。
2. T-SQL查询sys.dm_exec_sessions结果不符的原因
- 你连接的是
master库,当前会话的database_id指向master,而非目标无服务器数据库,所以查询条件database_id = DB_ID(@databaseName)无法匹配当前连接。 sys.dm_exec_sessions仅保留活跃/近期会话数据,数据库暂停重启后会清空历史会话记录,无法用于追踪暂停事件。
正确查询自动暂停时间及时长的方法
方法1:通过T-SQL查询暂停/恢复事件(精确时间点)
连接到master库,执行以下SQL查询昨日的暂停与恢复事件,通过事件时间差计算暂停时长:
USE master; GO DECLARE @targetDb NVARCHAR(128) = '你的数据库名称'; SELECT event_time AS 事件时间, event_type AS 事件类型, description AS 事件描述 FROM sys.event_log WHERE database_name = @targetDb AND event_type IN ('Database Paused', 'Database Resumed') AND event_time >= DATEADD(DAY, -1, GETUTCDATE()) -- 筛选昨日至今的事件 ORDER BY event_time DESC;
说明:sys.event_log保留7天内的事件记录,你可以通过相邻的“Database Paused”和“Database Resumed”事件时间差,计算单次暂停的持续时长。
方法2:通过Azure CLI查询昨日总暂停时长
使用监控指标查询昨日数据库的累计暂停时长(单位:秒):
az monitor metrics query \ --resource "/subscriptions/<你的订阅ID>/resourceGroups/<资源组名>/providers/Microsoft.Sql/servers/<服务器名>/databases/<数据库名>" \ --metric "PausedDuration" \ --aggregation "Total" \ --start-time "$(date -d 'yesterday' +%Y-%m-%dT00:00:00Z)" \ --end-time "$(date -d 'today' +%Y-%m-%dT00:00:00Z)"
方法3:Azure Portal可视化查看
- 进入目标SQL数据库的门户页面,点击左侧菜单的监控 > 指标
- 指标选择“暂停时长”,时间范围设置为“昨天”,即可查看当日累计暂停时长
- 点击左侧菜单的活动日志,筛选操作类型为“暂停数据库”和“恢复数据库”,可查看具体事件时间点
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

