Sql-Server

SQL Server ::這條記錄佔用了多少8K頁?

  • February 8, 2022

我想看看特定記錄佔用了多少 8K 頁。

如果您在 AdventureWorks2019 上執行此查詢:

SELECT ProductID
   ,Name
   ,DATALENGTH(Name) AS SizeInBytes
   ,LEN(Name) AS NumberOfCharacters
FROM Production.Product
ORDER BY 1

你有一個被每條記錄佔用的列表:

如何添加包含該記錄所佔用頁數的列?

我當然可以,DATALENGTH(Name) / 8 AS PagesTaken但我想知道是否有一些命令可以讓我通過SELECT.

我認為你在這裡有一些倒退。一頁為 8 KB(8,192 字節)。該表中的行具有所有列的數據類型大小總和的最大大小:

AdventureWorks2019 數據庫中 Production.Product 的創建表腳本的螢幕截圖

我實際上不會把所有這些都加起來,但讓我們想像一下總和是 500 字節。

您可以通過瀏覽文件中的此頁面來查找每種數據類型的大小,然後點擊您想要查找大小資訊的每種類型:數據類型 (Transact-SQL)

由於每個頁面上的標題大小固定,以及其他每行成本,8KB 頁面上的行可用空間量為 8,096(有關詳細資訊,請參閱此處:頁標題中儲存了哪些其他資訊)。

這意味著,在此表中,每頁最多可以有 8096 / 500 = 16 行。nvarchar根據可變長度 ( ) 列的大小,可能可以容納比這更多的行。

您可以使用如下查詢查看特定索引中有多少頁:SQL Server:表和/或數據庫使用的 8K 頁數

從那裡您可以得出每頁獲得的平均行數(表中的總行數/表中的總頁數)。

您還可以使用DBCC PAGE(如上面的“頁眉”連結中所述)查看有關每個頁面的詳細資訊,包括頁面上有多少行。


請注意,以上所有內容都適用於“行內數據”。如果表具有 LOB 數據類型,那麼如果它們的大小導致記錄超過最大記錄大小 8,060 字節,那麼這些數據類型將儲存在行外,可能儲存在多個頁面上。

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