Sql-Server

數據文件中的頁面總和不等於文件大小

  • October 19, 2021

我不是試圖解決一個特定的問題,而只是試圖理解。

我已經閱讀了幾個地方,數據文件(讓我們假設一個 mdf 文件)被分成 8 KB 頁面。但是當我總結或結果不加起來數據文件的大小時,它就更少了total_pages。除了 8 KB 頁面之外,數據文件中還有其他內容嗎?sys.system_internals_allocation_units``sys.allocation_units

sys.allocation_units (Transact-SQL)的文件中有一條註釋。這就是它不匹配的原因。

請注意,返回的值不包括內部索引頁面和分配管理頁面。

打個比方,你在說:

我在這個磁碟上的所有文件的文件大小總和不等於磁碟的大小。

不,您可以在磁碟上有可用空間。這裡也是一樣。一個分配單元對應於類比中的一個文件,數據庫對應於磁碟(分區)。

分解它,分配單元的概念:

  • 一張表可以有一個或多個分區。

  • 表具有實際數據(作為堆或聚集索引)。

  • 一個表可以有 n 個非聚集索引。

  • 您的表中可以有三種類型的數據/分配:

    • “普通數據”(int、varchar(30)、datetime 等)
    • LOB 列(varchar(max)、varbinary(max)、xml 等)
    • 行溢出(例如,完全填充的兩個 varchar(8000) 不適合一頁)

對於每個表、分區、數據和索引,以及每種類型的數據(如前所述),您都會獲得一個分配單元。

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