Sql-Server

計算sql server中表的過濾行的大小

  • July 28, 2020

我的要求是每 24 小時知道一個表佔用的大小(記錄數和大小,以 mb 為單位),我發現查詢以獲取表的整個大小,但不確定從哪裡開始或如何實現這一點。

我有一個審計列(record_inserted_time),我可以通過它過濾記錄並獲取計數,但如何知道在此期間表佔用的大小(過濾記錄的大小)。

我必須獲得大約 100 個表的統計資訊,所有這些表都具有相同的審計列

您不會及時獲得準確的空間使用數據,因為隨著您的數據隨著時間的推移而變化,頁面中的內容佈局效率會有所不同。

您的“插入日期”列將通過獲取目前行數並減去自您測量日期以來插入的行數(或僅計算在該日期/之前插入的行數)來估計存在的行數. 如果出現以下情況,它可能會給出準確的讀數而不是估計值:

  • 該表永遠不會從
  • 審核日期僅在插入時更新,更新時也不更新
  • 任何和所有更新都使用UPDATEorMERGE而不是DELETE-then-re執行INSERT

您可以使用 row-count-at-a-date-in-the-past 通過計算來估計它佔用的頁面的總大小(data_size_now * rows_then) / rows_now

那是為了在您沒有保留日誌時嘗試及時回顧。保持準確的記錄很容易:設置一個為每個表執行分析的作業,並讓它儲存結果以供以後查看。

我認為正是你所需要的。

您可以設置一個 SQL 代理作業以每 24 小時執行一次查詢,並將結果插入到管理數據庫中的表(如果有)或您認為合適的任何其他數據庫中。

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