SQL SERVER 2008的資料壓縮

2021-08-25 06:10:55 字數 1758 閱讀 4054

一、資料庫版本

資料壓縮在sql server 2008上才支援,2005不行,並且還要是企業版。我常常忘了這一點,在2005的studio上鬧出語法錯誤的狀況,折騰浪費了好一陣才醒悟過來。

二、壓縮狀況

大約可以節省20%-50%的空間,並且行壓縮和頁壓縮有所區別。

但讓我失望的是,像含有varchar(max),xml這種字段型別的,反而似乎壓縮不起什麼作用。其實我覺得最需要壓縮的就是它們。

三、行壓縮與頁壓縮

行壓縮是將固定長度型別儲存為可變長度儲存型別。頁壓縮除了行壓縮,還有字典壓縮等等。就是說,頁級比行級壓得更狠,更厲害。通常,表的話我採用頁壓縮;索引,行壓縮。不為什麼,想當然耳。

四、開始壓縮

壓縮的時候,硬碟要有空餘的空間,因為壓縮需要消耗額外的磁碟。比如說,我壓縮乙個190gb的表,大概還要額外占用90gb的空間。壓縮完了以後,可以通過收縮資料庫檔案釋放。釋放了以後空間就連本帶利多上一點。

非分割槽表頁級壓縮

alter table [table1] rebuild with (data_compression = page);go

分割槽表頁級壓縮

alter table [partitiontable1]

rebuild partition = all

with

(data_compression = page on partitions(1 to 11)

);go

非分割槽索引行級壓縮

alter index ix_id

on table1

rebuild with ( data_compression = row ) ;

go分割槽索引行級壓縮

alter index ix_id on partitiontable1

rebuild partition = all

with

(data_compression = row on partitions(1 to 16)

);go

五、壓縮以後收縮資料庫檔案

dbcc shrinkfile ([資料庫檔案邏輯名], 收縮至多大(以m為單位));go如

dbcc shrinkfile ([data_0], 5371);go

這個收縮後大小,我是先在studio中,選中資料庫,滑鼠右鍵,在選單中選任務,收縮,然後得到這個收縮後的最小尺寸,再抄到指令碼上的。

其實幫助裡面說,dbcc shrinkfile 不會將檔案收縮到小於儲存檔案中的資料所需要的大小。例如,如果使用 10 mb 資料檔案中的 7 mb,則帶有 target_size 為 6 的 dbcc shrinkfile 語句只能將該檔案收縮到 7 mb,而不能收縮到 6 mb。那麼我們將5371寫成1,豈不快哉?我沒有試,可能可以。

六、經驗總結

壓縮和收縮分割槽表、分割槽索引消耗好多時間。有個幾十g的分割槽表,我壓縮完了以後,收縮花了2天又19個小時,是用指令碼執行的,一口氣不停歇。

非分割槽表則很快,100多g的檔案,1、2小時就搞定了。

七、為什麼要壓縮

我覺得資料庫伺服器的瓶頸往往在於硬碟。象我們的伺服器,8個核,平常時cpu很少上到10%,到30%已經頂天了。壓縮的意義,就是將硬碟的壓力轉一部分到cpu,正中下懷。

另乙個就是,現在我們**功能逐漸多了以後,資料增長也很快。幾年下來,資料積累相當可觀,現在已經用了600多g了。

八、不要用作業系統的檔案壓縮

不要去使用唯讀使用者定義檔案組和唯讀資料庫的 ntfs 壓縮。結果沒有壓縮多少,反倒是想將資料庫唯讀去掉,還要先解壓。死未?

SQL Server2008 併發數測試

net連線sql server2008資料庫併發數,在預設情況下是100 上面日誌記錄當前連線數991,說實話第一次看到還真以為能達到如此高的併發,後頭仔細一看其數值都是間隔10,所以算下來是100個連線數。修改資料庫連線,在其後面加上 pooling true max pool size 7000...

sql server 2008 游標迴圈更新資料

use 資料庫名稱 declare audio location nvarchar 200 declare unititemid int declare newaudio nvarchar 200 declare my cursor cursor 定義游標 for select audio loca...

SqlServer2008例項15高階資料修改技術

目錄 1.使用top分塊修改資料 2.在一條語句中執行insert update和delete use adventureworks go 建立乙個示例刪除表 select into production.example billofmaterials from production.billofm...