Sql-Server

sp_spaceused 顯示 0 行但 72 KB 的保留空間

  • September 10, 2018

當我執行時,sp_spaceused dummybizo我得到以下結果:

name        rows    reserved    data    index_size  unused
dummybizo   0       72 KB       8 KB    8 KB        56 KB

我期待以下結果:

name        rows    reserved    data    index_size  unused
dummybizo   0       0 KB        0 KB    0 KB        0 KB

是什麼導致保留記憶體?

我已經嘗試強制清理幽靈記錄,alter table dummybizo rebuild;但它不會改變結果。我也嘗試過truncate table dummybizo,但它對這些統計數據沒有任何作用。我還注意到,select * from dummybizo with (nolock)它沒有顯示任何隱藏的記錄。

接下來我應該嘗試什麼?我想設置表格,以便統計數據讀取0 0 KB 0 KB 0 KB 0 KB

很可能,為此表保留了一個IAM 頁範圍。TRUNCATE TABLE將刪除這些。當所有數據都被刪除時,表的最小結構仍然存在。

有一個展示!

--Setup
DROP TABLE IF EXISTS dbo.welcometable
CREATE TABLE dbo.welcometable
(ID INT)

EXEC sp_spaceused 'dbo.welcometable'
--all 0s

-----------------------------------------------------
--Let's see what spaceused looks like when there's data
INSERT dbo.welcometable
VALUES (1)

EXEC sp_spaceused 'dbo.welcometable'
--72KB reserved, 8KB data, 8KB index, 56KB unused

-----------------------------------------------------
--Now what if we delete?
DELETE FROM dbo.welcometable

EXEC sp_spaceused 'dbo.welcometable'
--72KB reserved, 8KB data, 8KB index, 56KB unused

-----------------------------------------------------
--What if we truncate?
TRUNCATE TABLE dbo.welcometable

EXEC sp_spaceused 'dbo.welcometable'
--all 0s
--success!

如果您想實際查看頁面及其所在位置,請使用以下命令:

SELECT page_type_desc, allocated_page_page_id, is_allocated
FROM sys.dm_db_database_page_allocations(DB_ID(),OBJECT_ID('dbo.welcometable'),NULL,NULL,'DETAILED')

這為我顯示了一個 IAM 頁和一個保留區,即使所有行都已被刪除。

在我看來,IAM 頁面仍然被分配。為了找到這個問題的解決方案或至少更好地理解這個問題,我首先在網上搜尋,並在使用者數據庫中創建我自己的 sp_spaceused 過程副本並使用不同的名稱並對其進行調試。

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