棄 Windows 而擁抱 Linux 之後,SQL Server on linux教了新玩法
微軟棄 Windows 而擁抱 Linux 之後,國內首本SQL Server On Linux的圖書出版,這本書教了很多新玩法。
SQL Server作為微軟公司著名的資料庫管理系統,多年以來一直穩居各種資料庫排名的前三甲。作為最初由圖靈獎資料庫方面得主詹姆斯·格雷主導開發,並基於另外一點陣圖靈獎資料庫方面得主Michael Stonebraker開發的Ingres發展起來的SQL Server資料庫管理系統,經過30多年的錘鍊,已經得到業內的廣泛認同和應用。
作為早已輕鬆支援TB甚至PB級別資料量的資料庫產品,合理使用SQL Server足以應對絕大部分常規需求。由於某些原因,在國內SQL Server一直不被看好,這個現象從2014年微軟第3任CEO薩蒂亞·納德拉上任,並提出“Microsoft ❤ Open Source”之後得到了很大的改變。隨著.NET、Visual Studio、Office等微軟產品逐步實現跨平臺應用,SQL Server也在2016年正式可執行在主流的Linux平臺上(目前它支援Red Hat/CentOS、Ubuntu和SUSE)。
隨著SQL Server 2017的正式釋出,SQL Server除了跨平臺之外,還引入了大量的新功能,這些功能不僅對資料庫效能及資料庫管理效率帶來明顯的提升,還加快了SQL Server和大資料、人工智慧領域的整合。
鑑於目前國內尚未有系統介紹關於SQL Server在Linux上執行的圖書,同時網上資料過於零散,作者經過近一年的實踐及資料整合寫了《SQL Server On Linux運維實戰》,目的是讓讀者儘快上手,掌握基於Linux的SQL Server的安裝、配置、管理及效能優化方法。書中部分內容不侷限於Linux平臺,但以Linux平臺為主。

《SQL Server On Linux運維實戰》
作者:黃釗吉, 熊章立

