一、 數(shù)據(jù) 庫版本 數(shù)據(jù) 壓縮 在Sql Server 2008上才支持,2005不行,并且還要是企業(yè)版。我常常忘了這一點(diǎn),在2005的Studio上鬧出語法錯誤的狀況,折騰浪費(fèi)了好一陣才醒悟過來。 二、 壓縮 狀況 大約可以節(jié)省20%-50%的空間,并且行 壓縮 和頁 壓縮 有所區(qū)別。
一、數(shù)據(jù)庫版本
數(shù)據(jù)壓縮在Sql Server 2008上才支持,2005不行,并且還要是企業(yè)版。我常常忘了這一點(diǎn),在2005的Studio上鬧出語法錯誤的狀況,折騰浪費(fèi)了好一陣才醒悟過來。
二、壓縮狀況
大約可以節(jié)省20%-50%的空間,并且行壓縮和頁壓縮有所區(qū)別。
但讓我失望的是,像含有Varchar(max),xml這種字段類型的,反而似乎壓縮不起什么作用。其實(shí)我覺得最需要壓縮的就是它們。
三、行壓縮與頁壓縮
行壓縮是將固定長度類型存儲為可變長度存儲類型。頁壓縮除了行壓縮,還有字典壓縮等等。就是說,頁級比行級壓得更狠,更厲害。通常,表的話我采用頁壓縮;索引,行壓縮。不為什么,想當(dāng)然耳。
四、開始壓縮
壓縮的時候,硬盤要有空余的空間,因?yàn)閴嚎s需要消耗額外的磁盤。比如說,我壓縮一個190GB的表,大概還要額外占用90GB的空間。壓縮完了以后,可以通過收縮數(shù)據(jù)庫文件釋放。釋放了以后空間就連本帶利多上一點(diǎn)。
非分區(qū)表頁級壓縮
ALTER TABLE [table1] REBUILD WITH (DATA_COMPRESSION = PAGE);
GO
分區(qū)表頁級壓縮
ALTER TABLE [partitiontable1]
REBUILD PARTITION = ALL
WITH
(
DATA_COMPRESSION = PAGE ON PARTITIONS(1 TO 11)
);
GO
非分區(qū)索引行級壓縮
ALTER INDEX ix_id
ON table1
REBUILD WITH ( DATA_COMPRESSION = ROW ) ;
GO
分區(qū)索引行級壓縮
ALTER INDEX Ix_Id ON partitiontable1
REBUILD PARTITION = ALL
WITH
(
DATA_COMPRESSION = ROW ON PARTITIONS(1 TO 16)
);
GO
五、壓縮以后收縮數(shù)據(jù)庫文件
DBCC SHRINKFILE ([數(shù)據(jù)庫文件邏輯名], 收縮至多大(以M為單位));
GO
如
DBCC SHRINKFILE ([data_0], 5371);
GO
這個收縮后大小,我是先在Studio中,選中數(shù)據(jù)庫,鼠標(biāo)右鍵,在菜單中選任務(wù),收縮,然后得到這個收縮后的最小尺寸,再抄到腳本上的。
其實(shí)幫助里面說,DBCC SHRINKFILE 不會將文件收縮到小于存儲文件中的數(shù)據(jù)所需要的大小。例如,如果使用 10 MB 數(shù)據(jù)文件中的 7 MB,則帶有 target_size 為 6 的 DBCC SHRINKFILE 語句只能將該文件收縮到 7 MB,而不能收縮到 6 MB。那么我們將5371寫成1,豈不快哉?我沒有試,可能可以。
六、經(jīng)驗(yàn)總結(jié)
壓縮和收縮分區(qū)表、分區(qū)索引消耗好多時間。有個幾十G的分區(qū)表,我壓縮完了以后,收縮花了2天又19個小時,是用腳本執(zhí)行的,一口氣不停歇。
非分區(qū)表則很快,100多G的文件,1、2小時就搞定了。
七、為什么要壓縮
我覺得數(shù)據(jù)庫服務(wù)器的瓶頸往往在于硬盤。象我們的服務(wù)器,8個核,平常時CPU很少上到10%,到30%已經(jīng)頂天了。壓縮的意義,就是將硬盤的壓力轉(zhuǎn)一部分到CPU,正中下懷。
另一個就是,現(xiàn)在我們網(wǎng)站功能逐漸多了以后,數(shù)據(jù)增長也很快。幾年下來,數(shù)據(jù)積累相當(dāng)可觀,現(xiàn)在已經(jīng)用了600多G了。
八、不要用操作系統(tǒng)的文件壓縮
不要去使用只讀用戶定義文件組和只讀數(shù)據(jù)庫的 NTFS 壓縮。結(jié)果沒有壓縮多少,反倒是想將數(shù)據(jù)庫只讀去掉,還要先解壓。死未?
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com