最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

SQLServer2008中的數(shù)據(jù)壓縮功能

來源:懂視網(wǎng) 責編:小采 時間:2020-11-09 08:25:20
文檔

SQLServer2008中的數(shù)據(jù)壓縮功能

SQLServer2008中的數(shù)據(jù)壓縮功能:SQL Server 2005 SP2為我們帶來了vardecimal 功能 ,這項 功能 使得原來定長的decimal 數(shù)據(jù) 在 數(shù)據(jù) 文件中以可變長的格式存儲,據(jù)稱這項 功能 可以為典型的 數(shù)據(jù) 倉庫節(jié)省30%的空間,而SQL Server 2008在這一基礎(chǔ)上又進一步增強了 數(shù)據(jù) 壓縮 功能
推薦度:
導讀SQLServer2008中的數(shù)據(jù)壓縮功能:SQL Server 2005 SP2為我們帶來了vardecimal 功能 ,這項 功能 使得原來定長的decimal 數(shù)據(jù) 在 數(shù)據(jù) 文件中以可變長的格式存儲,據(jù)稱這項 功能 可以為典型的 數(shù)據(jù) 倉庫節(jié)省30%的空間,而SQL Server 2008在這一基礎(chǔ)上又進一步增強了 數(shù)據(jù) 壓縮 功能

SQL Server 2005 SP2為我們帶來了vardecimal 功能 ,這項 功能 使得原來定長的decimal 數(shù)據(jù) 在 數(shù)據(jù) 文件中以可變長的格式存儲,據(jù)稱這項 功能 可以為典型的 數(shù)據(jù) 倉庫節(jié)省30%的空間,而SQL Server 2008在這一基礎(chǔ)上又進一步增強了 數(shù)據(jù) 壓縮 功能 。 SQL Se


SQL Server 2005 SP2為我們帶來了vardecimal功能,這項功能使得原來定長的decimal數(shù)據(jù)在數(shù)據(jù)文件中以可變長的格式存儲,據(jù)稱這項功能可以為典型的數(shù)據(jù)倉庫節(jié)省30%的空間,而SQL Server 2008在這一基礎(chǔ)上又進一步增強了數(shù)據(jù)壓縮功能。

SQL Server 2008現(xiàn)在支持行壓縮和頁面壓縮兩種選項,數(shù)據(jù)壓縮選項可以在以下對象上啟用:

未創(chuàng)建聚簇索引的表

創(chuàng)建聚簇索引的表

非聚簇索引(對表設(shè)置壓縮選項不會影響到該表上的非聚簇索引,因此聚簇索引的壓縮需要單獨設(shè)置)

索引視圖

分區(qū)表和分區(qū)索引中的單個分區(qū)

為什么需要數(shù)據(jù)壓縮

首先可能需要討論的問題就是為什么在存儲成本不斷降低的今天,微軟還要煞費苦心地在SQL Server中實現(xiàn)并且不斷改進數(shù)據(jù)壓縮技術(shù)呢?

盡管存儲成本已經(jīng)不再是傳統(tǒng)意義上的首要考慮因素,但是這并不代表數(shù)據(jù)庫尺寸不是一個問題,因為數(shù)據(jù)庫尺寸除了會影響到存儲成本之外,還極大地關(guān)聯(lián)到管理成本和性能問題。

首先我們來討論為什么會有管理成本的問題?因為數(shù)據(jù)庫需要備份,數(shù)據(jù)庫的尺寸越大,那么備份時間就會越長,當然另外一點就是消耗的備份硬件成本也會隨之提高(包括需要的備份介質(zhì)成本和為了滿足備份窗口而需要更高級的備份設(shè)備帶來的采購成本),還有一種管理成本就是數(shù)據(jù)庫的維護成本,例如我們經(jīng)常需要完成的DBCC任務(wù),數(shù)據(jù)庫尺寸越大,我們就需要更多的時間來完成這些任務(wù)。

接著我們再看看性能問題。SQL Server在掃描磁盤讀取數(shù)據(jù)的時候都是按照數(shù)據(jù)頁為單位進行讀取的,因此如果一張數(shù)據(jù)頁中包含的數(shù)據(jù)行數(shù)越多,SQL Server在一次數(shù)據(jù)頁IO中獲得的數(shù)據(jù)就會越多,這樣也就帶來了性能的提升。

最后考慮存儲的成本,按照原先SQL Server 2005 SP2中vardecimal的壓縮數(shù)據(jù)為例,30%的空間節(jié)省也就意味著30%的存儲成本,而按照SQL Server 2008當前放出的測試數(shù)據(jù),采用新的數(shù)據(jù)壓縮技術(shù)可以達到2X-7X的存儲率,再加上如果企業(yè)要考慮容災(zāi)而增加的存儲空間,這樣節(jié)省的存儲硬件成本也將是想當可觀的。

如何使用數(shù)據(jù)壓縮

SQL Server 2008中的壓縮選項可以在創(chuàng)建表或索引時通過Option進行設(shè)置,例如: CREATE TABLE TestTable (col1 int, col2 varchar(200)) WITH (DATA_COMPRESSION = ROW);


如果需要改變一個分區(qū)的壓縮選項,則可以用以下語句: ALTER TABLE TestTable REBUILD PARTITION = 1 WITH (DATA COMPRESSION = PAGE);


