Sql-Server
數據文件中的頁面總和不等於文件大小
我不是試圖解決一個特定的問題,而只是試圖理解。
我已經閱讀了幾個地方,數據文件(讓我們假設一個 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) 不適合一頁)
對於每個表、分區、數據和索引,以及每種類型的數據(如前所述),您都會獲得一個分配單元。