Sql-Server
如何跟踪我的 SQL Azure 佔用空間脈動的原因?
這是由這個 StackOverflow question啟發的。我有這個程式碼:
SELECT CONVERT(INT, SUM(reserved_page_count) * 8 / 1024) FROM sys.dm_db_partition_stats
用於檢測數據庫空間消耗,它返回與 SQL Azure 管理門戶餅圖完全相同的結果。問題是這個數字在沒有明顯原因的情況下波動很大——有時約為 35%,有時約為 54%。
這有點令人擔憂——我不明白會發生什麼,主要擔心的是我們突然消耗了所有空間並且我們的服務停止了。
我認真地試圖調查
sys.dm_db_partition_stats
,sys.partitions
但它們對我來說就像一堆神奇的數字。我應該使用什麼數據來找出波動的根本原因?
我會讓您使用以下程式碼查看表和索引:
SELECT sys.objects.name, SUM(reserved_page_count) * 8.0 / 1024 as [SizeinMB] FROM sys.dm_db_partition_stats, sys.objects WHERE sys.dm_db_partition_stats.object_id = sys.objects.object_id GROUP BY sys.objects.name ORDER BY [SizeinMB] DESC
您將需要定期檢查對象的大小,以查看是否可以確定哪些對像在不斷變化。
我將首先單獨查看這些表,看看這是由單個表引起的還是全球現象。您可以使用此查詢:
SELECT OBJECT_SCHEMA_NAME(ps.object_id)+'.'+OBJECT_NAME(ps.object_id) Tbl, SUM(ps.used_page_count) AS used_page_count, SUM(ps.reserved_page_count) AS reserved_page_count, SUM(CASE WHEN ps.index_id<2 THEN ps.row_count ELSE 0 END) AS row_count FROM sys.dm_db_partition_stats ps JOIN sys.tables t ON ps.object_id = t.object_id GROUP BY ps.object_id ORDER BY reserved_page_count DESC;
將結果儲存在新表或電子表格中,並隨時間進行比較。
如果它是由單個表(或一小組表)引起的,您應該檢查這是否是預期的行為。例如,如果除了針對該表執行的刪除(考慮定期清除)的插入之外,這可能會發生。