[Azure] 透過SQL指令,取得在Azure SQL Database以及彈性集區的可用空間以及DTU使用資訊

因為某些原因,必須透過執行SQL語法的方式取得資料庫剩餘空間與使用空間的資訊
有幾個很簡單的語法,可以抓出所需要的資訊

以這個資料庫來說,可使用的總空間上限為250G,使用空間2.36G,但是配置空間為2.69G

取得Azure SQL Database的配置空間、未使用空間、以及使用空間可使用下面語法

-- 配置空間、未使用空間以及使用空間
SELECT 
SUM(size/128.0) AS '配置空間(MB)', 
SUM(size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0) AS '未使用空間(MB)',
SUM(size/128.0) - SUM(size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0) AS '使用空間(MB)'
FROM sys.database_files
GROUP BY type_desc
HAVING type_desc = 'ROWS'

執行完之後,我們可以得到下面的結果

取得總儲存體上限,則使用下面的語法

-- 儲存體上限
SELECT CAST(DATABASEPROPERTYEX('[資料庫名稱]', 'MaxSizeInBytes') AS bigint)/1024/1024 AS '儲存體上限(MB)'

執行完之後,我們可以得到下面的結果

取得指定資料庫使用的DTU資訊,可在master資料庫中使用下面語法作查詢

-- DTU使用資訊
SELECT TOP 1 
dtu_limit as 'DTU上限', 
avg_cpu_percent AS '平均DTU用量百分比',
(avg_cpu_percent * 100.0 / dtu_limit) AS 'DTU使用量'
FROM sys.resource_stats
WHERE database_name = '[資料庫名稱]'
ORDER BY end_time DESC

執行完之後,我們可以得到下面的結果

而這個資料庫是放在指定的某個SQL彈性集區中,當然也可以透過語法的方式取得這個SQL彈性集區的相關資訊
以這個資料庫所放置的彈性集區來說,使用空間已經達到35.5G、配置空間36.5G,而儲存體的上限為50G,而透過了SQL語法,我們可以抓到除了空間外,還有更多DTU相關的資訊

使用下面的語法在master的資料庫中執行,可以取得許多彈性集區的相關資訊

-- 取出指定彈性集區使用空間大小以及DTU資訊
SELECT 
TOP 1 
avg_storage_percent / 100.0 * elastic_pool_storage_limit_mb AS '使用空間大小(MB)',
avg_allocated_storage_percent / 100.0 * elastic_pool_storage_limit_mb AS '配置空間大小(MB)',
elastic_pool_storage_limit_mb AS '儲存體上限(MB)',
avg_cpu_percent AS '平均DTU用量百分比',
elastic_pool_dtu_limit AS 'DTU上限',
avg_cpu_percent / 100.0 * elastic_pool_dtu_limit AS 'DTU使用量'
FROM sys.elastic_pool_resource_stats
WHERE elastic_pool_name = '[彈性集區名稱]'
ORDER BY end_time DESC

執行完之後,我們可以得到下面的結果

從圖中可以看到,除了彈性集區的空間資料之外,連DTU使用的相關訊息也都可以抓得出來,資訊非常完整也詳細

透過這幾個簡單的SQL語法,可以讓管理者更容易的即時知道Azure SQL Database的健康狀態,也可以作更多管理上的應用