我想計算每天到 Azure SQL 資料庫的平均連接數。
此查詢回傳SUM
每天
DECLARE @StartDate DATE = DATEADD(day, -1, GETDATE()) -- 1 Days
SELECT database_name
,CAST(start_time AS DATE) AS start_time2
,SUM(success_count) AS Connections
FROM sys.database_connection_stats
WHERE start_time > @StartDate
GROUP BY database_name
,CAST(start_time AS DATE)
ORDER BY Connections DESC
它回傳一個像這樣的資料集:
資料庫名稱 | 開始時間2 | 連接 |
---|---|---|
qav10auto1 | 2022-10-02 | 793 |
qav10ptweu | 2022-10-02 | 482 |
qav10ptweu | 2022-10-03 | 409 |
qa0r0auto1 | 2022-10-02 | 271 |
qav10auto2 | 2022-10-02 | 266 |
如果我把AVG
而不是SUM
它回傳:
資料庫名稱 | 開始時間2 | 連接 |
---|---|---|
qav10auto1 | 2022-10-02 | 5 |
qav10daily1 | 2022-10-03 | 4 |
qav10auto1 | 2022-10-03 | 3 |
qa0r0auto2 | 2022-10-02 | 2 |
qav10auto3 | 2022-10-03 | 2 |
我知道為什么!
這是因為如果您這樣做,SELECT * FROM sys.database_connection_stats
您會注意到 Azure SQL 資料庫每 5 分鐘對連接進行求和,因此在 success_count 列中,您的數字大多介于 1 到 20 之間。
那么我怎樣才能每天匯總,然后得到每天的平均值。
因為目標是查看在 30 天內每個資料庫每天收到多少連接。
uj5u.com熱心網友回復:
今晚我會很滿足:
DECLARE @StartDate DATE = DATEADD(day, - 1, GETDATE()) -- 1 Days
SELECT t.name
,round(avg(CAST(t.Count_Connections AS FLOAT)), 2) AS AVG_Connections_per_Hour
FROM (
SELECT name
--,database_name
--,success_count
--,start_time
,CONVERT(DATE, start_time) AS Dating
,DATEPART(HOUR, start_time) AS Houring
,sum(CASE
WHEN name = database_name
THEN success_count
ELSE 0
END) AS Count_Connections
FROM sys.database_connection_stats
CROSS JOIN sys.databases
WHERE start_time > @StartDate
AND database_id != 1
GROUP BY name
,CONVERT(DATE, start_time)
,DATEPART(HOUR, start_time)
) AS t
GROUP BY t.name
我有一個天才的想法來使用:
FROM sys.database_connection_stats
CROSS JOIN sys.databases
因為這兩個表不一樣,所以我基本上是在創建一個錯誤,sys.databases
每次sys.database_connection_stats
.
然后我CASE
在有連接時選擇連接數,0
如果沒有連接,則使用 a 代替。
我洗掉了master
資料庫database_id != 1
。
我將連接數四舍五入round(avg(CAST(t.Count_Connections AS FLOAT)), 2)
。
我現在可以理解哪些 Azure SQL 資料庫適合無服務器層。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/514582.html
上一篇:T-SQL分組動態日期范圍