Sql-Server

如何跟踪我的 SQL Azure 佔用空間脈動的原因?

  • July 6, 2014

這是由這個 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_statssys.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;

將結果儲存在新表或電子表格中,並隨時間進行比較。

如果它是由單個表(或一小組表)引起的,您應該檢查這是否是預期的行為。例如,如果除了針對該表執行的刪除(考慮定期清除)的插入之外,這可能會發生。

引用自:https://dba.stackexchange.com/questions/47555