Sql-Server

如果數據計數增加,SQL Server DB 表數據大小查詢結果不會增加

  • January 16, 2017

我有一個查詢,它將顯示 SQL Server 中數據庫表記錄的表名、行數和大小。當我執行查詢時,我得到了顯示的結果

TableName            NumberOfRows   SizeinKB
TBL_PROCESS_AUDIT2   1              16

但是當我使用相同的插入查詢將更多記錄插入同一個表並執行查詢時,它顯示更多的行數(50)但大小相同(16kb)。

TableName            NumberOfRows   SizeinKB
TBL_PROCESS_AUDIT2   50             16

實際上當一個表的行數增加時,它的大小也應該增加。因此,對於 1 條記錄,大小為 16KB,因此對於 50 條記錄,大小應為 800KB。當我插入大約 2000 條記錄的批量記錄時,大小會有所不同。

我的查詢中的邏輯或問題是什麼?我想要數據庫表記錄的實際大小。

我的查詢:

CREATE TABLE #RowCountsAndSizes (TableName NVARCHAR(128),rows CHAR(11),      
      reserved VARCHAR(18),data VARCHAR(18),index_size VARCHAR(18), 
      unused VARCHAR(18))

EXEC       sp_MSForEachTable 'INSERT INTO #RowCountsAndSizes EXEC sp_spaceused ''?'' '

SELECT     TableName,CONVERT(bigint,rows) AS NumberOfRows,
          CONVERT(bigint,left(reserved,len(reserved)-3)) AS SizeinKB
FROM       #RowCountsAndSizes 
ORDER BY   NumberOfRows DESC,SizeinKB DESC,TableName

DROP TABLE #RowCountsAndSizes

SQL Server 將數據儲存在 8kb 頁面上。您不能擁有小於兩頁的表格。因此,當您向表中添加一行時,您的最小空間消耗為 2 * 8kb = 16kb。但是這些頁面並沒有滿,這意味著再添加 15 行不會使表大小增加(15 * 初始大小),它只是意味著保存初始行的數據頁有足夠的空間容納更多數據。如果您再添加 1000 行,我敢打賭您的大小會增加,但這將取決於一行中的內容以及 8kb 頁面上可以容納多少行。

如果您只想查看已使用頁面上的空間,而忽略未使用頁面上的空間,我不知道表中有多少數據真的很重要。無論頁面有 10 個字節的數據還是 7,997 個字節,您都在磁碟上佔用 8 kb 和在記憶體中佔用 8 kb。因此,您會看到大多數空間計算腳本只是佔用(number of pages) * 8,192,因為頁面上未使用的空間很少相關。

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