如果需要為分區(qū)表的各個分區(qū)設(shè)置不同的壓縮選項,可以使用以下的語句:(SQL Server 2008可以對不同的分區(qū)使用不同的壓縮選項,這一點對于數(shù)據(jù)倉庫應(yīng)用是非常重要的,因為數(shù)據(jù)倉庫的事實表通常都會有一個或數(shù)個熱分區(qū),這些分區(qū)中的數(shù)據(jù)經(jīng)常需要更新,為了避免數(shù)據(jù)壓縮給這些分區(qū)上的數(shù)據(jù)更新帶來額外的處理載荷,可以對這些分區(qū)關(guān)閉壓縮選項) CREATE TABLE PartitionedTable (col1 int, col2 varchar(200))
ON PS1 (col1)
WITH (
DATA_COMPRESSION = ROW ON PARTITIONS(1),
DATA_COMPRESSION = PAGE ON PARTITION(2 TO 4));

如果是為某個索引設(shè)置壓縮選項的話,可以使用:

CREATE INDEX IX_TestTable_Col1 ON TestTable (Col1) WITH (DATA_COMPRESSION = ROW);


如果是修改某個索引的壓縮選項,可以使用: ALTER INDEX IX_TestTable_Col1 ON TestTable REBUILD WITH (DATA_COMPRESSION = ROW);


SQL Server 2008同時還提供了一個名為sp_estimate_data_compression_savings存儲過程幫助DBA估計激活壓縮選項后對象尺寸。

數(shù)據(jù)壓縮是怎樣工作的

對于行壓縮,SQL Server 2008采用以下三種方法來節(jié)省存儲空間:

減少了與記錄相關(guān)聯(lián)的元數(shù)據(jù)開銷。此元數(shù)據(jù)為有關(guān)列、列長度和偏移量的信息。在某些情況下,元數(shù)據(jù)開銷可能大于舊的存儲格式。

它對于數(shù)值類型(例如,integer、decimal和float)和基于數(shù)值的類型(例如,datetime和money)使用可變長度存儲格式。

它通過使用不存儲空字符的可變長度格式來存儲定長字符串。

對于頁面壓縮,SQL Server 2008則是在一張數(shù)據(jù)頁面上依次采用:

行壓縮

前綴壓縮

字典壓縮

配置數(shù)據(jù)壓縮功能需要注意的

盡管SQL Server 2008的數(shù)據(jù)壓縮功能非常有價值,但是仍然需要注意一些問題:

數(shù)據(jù)壓縮功能僅在企業(yè)版和開發(fā)版中可用

數(shù)據(jù)壓縮可以讓一張數(shù)據(jù)頁存儲更多的數(shù)據(jù)行,但是并不能改變單行數(shù)據(jù)最長8060字節(jié)這一限制

在一張已經(jīng)設(shè)置了數(shù)據(jù)壓縮的表上創(chuàng)建聚簇索引時,聚簇索引默認繼承原表上的壓縮選項

在未設(shè)置聚簇索引的表上設(shè)置頁面壓縮時,只有以下情況才會獲得頁面壓縮的實際效果:

數(shù)據(jù)使用BULK INSERT語法添加到表中

數(shù)據(jù)使用INSERT INTO ... WITH (TABLOCK)語法添加到表中

執(zhí)行帶有頁面壓縮選項的ALTER TABLE ... REBUILD命令

在未設(shè)置聚簇索引的表上更改壓縮選項,會導致該表上所有非聚簇索引都需要重建,因為這些非聚簇索引指向的數(shù)據(jù)行地址已經(jīng)都發(fā)生了改變。

在改變壓縮選項時所需要的臨時空間大小與創(chuàng)建索引是所需要的空間是一樣的,因此對于分區(qū)表,我們可以逐個分區(qū)設(shè)置壓縮選項來減少臨時空間的需求壓力。

由于SQL Server 2008中數(shù)據(jù)壓縮技術(shù)其實是SQL Server 2005 SP2中vardecimal技術(shù)的一個超集,因此設(shè)置了數(shù)據(jù)壓縮后就沒有必要保留vardecimal了。當然SQL Server 2008為了保持向后兼容性,在當前版本中仍然保留了vardecimal,但是SQL Server 2008的下一個版本及可能就會棄用vardecimal選項,因此做了這些設(shè)置的數(shù)據(jù)庫應(yīng)該盡早改變到數(shù)據(jù)壓縮設(shè)置下。

SQL Server 2008的壓縮選項是工作在存儲引擎層的,對于SQL Server的其他部件來說這一特性是透明的,因此當我們用BULK LOAD的方式將外面的數(shù)據(jù)導入SQL Server時,會顯著的增加CPU的工作載荷,同時將以壓縮的數(shù)據(jù)表導出到外部文件時,可能會消耗比原來多很多的空間

本文作者:

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

SQLServer2008中的數(shù)據(jù)壓縮功能

SQLServer2008中的數(shù)據(jù)壓縮功能:SQL Server 2005 SP2為我們帶來了vardecimal 功能 ,這項 功能 使得原來定長的decimal 數(shù)據(jù) 在 數(shù)據(jù) 文件中以可變長的格式存儲,據(jù)稱這項 功能 可以為典型的 數(shù)據(jù) 倉庫節(jié)省30%的空間,而SQL Server 2008在這一基礎(chǔ)上又進一步增強了 數(shù)據(jù) 壓縮 功能
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top