Sql-Server
sp_spaceused 顯示 0 行但 72 KB 的保留空間
當我執行時,
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 過程副本並使用不同的名稱並對其進行調試。