標籤:
一名小小的SQL Server DBA想談一下SQL Server的能力
百度上暫時還沒有搜尋到相關的個人寫的比較有價值的文章,至少在中文網路的世界裡面沒有
但是在微軟的網站有這樣一篇文章:《比較 SQL Server 與 IBM DB2》
文章從下面幾個方面進行了對比
1、TCO和ROI
2、效能和可擴充性
3、高可用性
4、安全
5、管理
6、開發效率
7、商業智慧和資料倉儲
8、OLTP
9、SAP整合
文章介紹得比較牛逼
效能與可擴充性
SQL Server 的效能和可擴充性優於IBM DB2.
成功案例
Citi Group runs Lava market montage解決方案 運行在SQL Server上, 達到每秒200,000次以上的更新頻率
Xerox 採用SQL Server管理每天7百萬的交易處理,達到99.999%已耗用時間
American Power Conversion 遷移至 SQL Server企業版---實現100%的快速回應時間,節省費用800,000美元
VHA 從DB2的大型主機遷移至SQL Server—提升了25%效率, 降低了89%的複製時間, 顯著降低了總擁有成本.
Countrywide Home Loans 選擇了SQL Server以提高效能,獲得高可用性
Microsoft IT 使用SQL Server來驅動 27TB的全球法定安全工具
Nasdaq, 全球領先的科技股交易,即時定票系統,採用SQL Server處理高達每秒5000的事務量.
Unisys UPSS system, 在 SQL Server上架構23 TB的資料倉儲,進入了資料倉儲峰值負荷的Top10行列.
Premier BankCard 將12 TB的資料倉儲和OLTP資料庫升級到SQL Server.
Danske Supermarket 在 SQL Server分析服務上運行600GB的的多維分析,以及10TB的商業智慧資料
還有一個文章《sqlserver的並發處理能力到底如何呀?高手都說說?》
其實這個題目是too open ended,無論大家認為它的定位在Oracle之下,還是只適合於中小型資料庫,我只想說一下它在我眼中的能力
我相信我寫完後其他資料庫愛好者就會出來噴了,Oracle的、MySQL的,畢竟這種文章跟《C#和JAVA哪家強》之類的文章是比較類似的。
我在這篇文章主要講兩個大家最care的方面:資料量、效能和功能
其實大家剛開始用資料庫最關心的莫過於OLTP情境裡面的效能了還有這個資料庫系統的所能夠hold住的資料量
一、hold住大資料量
SQL Server作為一個成熟的商務資料庫,對於hold住大資料量是沒有問題的
正如上面文章提到的:Microsoft IT 使用SQL Server來驅動 27TB的全球法定安全工具
在本人所在公司也有一些比較大的資料庫,資料庫體積大的也有7~8TB,小的幾十MB
很多人說:“SQL Server不能處理海量資料,資料量一大SQL Server就處理不了!”
我想問:“海量資料究竟有多少資料?1億?10億?100億?1TB?10TB?100TB?”
反正我天天都對著這麽多資料(上TB也有、上十億條也有),還是這樣用SQL Server管理它們。
我這裡想說明一下如何比較資料量:比較資料量應該用資料庫的實際佔用體積大小來比較,而不應該用單表資料量的大小來比較!
這裡有一個例子:之前我們資料庫伺服器裡有一個表,有六個欄位,都是int類型,單表資料量已經1億+了,但是資料庫的大小隻有20G不到
在我眼中只是一個比較小的資料庫,雖然它的資料量比較驚人
在園友馬非碼的部落格裡曾經寫到一篇文章《我是如何在SQLServer中處理每天四億三千萬記錄的》,文章是非常多的推薦
但是在我眼裡,文章沒有多少新意,正如我剛才說的,四億三千萬資料可能就<100G的資料,這麽多資料其實跟SQL Server是否能hold住
沒有多大關係,而是跟博主的架構能力有關係,資料庫結構描述無非就是 分表-》分庫-》分機房,解決CAP問題,還有就是MVCC的問題。
實際上,超大型資料庫(VLDB)跟小型資料庫管理起來是不一樣的,這裡我是不管它資料量,我只管它的資料庫實際佔用體積
對於管理大型資料庫裡面的大表,大家第一個想法就是使用表分區來管理它,表分區從SQL Server2005開始推出到現在SQL Server2014還是使用表分區
大家會說,微軟還是沒有什麼突破,還是用這麽老的表分區技術來管理大表,甚至於有時候我做了表分區,但是整個資料庫這麽大,我還是做不了完整備份。。。
貌似在大家的眼中,表分區只是作為一種提升查詢效能的工具,更直接來說,就是提升Select Query效能的利器
但是對於我們DBA來說,分區表的優勢更多的體現在管理方面
分區表的管理優勢如下:
1、壓縮單獨某個分區的資料(SQL2008)
2、按分區的統計資訊(SQL2014 CREATE STATISTICS 和相關統計資訊語句現在允許通過使用 INCREMENTAL 選項建立按分區的統計資訊)
3、聯機重建某個分區的資料(SQL2014 針對聯機索引操作事件類別的進度報告現在具有兩個新資料列:PartitionId 和 PartitionNumber)
4、聯機重新組織某個分區的資料(SQL2005)
5、檔案組備份和分次還原(SQL2005)
6、CHECKFILEGROUP(SQL2005)
7、交換分區(刪除曆史資料或歸檔 或進行ETL)
8、鎖定擴大可以提升到分區鎖,而不是直接到表鎖(SQL2008)
其實只要表分區做得好,分區區間做得合理,定時維護分區表,hold住大資料量是沒有多少問題的。
前年看到一篇文章,對於關係型資料庫,如果資料庫的實際佔用體積到了100TB,關係型資料庫已經無能為力了,該到Hadoop上場的時候了。
本人承認,如果你的資料庫真的有100TB,那麼SQL Server可能會沒有能力handle,但是,你的資料庫真的reached 100TB,那麼你們公司的資料庫結構描述師
是不是有責任承擔這個風險,是不是他的資料庫結構描述沒有做好,沒有分庫分表分機房。
我先不管關係型資料庫是否有能力handle這麽大的資料量,後來我又看了一個視頻。
視頻裡面甲骨文技術產品事業部總經理吳承楊介紹了關係型資料庫和Hadoop的區別,Hadoop是處理非結構化資料的
而關係型資料庫是處理結構化資料的,兩者的側重點是不一樣,Hadoop處理的是海量非結構化資料,一般資料量PB層級
而吳承楊總經理也講到,非結構化資料通常指代的就是網頁資料,Hadoop把這些資料經過處理之後就存放進去關係型資料庫裡面以便查詢
所以不能把Hadoop和關係型資料庫相提並論。
二、SQL Server的效能
效能方面,我只想談論一下IO
大家知道不管Windows還是Linux,都是 使用者程式->OS核心->存放裝置這種架構,使用者程式和OS核心之間存在一套IO介面
同樣,OS核心和存放裝置之間一樣存在一套IO介面,有非同步,同步,存放裝置的Write Through和Write Back等參數
而Linux作業系統的IO行為跟Windows有很多不同之處的,兩者的檔案系統的不同,兩者的IO裝置驅動不一樣,IO調度模型不一樣
由於本人對Windows和Linux的IO調度沒有太深入研究,大家可以參考下面兩篇文章
Linux五種IO模型效能分析
Windows五種IO模型效能分析
其實一般不是太差的資料庫都可以達到上千的TPS,上萬的QPS,上萬的並發串連
由於本人沒有親自測試也沒有環境,就不再詳細說了
之前看過一本書,裡面說Linux的IO調度模型對於使用網路儲存的機器來講更加好,上層的一個請求,對於下層少量的網路資料包
而Windows上層的一個IO請求會對網路儲存發出比Linux還多的網路資料包,好像是iSCSI協議,所以運行在Linux上的Oracle和MySQL會更勝一籌
但是可以說,SQL Server針對Windows系統做過特別最佳化,在TPS和QPS各方面測試中不會跟主流資料庫相差很遠,不然的話SQL Server早就從地球上消失了
三、SQL Server的功能
本人覺得SQL Server的功能做得是比較完善了,最起碼對於一個商務資料庫,其他競爭者有的功能,SQL Server基本都有
例如限制資源使用這個功能
SQL Server的資源管理員可以針對登入使用者限制它所使用的CPU、記憶體、IO資源
而MySQL的Query Throttling針對的是
限制使用者每小時的修改資料庫資料的數量
控制使用者每小時開啟新串連的數量
限制有多少使用者串連MYSQL伺服器
MySQL的Query Throttling偏向於查詢方面的
我這裡不評論好壞,我只想說各有各的優缺點
到目前為止,我還未發現其他資料庫有的功能,SQL Server沒有的,或者本人才疏學淺,可能Oracle有的功能而SQL Server沒有的
比如:Oracle中的位元影像索引,而在SQL Server中位元影像過濾(Bitmap)運算子
相關文章:《SQL Server最佳化器特性-位元影像過濾(Bitmap)》
很多時候只是大家的實現方式不一樣已而,而不代表SQL Server沒有
總結
本人做DBA的時間不長,在學校開始接觸,到畢業之後公司使用SQL Server,到現在由它來帶我進入DBA這個行業
對於SQL Server這個產品,本人是比較感激的,每天跟各位SQL Server愛好者討論如何使用它,不亦樂乎
只可惜SQL Server在中國國內市場越來越不活躍,不知道以後會不會有盡頭。
如有不對的地方,歡迎大家拍磚o(∩_∩)o
一名小小的SQL Server DBA想談一下SQL Server的能力