天天看點

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

美國時間2017年10月2日,微軟正式釋出了最新一代可以運作在Linux平台的資料庫SQL Server 2017。SQL Server 2017給使用者帶來了一系列的新功能特性的同時,也展現了微軟關于自家關系型資料庫平台建設方面的最新設計與思考。這篇文章旨在介紹SQL Server 2017新特性,以及微軟是如何從架構層面的演進來快速實作Linux平台的SQL Server 2017産品。

早在2016年,當微軟宣布SQL Server将很快在Linux上運作時,這一消息對使用者、權威人士以及SQL Server從業者來說都是一個巨大的驚喜。果然,微軟不負衆望,在美國時間2017年10月2日,正式釋出了最新一代可以運作在Linux平台的資料庫SQL Server 2017。近年來随着各類NoSQL資料庫産品和Hadoop生态的出現與流行,給了傳統關系型資料庫(RDBMS)帶來了巨大的挑戰。從微軟提供Linux版SQL Server這件事情,我們可以詭探出微軟大的戰略轉型:變得更加開放、包容和擁抱變化,而不是像以前一樣與自家的微軟系列生态系統緊密的捆綁在一起。微軟的這種良性轉變,對使用者和SQL Server資料庫從業者來說也是巨大的福音。是以,可以說SQL Server與Linux相愛了,SQL Server 2017就是他們愛的結晶。

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

微軟對于新一代資料庫産品SQL Server 2017的釋出,植入了非常多的新特性和看點,重要包括:

對Linux平台的支援:當然最大的特性是對Linux平台的支援。

對容器類産品Docker的支援:對容器類産品的支援。

内置圖資料庫:将圖資料庫功能内置到SQL Server引擎中。

内置機器學習功能:對Python語言的支援,大大擴充了機器學習功能特性。

自适應查詢處理:全新的Batch Model查詢語句執行方式,邊執行便優化。

SQL Server 2017對Linux平台的支援,是它最大的看點和進步,說明微軟擁抱變化的決心初現成果。SQL Server 2017支援的Linux平台包括:

RedHat Enterprise Linux (RHEL)

SUSE Enterprise Linux (SLES)

Ubuntu

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

[1]:SQL Server 2017對Linux平台的支援

SQL Server 2017除了支援這些常見的開源Linux平台外,還支援将SQL Server服務跑在容器中,這一點對于需要将SQL Server服務進行容器化管理的使用者來講,非常便利。SQL Server支援的容器産品包括:

Windows Container:微軟自家親兒子,是不遺餘力的毫無疑問支援。

Linux Docker:目前最為火爆的容器技術,當然也是支援的。

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

SQL Server 2017中内置了關于圖資料的查詢功能,使得圖資料的查詢變得簡單而高效。

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

SQL Server 2017中提供了R語言和Python語言的支援,使用者可以利用列存技術和記憶體優化表存儲基礎資料,然後利用Python語言本身關于機器學習的天然優勢,來實作深置于資料庫系統内部的機器學習,實時分析,及時決策的目的。

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

[1]:SQL Server 2017提供機器學習功能

針對于SQL Server Batch Model Processing查詢語句,SQL Server 2017引入了自适應查詢處理機制,使得查詢更加高效。簡單的講就是一邊處理查詢一邊進行優化的政策,而不是傳統的根據統計資訊首先生成執行計劃。這樣可以應對很多因為統計資訊過時或者統計資訊片面導緻的執行計劃不準确的,而影響查詢性能的場景。

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

按照以往微軟對SQL Server資料庫産品的釋出節奏,一般情況下是兩年一個大版本更新疊代,比如SQL Server 2012,2014和2016。但是,SQL Server 2017的釋出僅僅隻用了一年時間,而且實作了Linux版本SQL Server的巨大轉變,并且所有功能和Windows版本對齊。很多使用者和從業者對這一點都非常好奇,微軟到底是如何做到這一點的?要回答這個問題,我們從SQL Server底層的架構演進來分析這個問題的答案。總結來看,到SQL Server 2017的出現,微軟對資料庫底層架構的演進經曆了以下幾個階段:

使用Windows對SQL Server系統進行資源管理:這個階段沒有一個特定的名稱叫法,這個階段的SQL Server服務無法突破Windows核心對資源的限制。

SQL OS階段:為了使得SQL Server資料庫擁有更好的性能,SQL OS(也叫SOS)出現了。

Drawbridge的出現:研究性項目,用于實作應用的沙盒(Sandbox),最開始不是為SQL Server專門設計的,但在SQL Server 2017中扮演中非常重要的角色。

SQL PAL的出現:SQL Server 2017整合了SQL OS和Drawbridge,進行底層封裝,形成了SQL PAL層。

追述到SQL Server 2005版本之前(SQL Server 2000及更早版本),SQL Server服務是以一個使用者态程序運作在Windows作業系統中,這個服務程序與其他普通的程序沒有任何差異,它依賴于作業系統核心對底層硬體資源進行管理和互動,SQL Server服務本身沒有對系統資源的管理能力。具體的架構圖大緻如下所示:

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

這個架構最大的缺點是SQL Server服務本身無法突破Windows核心對系統資源使用的限制,換話句話說SQL Server無法榨幹系統硬體資源,加之缺乏對作業系統資源的控制能力,隻能依賴于作業系統核心對底層硬體資源進行排程,是以SQL Server服務很難最大限度充分利用系統所有硬體資源,阻礙了SQL Server系統性能的進一步提升。