掃描二維碼,一鍵購買
SQL Server鳳凰涅槃,浴火重生;
跨平臺,Linux和Windows平臺均適用;
從入門到精通,突出運維監控、效能調優;
融入作者10年工作經歷,系統、實用、經常翻閱的工具書。
通過閱讀本書,你將會了解到如何使用基於Linux的SQL Server,如何更好地管理在Linux上的SQL Server及如何進行常規的SQL Server效能優化。
執行在Linux上的新版SQL Server,將其新特性及強大功能與Linux原生系統的優點進行結合,不僅在運維及效能上帶來巨大的便利和提升,同時對大資料和資料探勘領域的逐步相容[如內建機器學習、圖形處理、相容HDFS(hadoop分散式檔案系統)、Containers(容器)等特性],使得企業不需要從頭開始搭建或者把現有環境遷移到“適合”大資料環境的其他關係型資料庫中。
01
為何選擇Linux平臺的SQL Server
曾經由於大資料產生在Linux環境,SQL Server不能直接訪問HDFS(其實從SQL Server 2012開始它已經可以訪問了,但是需要一些輔助驅動),不能執行在Linux上,所以SQL Server認為是時代的棄子,只能守住現有的一畝三分地,會在傳統領域中掙扎並慢慢消亡。
自現任微軟CEO(薩蒂亞·納德臺)上臺之後,微軟有了翻天覆地的改變,隨著雲優先、移動優先的策略,“Microsoft ❤ Open Source”的大方針不斷深化,微軟故步自封的形象在逐步改變。SQL Server作為微軟非雲專屬(微軟雲有其他資料庫產品如Azure Cosmos DB)的最重要的資料庫產品,在資料技術(DT)時代和人工智慧(AI)時代,自然也有了革命性的改變。
在IT領域工作過的讀者應該多多少少聽說過,在大規模環境下,經過“合理管理”的Linux伺服器在效能和穩定性方面,都比Windows Server好。其中一個例子就是在伺服器重啟頻率和軟體更新、補丁修復工作中Linux明顯比Windows Server表現得更好。
實際上,從SQL Server 2016開始,SQL Server就能執行在Linux環境下。SQL Server 2017的正式釋出進一步實現了其在Windows Server和主流Linux平臺的無縫連線。同時,不只是SQL Server資料庫引擎,還包括SQL Server Agent、某些高可用技術等,它們都能執行在Linux平臺。
接下來我們稍微瀏覽一下為什麼選擇Linux平臺上的SQL Server。
以下僅是作者總結,並不代表官方說法。以下僅是作者總結,並不代表官方說法。
大趨勢:這幾年最火的莫過於DT、AI、大資料、IoT(物聯網)、區塊鏈等,而且無一例外地它們都產生在Linux生態環境下。並非說Windows不好,但是從現狀來看,我們也不得不面對Linux,有Linux方面的知識才能跟得上潮流,不至於被時代淘汰。作為微軟技術從業者,單純學Linux難免有點牴觸。現在可以結合SQL Server來學習,作者認為這是再好不過的切入點,不管合不合理,給自己一個學習的理由並沒有什麼不好。
新版本新體驗:不管是SQL Server還是其他主流的資料庫管理系統,每一次的新版本都帶來了各種新功能、新體驗。在最近幾個大版本(特別是2012及其後續版本)中,在資料引擎、傳統BI甚至大資料領域,都可以看到SQL Server在不停地進步。比如我們可以使用一些功能(如分割槽)對大型庫/表進行管理,藉助In-Memory技術大幅度提升OLTP的效能,通過AlwaysON技術實現讀寫分離和HA+DR方案,提高資源利用率和系統穩定性,另外還能對安全方面的功能進行提升。本書會挑選一些比較重要的特性進行介紹和演示。
純SQL Server的優缺點:除了少部分對SQL Server On Windows或SQL Server On Linux感興趣的讀者可能未接觸過SQL Server之外,大部分讀者都應使用過SQL Server,拋開一些排名,客觀地對比一下現在主流的關係資料庫管理系統。
主流的關係資料庫管理系統
開源:雖然SQL Server不開源,但是Oracle/DB2/SAP這些也不開源。
原生負載均衡:雖然SQL Server不支援原生負載均衡,但是MySQL也不支援。Oracle還得花大價錢購買。
跨平臺:從SQL Server 2016開始它已經不再是討論的話題。
支援資料量:至於較大型的系統(比如單表超過1億行),MySQL恐怕早就要藉助分庫分表或者其他技術來分攤負載,而SQL Server則不一定,在設計合理、硬體充足的前提下,適當進行一些處理(如表分割槽、檔案組拆分等)操作,很容易應對億級表的高效操作。
效能:除非業務邏輯及資料量確定到了一定程度,否則未經專家調優的Oracle也不一定比SQL Server好。同樣,未經調優的Linux,比Windows更不安全。重點還是要看如何使用它們。
口碑:可能作者瞭解不多,到目前為止,作者從未聽過國內出名的Oracle專家(包括各ACE、ACE Director)在公共場合說別的產品(特別是SQL Server)不好,他們不是不清楚各產品之間的差異,而是不想浪費時間精力在這些無謂的爭吵當中。如果你並不同時精通(簡歷上寫的那種不算)兩種或以上的資料庫產品,那麼千萬別輕易進行對比和下定論。還是那一句:不是產品真得不好,而是你水平有限。其實SQL Server活到現在,還是有它的優勢的。另外在寫作本書過程中,作者還看到國內某位Oracle ACED的關於Linux上SQL Server AlwaysON方面的文章,作為Oracle對非內部員工授予的最高稱號獲得者,他們也在學習SQL Server。這裡作者不是想說SQL Server如何好,而是態度問題,要有一個開放包容的態度,你才能走得更遠。
關於Linux上的SQL Server效能,可以見官方提供的資料,必應搜尋“Microsoft, Red Hat, and HPE Collaboration Delivers Choice & Value to Enterprise Customers”。
02
SQL Server On Linux新特性簡介
正如人類進化一樣,傳統資料庫軟體為了應對時代的發展,必須要做出很多的“進化”甚至“革新”。有些是我們看不到的,比如SQL Server 2000到SQL Server 2005就引入了一次徹底的重構,加入了SQLOS,到SQL Server 2016之前,我們大量使用的DMV都來自這裡。從SQL Server On Linux/SQL Server 2017開始,又引入了SQL PAL,這些對於使用者甚至DBA來說都是透明的。這些通常成了產品的賣點。
近年來SQL Server平均每兩年釋出一個大版本,每個大版本又包含了大量的新特性,沒有必要一一詳述,作者會根據經歷及當前需求,挑選一些比較有價值的功能介紹和演示。
完整的新特性列表可見官方文件,可以用必應搜尋“SQL Server 2016 中的新增功能”及其延伸閱讀部分。
按照官方的安裝過程,本節也從資料庫引擎、SSIS、機器學習及相容Linux這4大方面進行介紹,其中每個功能前面的小括號代表著它在哪個版本開始出現。
2.1資料庫引擎
資料庫管理(含資料庫安全)
這部分是資料庫管理系統中的基礎功能。它讓資料庫“可用”,只有可用的資料庫,才能繼續執行效能、高可用及資料利用等功能。SQL Server 2016~2017對資料庫管理有了很多的新增功能或者原有功能的強化,讀者可能會用到的有以下幾個功能。
(2016+)TempDB增強:可在安裝過程中配置多個TempDB資料檔案,對此,作者認為它只是起到“提醒”使用者注意的作用,因為它與過去沒有什麼本質的改變。在過去,對TempDB拆分多檔案本身就是最佳實踐中的一個,只是它沒有出現在安裝過程中。
(2016+)Temporal Tables:官方稱臨時表,但是為了避免與常用的臨時表混淆,本書使用由必應翻譯中得到的另外一個名字“時態表”,它記錄所有資料的更改及其日期,這將在7.5節中詳細介紹。
(2016+)Stretch Database:把本地資料庫的資料動態、安全地儲存到Azure的SQL資料庫中,由SQL Server透明地查詢本地資料和連線資料庫中的遠端資料。它適用於冷熱資料的歸檔。由於目前Linux版本並不支援這些,同時該功能需要使用Azure環境,這並不適合入門,所以本書不介紹它。
(2016+)Always Encrypted:簡稱AE,中文常見名為始終加密。它啟用後,只有具有加密金鑰的應用程式才能訪問資料庫中的加密敏感資料,金鑰絕不會傳給SQL Server。
(2016+)Dynamic Data Masking:簡稱DDM,中文常見名為動態資料遮蔽。使用它後,不具有UNMASK許可權的使用者只能看到經過遮蔽處理的資料。
(2016+)Row-Level Security:簡稱RLS,中文常見名為行級安全性。它可以在資料庫引擎層面上限制資料訪問,使用者只能看到與其相關的資料行。
(2017+)可恢復的聯機索引重建(Resumable Online Index Rebuild):可以在發生故障停止處繼續恢復重建索引,避免重新執行。它類似於暫停功能,對於大型索引的維護有很大幫助。
(2017+)改進高階伺服器上小型資料庫的備份效能:使得備份更具有智慧化。
(2017+)圖形處理:隨著資料分析越來越普及和深入應用,在資料庫中可以通過熟悉的語言來對大量圖形進行處理,但這部分超出了本書範圍。
資料庫效能(含故障偵測)
效能及故障偵測將在效能篇進行深入探討,SQL Server的每一次新版本釋出,都必然帶來效能上的大幅度提升。在過去,要想知道某個時間段執行了什麼SQL語句,導致了什麼效能問題,往往只能從大量的監控資料中獲取,工作量很大,有時候甚至不可獲取(比如宕機或者檔案損壞等),而從SQL Server 2016開始提供的查詢儲存功能能夠很好地減緩這種現象。同時SQL Server 2017出現的智慧優化功能也可以協助那些沒有高水平DBA的企業減少效能影響。
作者挑選了幾個比較有特色的功能,進行一定的演示和介紹。
(2016+)查詢儲存(Query Store):用於儲存查詢文字、對應的執行計劃和效能指標,如耗時最長、佔用CPU或記憶體最多的SQL。詳見12.2節。
(2014+)In-Memory OLTP:從SQL Server 2014開始引入並在後續版本中不斷改進和增強。它對OLTP負載有大幅度的效能提升。詳見第16章。
(2017+)新一代的查詢處理器:可對工作負載的執行時狀態進行優化,也稱自適應查詢處理。過去,我們通常是在事後進行效能分析,這個過程就丟失了大量有價值的資訊,新一代查詢處理器可以針對執行時進行優化,更貼近“理想化”優化。詳見效能篇介紹。
(2017+)自動資料庫優化:由SQL Server自己對潛在的效能問題進行深入研究,提出建議方案並自動解決已標識的問題。詳見效能篇介紹。
等),而從SQL Server 2016開始提供的查詢儲存功能能夠很好地減緩這種現象。同時SQL Server 2017出現的智慧優化功能也可以協助那些沒有高水平DBA的企業減少效能影響。
高可用
在現代社會中,核心系統、大型系統幾乎無一例外都使用了某些高可用技術。高可用的目的主要是使系統儘可能長地線上並提供服務。作為微軟主推的高可用技術,AlwaysON從SQL Server 2012出現開始,它不斷地強化和完善,非常值得學習。
(2017+)AlwaysON全部資料庫支援跨資料庫事務。(2017+)支援無群集、最小副本提交和Windows-Linux跨作業系統遷移。
由於本書的主題是SQL Server On Linux,且不打算深入研究AlwaysON這一足以單獨成書的技術,所以本書把篇幅留在Linux上搭建AlwaysON的演示,對於後續的進階讀者可以參見官方文件或作者部落格。
大資料
(2016+)PolyBase查詢引擎:用於將SQL Server和Hadoop或Azure Blob的外部資料進行整合,它可匯入匯出及查詢。這超出本書範圍。
除了PolyBase之外,SQL Server整合服務(簡稱SSIS)強化了大資料的資料採集,藉助Power BI進行資料分析和展示。這對SQL Server參與大資料的系統搭建帶來了不少的便利。
2.2SQL Server Integration Services
這部分不在本書討論範圍,讀者可用必應搜尋“SQL Server Integration Services”進行深入閱讀。
(2016+)支援AlwaysON可用性組。
(2016+)支援Always Encrypted。
(2016+)支援Hadoop檔案系統(HDFS)。
(2017+)新增Scale Out功能。
2.3機器學習
原為SQL Server R服務,從2017開始,它相容Python,並更名為SQL Server機器學習服務。可以使用“機器學習服務”(資料庫內)在SQL Server中執行R或者Python指令碼,或者使用“機器學習伺服器”(獨立)來部署和使用不需要SQL Server的R及Python模型。這些不屬於本書範疇,感興趣的讀者可以訪問官方資料,使用必應搜尋“What is SQL Server Machine Learning Services?”
雖然本書沒有提及,但是這個服務將會是以後的重點服務,建議讀者多多重視。
2.4相容Linux平臺
SQL Server可以執行在Linux和Windows平臺,並且大部分功能是一致的,除了一些與平臺相關的功能會有所差異,作者相信隨著時間的推移它們將逐步相容。由於SQL Server On Linux正是本書的主要內容,所以這裡暫時不展開。
2.5其他
除了上面4大類之外,Linux上的SQL Server和Windows平臺上的是相同的資料庫引擎,絕大部分功能是一樣的。同時SQL Server On Linux不僅支援Linux還支援Docker。
之所以說大部分功能是一樣的,因為也有不支援或暫未支援的功能,截至2017年10月,SQL Server還有不少需要逐步新增的功能,詳細清單可見官網資料,使用必應搜尋“Linux 上的SQL Server概述”的概述中的“版本和支援功能”。
03
SQL Server On Linux新玩法
在構思本書的時候,作者思考首先它應該是一本工具書,值得隨時翻閱,否則就意味著它過時,沒有價值了;其次它應該是一本介紹系統知識的書(本書更多是以DBA的角度來編寫),不成體系的知識很難掌握。
關於如何使用SQL Server On Linux,需要根據實際需求而定,但是拋開具體行業需要使用不同的功能之外,我們可以考慮針對以下的需求使用某些功能。
效能:使用In-Memory OLTP可極大地提高常規OLTP操作的效能,並對相對靜態的資料使用Columnstore技術,Columnstore特別適合對資料倉庫進行高效查詢。同時可藉助Automatic Plan correction和Adaptive Query Processing對資料庫效能進行更好的優化提升。還可以藉助AlwaysON技術對“讀操作”進行更加智慧的負載均衡。
HA/DR:SQL Server 2017提供AlwaysOn和Read-Scale這兩種不同的可用性組架構。在Linux環境中,前者使用Linux群集的Pacemaker實現高可用、災難恢復和讀負載均衡。而Read-Scale實際上是提供只讀副本來分攤讀操作的壓力,可以不需要群集管理器,所以它特別適用於混合作業系統(Windows-Linux)環境。注意它並沒有高可用功能。
安全:對資料庫進行TDE(透明資料加密)以保護資料庫的安全,然後藉助Always Encrypted功能實現全鏈路加密,還可以按實際所需的安全級別搭配使用RLS、DDM等加密功能。需要重點提醒的是,安全是技術問題也是管理問題,沒有任何一個技術可以完全地杜絕安全風險。
運維:運維問題的重點在於使系統可用,除了一些高可用技術之外,還需要考慮歷史資料、備份檔案的容災能力,另外對大型系統的日常維護也是重點之一,除了過去SQL Server提供的常規功能之外,還可以考慮使用以下3個功能使運維工作更加高效。
使用Stretch Database把歷史資料儲存到Azure上,使得最高效能的資源能專門服務於活動資料。
使用可恢復的聯機索引重建(Resumable Online Index Rebuild)功能,改進大型索引的重建操作。
藉助Azure,把資料庫直接備份到Azure中,減少儲存成本和檔案損壞的風險。
大資料/AI:執行在Linux上的SQL Server內建對Python和R的支援,搭配圖形處理(從SQL Server 2017開始出現),利用Azure上豐富的人工智慧、機器學習還有HDInsight功能,以PowerBI作為資料展示,可以很好地完成大部分的大資料甚至AI工作。在未來的幾年內,作者認為微軟將會在這個領域投入大量精力,使SQL Server不再僅僅是一個傳統的資料庫管理系統。
04
本書結構
這裡大概介紹一下本書的結構,本書目標是在實用的前提下,使其不僅能作為入門書籍,還能作為參考書,隨時翻閱,所以在串聯各種知識點的前提下,也儘量兼顧每章的相對獨立。

本書結構
簡單來說,由於SQL Server在Windows上運行了三四十年,而在Linux上只運行了一年多,加上Linux本身只是一個“核心”。考慮到即使作為一個簡單的伺服器都需要進行較多的配置,所以SQL Server在Linux上需要進行的配置會比較多,而且很多介面操作到了Linux上後被簡化甚至取消了。但總體來說,這並不會造成非常大的影響。

《SQL Server On Linux運維實戰》
作者:黃釗吉, 熊章立

掃描二維碼,一鍵噹噹購買

掃描二維碼,一鍵京東購買
SQL Server鳳凰涅槃,浴火重生;
跨平臺,Linux和Windows平臺均適用;
從入門到精通,突出運維監控、效能調優;
融入作者10年工作經歷,系統、實用、經常翻閱的工具書。
- END -
非同步圖書
聊聊圖書背後的故事
