天天看點

一名小小的SQL Server DBA想談一下SQL Server的能力

一名小小的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.
  • 基準顯示SQL Server 能夠掌控大型工作負荷:
    • 在TPC-C 基準測試總,SQL Server每分鐘的事務處理超過1百萬,并且在 Windows平台上擁用最好的性能.
    • 在 TPC-H 基準的10項比較中,有7項SQL Server優于DB2.
    • 在一項 SAP-SD 認證基準中 支援 93,000個并發使用者,相當于全球最大的SAP客戶的10倍以上. 
    • 在新的OLTP基準标準-TPC-E中,SQL Server 是無可争議的領先者.
    • 閱讀最新的 SQL Server 2008 基準結果.
  • SQL Server 2008 包括最新的性能與可擴充性 ,能夠優于DB2為大型工作負荷提供更好的性能:
    • o 改進分區表、索引、範圍及其他
    • o 壓縮支援符合甚至超越了IBM DB2 UDB資源管理,能夠控制更細的CPU和記憶體資源
    • o 性能資料收集器可以跨企業定位問題、調整和監控SQL Server執行個體
    • o 高度調整的ETL引擎  目前保持了世界ETL性能紀錄
成功案例
  • 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 DBA想談一下SQL Server的能力

很多人說:“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排程模型不一樣

一名小小的SQL Server DBA想談一下SQL Server的能力

由于本人對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 DBA想談一下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