国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

探密微軟SQL Server 2008中新壓縮特性

2019-11-03 08:34:41
字體:
來源:轉載
供稿:網(wǎng)友
  導語:SQLServer2005SP2為我們帶來了vardecimal功能,這項功能使得原來定長的decimal數(shù)據(jù)在數(shù)據(jù)文件中以可變長的格式存儲,據(jù)稱這項功能可為數(shù)據(jù)倉庫節(jié)省空間,而SQLServer2008在這基礎上增強了數(shù)據(jù)壓縮功能。


  SQLServer中的數(shù)據(jù)壓縮功能,最早是從SQLServer2005開始,在企業(yè)版和開發(fā)版中增加了一種叫做vardecimal的新存儲格式,這通過該功能應用可以影響到decimal和numeric字段。如果數(shù)據(jù)庫里的表含有decimal和numeric類型數(shù)據(jù),用戶就可以使用vardecimal存儲格式來縮小數(shù)據(jù)庫的大小。值得注意的是,能夠節(jié)省出多少空間取決于數(shù)據(jù)庫中含有多少decimal或numeric數(shù)據(jù)列、數(shù)據(jù)分布情況以及表的大小。



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

  而正是這個數(shù)據(jù)壓縮功能,成為SQLServer2008中又一新特性:數(shù)據(jù)壓縮,利用該特性,可以減小數(shù)據(jù)表,索引以及分區(qū)的子集的大小。但是這個之前在SQLServer2005存在的功能,為何要在新一代版本系統(tǒng)中改進,存儲成本不斷降低的市場環(huán)境下,數(shù)據(jù)壓縮技術能給企業(yè)何種好處?


  盡管存儲成本已經(jīng)不再是企業(yè)關注的敏感因素,但是這并不代表數(shù)據(jù)庫尺寸不會對企業(yè)運營中效率有影響,因為數(shù)據(jù)庫尺寸除了會影響到存儲成本之外,還極大地關聯(lián)到管理成本和性能問題。


  首先,因為數(shù)據(jù)庫需要備份,數(shù)據(jù)庫的尺寸越大,那么備份時間就會越長,同時消耗的備份硬件成本提升,還有一種管理成本就是數(shù)據(jù)庫的維護成本。從性能方面,SQLServer在掃描磁盤讀取數(shù)據(jù)的時候都是按照數(shù)據(jù)頁為單位進行讀取的,因此如果一張數(shù)據(jù)頁中包含的數(shù)據(jù)行數(shù)越多,SQLServer在一次數(shù)據(jù)頁IO中獲得的數(shù)據(jù)就會越多,這樣也就帶來了性能的提升。


  相對于SQL Server2005SP2中vardecimal的壓縮數(shù)據(jù),SQLServer2008當前放出的測試數(shù)據(jù),采用新的數(shù)據(jù)壓縮技術可以達到更高的存儲率,再加上企業(yè)對于容災而增加的存儲空間,所有的這些都是SQLServer2008中這一新特性有利一面。


第2頁:兩種壓縮模式

  


  了解壓縮數(shù)據(jù)真正好處之后,可以感受到概念的滲透,借助數(shù)據(jù)壓縮,減少了存儲成本,并提高查詢性能,減少I/O和增加緩沖點擊率。可見,這一個功能在應用過程中還是十分有效果的,SQLServer2008中的數(shù)據(jù)壓縮有兩種應用方式,即行壓縮和頁壓縮,下面對這兩種數(shù)據(jù)壓縮類型簡單做個對比。



