淺析SQL Server 2008企業級新特性

iSQlServer發表於2009-10-15

SQL Server 2008已經發布,我們可以看到它在各方面都有了顯著的進步,這些讓人側目之處和失望之處都有可能極大地影響大型企業的採購意向。

  微軟SQL Server 2008的開發代號是Katmai,這個名字來源於阿拉斯加半島東端阿拉斯加州北部阿留申山區的一座活火山,對資料庫而言,可能並不是個最好的比喻(嘿嘿,目前為止,Katmai火山還沒有在我頭上爆發過)。低調的Katmai看起來似乎是Yukon的一個好的接班人,而Yukon是SQL Server 2005的開發代號。

  在基於對SQL Server 2005徹底的、面向企業的改進之後,Katmai為大規模部署帶來了非常引人注目的特性,比如資料庫引擎中的資料及備份壓縮、稀疏列、壓縮與過濾索引,這些功能都是為了節省儲存空間,環保、綠色;另外,別忘了還有Change Data Capture,其在表中捕捉生成資料的差別,以便更新資料倉儲。

  這些都只不過是冰山一角(喔,不是冰山是火山),還有許多其他的新特性,如基於策略的管理——這是針對中小企業和大型企業的,不僅這些,SQL Server 2008的各個方面都讓人留下了深刻的印象。

  更多的資料,更少的儲存空間

  一般來說,資料庫中有兩種型別的壓縮:行壓縮與頁壓縮。實際上,它們以不同的方法壓縮資料,因此,很有必要理解兩者的優勢所在及它們的工作方式。行壓縮是真正的壓縮,為什麼資料庫引擎會刪除列尾未使用的空間呢?當然這是為了節省空間。這正是SQL Server在vardecimal壓縮中使用的同一技術,微軟只不過把它擴充套件到其他資料型別上了。

  而頁壓縮使用的是眾所皆知的字典壓縮,它把每頁中的資料標準化之後並保留一個查詢指標。這也是Oracle Database 11g所使用的技術,只不過Oracle稱之為Oracle高階壓縮。在此,我們無須對兩種壓縮方式瞭解過多,但必須知道SQL Server的頁壓縮包括了更低階的行壓縮,換句話來說,如果你開啟了頁壓縮,就自動開啟了行壓縮。

  在SQL Server 2008中,微軟已經包含了幾個儲存過程,以方便你在開始壓縮之前,就可以估計使用哪種壓縮方法之後,兩者的節省水平,以及解壓資料庫之後,資料將會擴充套件到多大。這是一個非常重要且體貼的功能,因為你不僅需要了解是否值得花時間壓縮,而且還要知道磁碟是否處理得了還原後未壓縮的資料。但要緊記的是,這些儲存過程是基於小範圍的統計上的隨機資料取樣,如果碰巧遇到一個資料上的取樣失誤,那麼就會得到錯誤的估計結果。

  另外,微軟實現壓縮的方法,節約的不僅僅是儲存資源,資料還可以在記憶體中保持壓縮狀態,只在讀取時才解壓,這意味著你可以把更多的資料頁裝入記憶體中,由此減少磁碟讀取次數,而CPU用於解壓的時間,也遠遠少於磁碟尋道的時間。

  稀疏列允許你儲存空值而無須佔用物理空間,如果在一張“巨大”的表中,列有許多空值,可能會浪費大量的磁碟空間來跟蹤這些空值。而把空值儲存在稀疏列中則不會佔用任何空間,儲存需求也會隨之降低。

  在使用稀疏列時要非常留意一點,它們與壓縮不相容,坦白地說,這是微軟的一大失誤。希望本著為使用者著想的原則,在某個Service Pack中就能更正這個問題,而不是要等到下個版本。同時,如果你在表中也定義了稀疏列,那麼也不要指望會壓縮表中的資料,真是不知道微軟是怎麼搞的,這些本不應該出現在正式產品中的。如果非要說稀疏列與壓縮他倆是一對完美的組合,那“如花”可能也配得上金城武了。

  壓縮索引還像碼事,至少名符其實,這又是節省儲存空間的另一個方法。過濾索引可以在索引上放置一個where子句(如某條查詢),以便只有表的一部分被索引。聽上去似乎不太妥當,但在某些情況下你可能就會想要過濾某些索引了,舉個例子來說,在使用稀疏列時,有了過濾索引就無須保持一個包含了主要是空值的索引,你可在稀疏列上放置一條索引,只取那些非空值就行了。這樣做以後,只有那些帶有實際值的行會被索引,而索引的體積也會相應大幅減小。

  -------------------------------分頁欄-------------------------------

  工作負荷是好,還是差?

  Resource Governor是微軟在SQL Server中真正對資源管理的一次嘗試,老實講,根本就比不上Oracle,但仍是一個好的開始。SQL Server 2008允許你在記憶體和CPU中定義資源限制,但在重負荷工作情況下仍然差強人意。

  微軟對此的回應是,Resource Governor不是旨在滿足重負荷工作要求,在這第一個版本中,目標僅是管控工作負荷中的那些資源,以防止它們變成“野”程式。當然了,這仍未解決過度佔用磁碟或處理器時間的問題。在SQL Server 2008中,如果一個程式開始佔用過多的資源,那麼也沒有辦法自動把它挪到一個定義好的Resource Governor中,也就是說,一個程式要麼在資源上受Resource Governor管控,要麼就不受控。

  其實這個特性最大的受益者是OLTP(線上交易或聯機事務處理)系統,其只會產生一些輕量級的資料,如果不想它佔用過多伺服器資源,可把查詢程式放入它們自己的Resource Governor中,以管控資源使用量,使伺服器的大部分功率都用於OLTP負載,賺取真正的“真金白銀”啊。

  CDC(Change Data Capture,改變資料採集)是一個非常好的功能,我想對那些整日與ETL(取出、轉換、載入)處理“扭打”的資料庫管理員來說,它會非常受歡迎。CDC允許SQL Server在定義的列中,捕捉到哪些行列已改變,並把變化的結果放入到一張可被ETL查詢的單獨的表中。好處顯而易見,對哪些行被插入、刪除或更新,就不再需要廣泛地進行查詢了。當前來說,在一張表中發現這些操作並不容易,經常還需要編寫程式碼才能找出來。但有了CDC之後,你就可在資料庫級別上定義這些審計策略,不用修改程式程式碼,一邊看報紙喝茶去囉。

  SQL Server 2008還帶來了基於策略的管理(PBM),其是一種可為任何事件定義策略(規則)的方法,可在伺服器超出策略時,要麼強制執行,要麼發出警報。你幾乎可在策略中定義任何事情,甚至像“表名不能以tbl打頭”這樣的策略也可以強制執行;還可以定義如“所有資料庫都應每天備份,如果某臺伺服器缺少備份,應發出警報。”PBM正成為SQL Server發展中一個非常強大的工具,至少我也非常喜歡它。

  SQL Server 2008的閃光之處

  SQL Server 2008帶來了太多的新功能,片言之間難以表述,筆者甚至都還沒有試一下完全重寫後的SQL Server Reporting Services,或體驗一下SQL Server Integration Services、SQL Server Analysis Services中的全部功能,還有新的資料倉儲、互動式Dundas向下搜尋報告、IntelliSense(智慧感知)、新的活動監視器、整合PowerShell等等。

  對多數大型企業來說,我認為SQL Server 2008最大的亮點在於資料壓縮及CDC,因為兩者都會影響到企業的預算。Resource Governor是一個非常好的功能,但目前它還比較“稚嫩”,侷限太多,還未達到微軟期望的水平,相信再經過幾個版本,它定會不負眾望。

  壓縮及過濾索引這次想必給大家帶來了不一樣的感覺,雖然過濾索引存在上面提到的一些小問題,但如果你把它們用對地方,也能看到所期望的效能提升。另外,在其他工具方面也有了一些重大的改進,但對資料庫管理員來說,他們可能要失望了,因為這些改進都是針對開發人員的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-616636/,如需轉載,請註明出處,否則將追究法律責任。

相關文章