微軟棄 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 自己對潛在的效能問題進行深入研究,提出建議方案並自動解決已標識的問題。詳見效能篇介紹。
高可用
在現代社會中,核心系統、大型系統幾乎無一例外都使用了某些高可用技術。高可用的目的主要是使系統盡可能長地線上並提供服務。作為微軟主推的高可用技術,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.2 SQL 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 On Linux運維實戰》作者:黃釗吉, 熊章立
-
SQL Server 鳳凰涅槃,浴火重生;
-
跨平臺,Linux 和 Windows 平臺均適用;
-
從入門到精通,突出運維監控、效能調優;
-
融入作者 10 年工作經歷,系統、實用、經常翻閱的工具書。