堆(heap)結構時,有一種情形導致表(table)的空間持續增長,卻不能收縮。
一、搭建測試環境
1. 建立資料庫
create database [db01]
on primary
( name = n'db01', filename = n'c:\sqldata\db01.mdf' , size = 5120kb , filegrowth = 1024kb )
log on
( name = n'db01_log', filename = n'c:\sqldata\db01_log.ldf' , size = 1024kb , filegrowth = 1024kb)
alter database [db01] set recovery ******
2. 建立表
use db01
create table table1
(userid int,pwd char(20),otherinfo char(4100),modifydate datetime)
3. 新增記錄
declare @i int
set @i=0
while @i<1000
begin
insert into table1
select @i, cast(floor(rand()*100000) as varchar(20)), cast(floor(rand()*100000) as char(4100)), getdate()
set @i=@i+1
end4.刪除記錄,只保留最後一條記錄
delete table1 where userid < 999
5. 嘗試收縮資料檔案
dbcc shrinkfile (n'db01' , 0, truncateonly)
6. 檢視資料庫的磁碟使用空間
此時,mdf檔案為11mb。而這個資料庫最初建立時為5mb。
二、**空間的2種方法
1. 建立聚集索引,再收縮
create clustered index ix_table1_userid on table1 (userid)
dbcc shrinkfile (n'db01' , 0, truncateonly)
2. 重建表,再收縮
alter table table1 rebuild
dbcc shrinkfile (n'db01' , 0, truncateonly)
MySQL資料檔案收縮問題
mysql使用一段時間後,資料檔案ibdata會增長得很大 主要是針對innodb的儲存方式,有大量插入刪除操作的資料庫 有沒有很好的辦法可以收縮 shrink 資料檔案呢?在網上查了一下,沒有太好的辦法,只提到刪除重建資料檔案的方式,實際就是備份 刪除 恢復的方法,我試驗了一下,基本可行,但還是有...
MySQL資料檔案收縮問題
mysql使用一段時間後,資料檔案ibdata會增長得很大 主要是針對innodb的儲存方式,有大量插入刪除操作的資料庫 有沒有很好的辦法可以收縮 shrink 資料檔案呢?在網上查了一下,沒有太好的辦法,只提到刪除重建資料檔案的方式,實際就是備份 刪除 恢復的方法,我試驗了一下,基本可行,但還是有...
autoShrink和手動收縮資料檔案
1 當autoshrink開啟時,如果手動收縮資料檔案,會提示錯誤,因為此時有個後台執行緒正在收縮資料檔案,那有沒有辦法kill掉這個後台執行緒呢?答案是沒有,只能關閉資料庫選項autoshrink,然後一直等到,直到該執行緒自己結束!詳細的說明在 這裡 2 能不能收縮資料檔案?看看收縮資料檔案的缺...