數(shù)據(jù)壓縮向?qū)н^程中選擇壓縮類型

  行壓縮。行壓縮可以將固定長度類型存儲為可變長度存儲類型。例如char(100)列儲存在一個可變長度存儲格式將只使用了存儲量所定義的數(shù)據(jù)。儲存的“SQLServer2008”,壓縮后只需要存放15個字符,而非全部100個字符,從而節(jié)省了85%的存儲空間。這是在SQLServer2005ServicePack2中提供的vardecimal存儲格式的思路的延伸。同時需要注意的是,這種壓縮模式,將對所有數(shù)據(jù)類型的NULL和0值進行優(yōu)化,從而使它們不占用任何字節(jié)。


  盡管SQLServer2008數(shù)據(jù)壓縮擴展了這個功能,對所有固定長度的數(shù)據(jù)類型都進行了處理,包括integer、char和float。現(xiàn)在數(shù)據(jù)不是以固定大小的字節(jié)進行存儲,而是用最小所需的字節(jié),只需要啟用行壓縮功能就可以執(zhí)行。但是,行壓縮無法處理xml、BLOB和MAX數(shù)據(jù)類型。


  頁面壓縮模式。這種壓縮功能,建立在行壓縮基礎之上,通過只存儲一次頁面上相同事件字節(jié)來將存儲的冗余數(shù)據(jù)減到最小。使用頁壓縮壓縮表和索引,除了采用行壓縮,還采用了前綴壓縮和字典壓縮。


  數(shù)據(jù)壓縮會減少的大小您的表格或索引指標,最好是先評估一下壓縮后所能節(jié)省的空間。每一個頁都是單獨壓縮的,前綴和字典也存儲在頁內(nèi)。由于頁是存儲分配的原子單位,將半頁壓縮到四分之一頁是沒有任何意義的,所以,只有在頁的內(nèi)容快滿的時候才會開始壓縮處理。


  在使用行和頁壓縮時還有一個性能權衡問題,因為CPU使用率會上升,但I/O使用率和內(nèi)存占用會下降。但這所有的壓縮選項可能成為SQLServer2008企業(yè)版專享選項。


第3頁:如何使用數(shù)據(jù)壓縮


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


  (1)啟用行壓縮


  如果我們要在指定的表上啟用行壓縮,可執(zhí)行以下語句:


  CREATE TABLE Alpha(col1 int,col2 char(1000))


  WITH (DATA_COMPRESSION = ROW)


  (2)啟用頁壓縮


  如果我們要在指定的分區(qū)上啟用壓縮,可執(zhí)行以下語句:


  CREATE TABLE Alpha_Partition(col1 int,col2 char(1000))


  ON PartitionScheme(col 1)


  WITH


  (DATA_COMPRESSION = PAGE ON)


  PARTITIONS(1-3)


  (3)修改壓縮


  如果要把一個現(xiàn)有的索引修改為使用壓縮,可執(zhí)行以下語句:


  ALTER INDEX Collndx ON Alpha REBUILD


  WITH (DATA_C0MPRESSION=PAGE)


  ALTER INDEX Collndx ON Alpha REBUILD


  partition = 2


  WITH (DATA_COMPRESSION=PAGE)


  SQL Server 2008中的壓縮選項可以在創(chuàng)建表或索引時通過Option進行設置,例如:


  CREATE TABLE TestTable (col1 int,col2varchar(200))WITH(DATA_COMPRESSION = ROW);


  如果需要改變一個分區(qū)的壓縮選項,則可以用以下語句:


  ALTER TABLE TestTable REBUILD PARTITION = 1 WITH(DATACOMPRESSION=PAGE);


  如果需要為分區(qū)表的各個分區(qū)設置不同的壓縮選項,可以使用以下的語句:(SQLServer2008可以對不同的分區(qū)使用不同的壓縮選項,這一點對于數(shù)據(jù)倉庫應用是非常重要的,因為數(shù)據(jù)倉庫的事實表通常都會有一個或數(shù)個熱分區(qū),這些分區(qū)中的數(shù)據(jù)經(jīng)常需要更新,為了避免數(shù)據(jù)壓縮給這些分區(qū)上的數(shù)據(jù)更新帶來額外的處理載荷,可以對這些分區(qū)關閉壓縮選項)


  CREATE TABLE PartitionedTable (col1 int, col2varchar(200))


  ON PS1 (col1)


  WITH (DATA_COMPRESSION = ROW ON PARTITIONS(1),


  DATA_COMPRESSION = PAGE ON PARTITION(2 TO 4));


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


  CREATE INDEX IX_TestTable_Col1 ONTestTable(Col1)WITH(DATA_COMPRESSION = ROW);


  如果是修改某個索引的壓縮選項,可以使用:


  ALTER INDEX IX_TestTable_Col1 ONTestTableREBUILDWITH(DATA_COMPRESSION = ROW);


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 东乡族自治县| 汝州市| 华亭县| 四子王旗| 大埔区| 孙吴县| 柳州市| 闻喜县| 罗江县| 锡林郭勒盟| 临泉县| 徐水县| 临安市| 绥江县| 伽师县| 左权县| 汕尾市| 萨迦县| 西城区| 田林县| 陆丰市| 乐亭县| 于都县| 双鸭山市| 南投市| 象州县| 金昌市| 金溪县| 喀什市| 通化市| 三明市| 阳城县| 通山县| 青龙| 宁都县| 汉阴县| 凤凰县| 缙云县| 乌拉特前旗| 承德县| 乌兰浩特市|