如何计算Azure SQL Database的每日平均连接数?
计算Azure SQL Database的每日平均连接数
问题分析
sys.database_connection_stats表每5分钟聚合一次success_count,直接使用AVG(success_count)得到的是每5分钟区间的连接数平均值,并非你需要的基于每日总连接数计算的平均值。
解决方案
根据你的需求,我们分两步实现:先按数据库和日期聚合得到每日总连接数,再基于这些数据计算目标平均值。
场景1:计算30天内每个数据库的平均每日总连接数
该场景将30天内每个数据库的每日总连接数求和后,除以有效天数(避免无数据日期影响结果),得到整体日均连接数:
DECLARE @StartDate DATE = DATEADD(day, -30, GETDATE()) -- 取最近30天数据 SELECT database_name, AVG(Connections) AS Avg_Daily_Connections FROM ( -- 子查询:按天统计每个数据库的每日总连接数 SELECT database_name, CAST(start_time AS DATE) AS stat_date, SUM(success_count) AS Connections FROM sys.database_connection_stats WHERE start_time > @StartDate GROUP BY database_name, CAST(start_time AS DATE) ) AS daily_totals GROUP BY database_name ORDER BY Avg_Daily_Connections DESC;
场景2:计算每天的平均每5分钟连接数
如果需要查看单日范围内的连接密度,可计算当日总连接数除以当日的5分钟区间数量,得到当日平均每5分钟的连接数:
DECLARE @StartDate DATE = DATEADD(day, -30, GETDATE()) -- 取最近30天数据 SELECT database_name, stat_date, SUM(success_count) AS Daily_Total_Connections, -- 当日总连接数除以当日的5分钟区间数,得到日均每5分钟连接数 CAST(SUM(success_count) AS FLOAT) / COUNT(*) AS Avg_Per_5Min_Interval FROM sys.database_connection_stats WHERE start_time > @StartDate GROUP BY database_name, CAST(start_time AS DATE) ORDER BY stat_date DESC, Daily_Total_Connections DESC;
说明
- 修改
DATEADD(day, -30, GETDATE())中的数字可调整统计的时间范围,当前为最近30天 - 场景1适合分析数据库的整体连接趋势,场景2适合查看单日的连接波动情况
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