為了解決上面的問題和擷取更好的性能,微軟花了很大的力氣來抽象一個中間層對系統硬體資源進行排程和管理,并釋出在SQL Server 2005版本中,也是以SQL Server 2005版本經曆了長達5年的時間才得以面世。這個對硬體資源進行集中排程和管理的中間層叫着SQL OS(也叫着SOS)。SQL OS的主要職責包括:Processor Scheduling,Memory Management,Network,Disk I/O使得SQL Server性能最大化(可以使得SQL Server使用者程序最大限度的充分利用作業系統硬體資源)。SQL Server 2005引入了SQL OS後的底層架構圖如下所示:

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

SQL Server 2005賦予了SQL OS非常全面的資源管理功能,涉及到資料庫系統核心功能的方方面面,具體包括:

Deadlock Monitor:死鎖監控

Resource Monitor:資源監控

Lazy Writer:延遲寫,将随機I/O寫,轉化為順序I/O寫

Scheduler Monitor:排程器監控

Buffer Pool:緩存池

Memory Manager:記憶體管理

Scheduling:排程

Synchronization Service:同步服務

Lock Manager:鎖管理器

I/O:I/O資源管理

詳細架構如下圖SQLOS API部分所示:

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

有了SQL OS層次的抽象,得以在資料庫内部實作對系統資源的集中管理,擺脫系統核心對SQL Server資源使用的限制,使得SQL Server服務隊系統資源有了很強的控制能力,SQL Server 2005性能有了大幅的提升,成了微軟關系型資料庫曆史上劃時代的版本,也為SQL Server 2017能夠提供跨平台能力提供了可能性,可以毫不誇張的說,沒有SQL OS的出現,微軟不可能在如此短的時間内實作Linux版的SQL Server。

微軟研究院在2011年9月建立了一個全新的研究性項目,名稱叫Drawbridge,目的是提供應用程式新的虛拟化資源隔離解決方案,減少虛拟資源的使用,使得在同一個硬體主機上,可以運作更多的虛拟機(類似于Docker産品對硬體資源的管理)。Drawbridge其中一個非常重要的元件Library OS僅依靠約50個底層核心應用二進制接口(ABI:Application Binary Interface)實作了一千多個常用的Windows API,同時還具備了為其他元件提供宿主的能力,比如:MSXML和CLR等元件。 在Windows 10版本中存在着Drawbridge的大量應用。

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

SQL Server資料庫團隊基于Drawbridge項目與SQL OS兩者進行了必要的重寫和充分的融合,形成了新一代資料庫底層抽象和封裝,叫SQL PAL (Platform Abstract Layer),同時将上層邏輯代碼移植到SQL PAL之上。如此,微軟隻需要確定SQL PAL層可以在Windows平台和Linux平台運作良好即可。這樣SQL Server即使運作在Linux平台,也無需修改SQL Server本身的代碼,SQL Server自己本身與平台無關。能做到這一點完全是由Drawbridge中的ABI(Application Binary Interface)來達到目的的,這些ABI我們叫着Host Extension,是以為了支援SQL Server 2017的跨平台特性,微軟隻需要實作基于Windows平台的Host Extension和Linux平台的Host Extension,這樣做最大的好處是:

大大縮短開發周期:微軟無需對SQL Server本身做任何的代碼修改就可以将SQL Server移植到Linux平台。

産品功能一貫性:對SQL Server新功能、新特性的支援,無需對兩個平台進行重複開發,Windows平台支援了,Linux平台也就支援了,保持了産品功能的一緻性。

良好的後期維護性:假如SQL Server存在某個Bug,隻需要修複SQL Server本身,那麼Windows平台,Linux平台上相應的Bug也同樣被修複掉了,具備良好的可維護性。

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

以上架構圖是比較宏觀的層面展示,以下是SQL PAL功能更為詳細的描述架構圖:

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

[1]:SQL PAL詳細架構圖

從這張圖,我們可以清晰的看到SQL PAL層次對于Host Extension的調用,以及建構在這層次之上的SQL Server服務,包括:資料庫引擎、內建服務、分析服務和報表服務。

提到SQL PAL對SQL Server 2017資料庫服務的影響,很多使用者最為擔憂的應該就是性能的影響了。請不要擔心,根據TPC-H測試來看,SQL Server 2017相對于SQL Server 2016來看,性能不但沒有任何損失,反而性能不降反升。

從TPC-H測試資料總結來看,相對于SQL Server 2016來看,不論是性能和成本效益,都有小幅提升,如下截圖:

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

[1]: SQL Server 2017 TPC-H性能比較

附帶TPC官網公布的性能資料截圖:

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

以下展示微軟内部測試執行個體,在擁有一台12 TB記憶體,480個邏輯CPUs的機器上,處理30 TB,2500億條資料的8個字段的3種類型複雜統計彙總查詢,耗時僅用18秒。由此可見,性能還是相當強勁的,截圖留戀:

MSSQL · 架構分析 · 從SQL Server 2017釋出看SQL Server架構的演變

本篇文章介紹了SQL Server 2017支援Linux平台,支援容器化,内置圖資料庫,内置機器學習和自适應查詢處理的功能新特性;同時從底層架構演進的層面分析了微軟能夠在短時間内實作Linux版SQL Server 2017的根本原因是SQL PAL架構中間層的出現,而SQL PAL是站在SQL OS和Drawbridge的肩膀之上的。由此可見,微軟對SQL Server支援Linux平台在SQL Server 2005版本中已經開始布局,應該說還是非常具有遠見的。

1:圖檔來自于微軟Lindsey Allen的教育訓練“SQL Server 2017 - Power your entire data estate from on-premises to cloud”截圖。

2:圖檔來自于吳曉晨在雲栖大會上關于“SQL Server 2017”的分享。

3:圖檔來自于“Everything you need to know about SQL Server 2017”截圖。

4:截圖來自于《Inside Microsoft SQL Server 2005_ The Storage Engine, 2005 Edition》Components of the SQL Server Engine章節。