SQL2019 像個巨人,連國外證交所的即時搓合,這類的海量交易也難不倒它。在職涯中,你或許曾經有跨過幾個不同的版本,但是安裝的過程太順利!在幾個下一步+下一步就結束了,根本感覺不出來這個超過 30歲的 SQL Server強在什麼地方?殊不知,在資料庫的戰場中,每天至少都有上百個產品在撕殺,大家在 OLTP上比效能比市佔率;在 OLAP上比Cube/Tabular模型比Column stored index;在 Big data上比對海量資料的支援比對非結構化資料的支援;在 AI上,比演算法比分散式運算。另外,由於每個人的工作職掌不同,本文還會從使用情境、效能、預算的角度,帶大家一起來探討如何挑選適合的版本?
前言:
一般來說,當客戶有新的業務需求時,會考慮為其 Application 選擇一個適合的 Database,另外,當微軟地端 SQL server 遇到十年生命週期的到來( EOS aka. end of service),又會是另一個產品介紹的高峰。自 SQL2016 以來,價格調漲、4核心的低消(包含不管是虛擬機環境或是容器化的環境都要以伺服器上面的實體核心數來滿足這個條件),相較於最大的競爭對手 Oracle,客戶覺得二者的價格差距愈來愈近,甚至提出想要購買物超所值的舊版 SQL2008 R2,本文將會由 SQL Server 的產品發展以及新版本的特色,說明消費者要如何選擇適合你的資料庫版本或是功能模組。
歷史:
為了產品的長遠發展,SQL server 從2000年才正式向 Sybase 買下了合作多年的產品 SQL engine,RD在取得原始碼 source code 踏出了分家的步伐,經過將 SQL Engine、SQLCMD (指令界面)、DTS、Replication...等相關服務,透過強大的產品包裝與銷售能力,快速地滲透商業市場。為了廣大的程式開發市場,SQL2005 不惜遲到了一年,才將整體的相關服務,例如 Replication Services (資料同步功能), Service Broker (訊息佇列), Analysis Services (商業智慧), Reporting Services (報表), Notification Services (通知), Integration Services (ETL), Full Text Search Service (全文檢索), Machine Learning Services (早期的 Data mining 到近期的 ML)…等全面改寫,以利與自家的程式開發產品Visual studio 整合在一起(尤其是 CLR),也終於在這個版本能與 Sybase 分道揚鑣,開啟了 OLTP與 OLAP新的里程碑。在2012年開始,配合雲端時代的 Devops,除了最重要的DB 對雲端環境的支援(OLTP)與 OLAP的 Tabular mode(取代舊的 Cube)推出,從每年一個版本的傳統瀑布式開發,改成每三個月一個版本的 Aglie 敏捷式開發 (雲端的版本甚至是每一個月一個版本),但必竟微軟是一家品牌公司,其上市的版本並不是與開發時程切齊的,而是要配合自家其他的產品與市場行銷的節奏來決定,所以它的歷程為 SQL2000(解決 Y2K危機,並於 .com 時代中提出能一站式滿足 OLTP與 OLAP的高 CP值產品)、SQL2005(配合微軟的開發工具滲透更大的開發市場Visual Studio +SQL CLR,支援 XML,在BI的市場上將 Data mining 演算法增加至8個…)、SQL2008(在R2版本正式支援64位元的硬體環境,以新的TDE資料加密與 Policy based 來滲透有稽核需求的大型企業,在BI的市場增加有預測功能的演算法)、SQL2012(推出能上雲端的混合式資料庫,在 BI的市場推出 Tabular model 來過渡 Cube 舊架構)、SQL2014(配合競爭對手Oracle 推出搶攻市場第一版的 In-memory 記憶體運算資料庫產品)、SQL2016(配合 Oracle 推出第二版的 In-memory 產品,在併購 Revolution Analytics 所推出的 Machine learning service 來提供對 R語言的支援,以及稍晚在併購 Datazen 公司所推出的 Mobile report 企業版行動報表功能)、SQL2017(搶攻 Linux 市場的商業資料庫產品,在 ML又新增了對 Python 的支援),另外,中間有個過渡的名稱叫 VNext、SQL2019(透過 Big data cluster,在 ML又新增了對 Java 的支援)
機會與挑戰:
- 資訊安全:
我爸朋友說他們公司有退役下來的3000元福利品 NB,超大硬碟與4核心 i5 CPU,問我可不可以買?我請他做一個實驗之後,他馬上打退堂鼓,打消了這個念頭。我請他檢查是否能開機?接著請他再打開瀏覽器進入 Google 搜尋任一則新聞事物,或是其他我故意要他照訪的 https:// 網址,都會出現 this website doesn't work with Internet Explorer。我跟他說,舊的 OS 與 Browser 存在著很大的風險,連防毒軟體都無法保護你,不管是查詢資料或是寄發郵件,等於你是選了國王的新衣在網際網路上裸奔…
同理,EOS 的 SQL2008 R2 就算你在虛擬化環境執行成功,即使你是躲在防火牆後面,沒二下你就被 Cracker 拿下了,或是對方已經對你發動了 APT 攻擊你還不自覺(像是第一銀行盜領案) 。所以,如果你的版本沒有與時俱進,再安全的資料庫也保護不了公司的資產…
- 大數據:
根據著名商業智慧公司 Domo (那斯達克上市公司) 的研究,地球上每一個人類平均在每秒鐘會製造出 1.7 MB的資料量,以目前主流 TB 等級容量的硬碟根本撐不了多久。
隨著時間的推移,一家企業如果還沒有改善其資料庫的儲存方式,先不管網路傳輸的架構與速度上限,短期將會遇到硬碟空間的不足,與磁碟機代號的不足(在Windows作業系統中由 C:\ 到 Z:\ 只能支援到 24個代號)。
中期將會遇到資訊孤島的問題,換句話說,當企業因應不同的需要購買了許多不同的解決方案時,高階主管會需要將不同的資料來源進行彙總,以得到支援決策的所需資訊。但是企業中未必願意投資在 Data virtualization 的解決方案來整合關聯式資料庫、NoSQL、Hadoop/Spark、Saas服務…是否有高 CP值的解決方案能滿足需求呢?
長期則會遇到少數結構化(專業公司產品)與大多數非結構化(開源為主)並存的問題,從資料探勘到人工智慧,雖然能夠由非結構化資料轉換成結構化的比例還是很受限,但愈來愈多企業主為了資料中隱藏的含金量,開始會考慮透過資料湖 Data Lake來儲存交易資料以外的客戶對話、系統日誌 Log、社群留言、監控影片檔…但是又擔心開源解決方案在資訊安全、問題回應、專業服務…等需求面的問題,是否有專業公司能滿足這些需求,並且能支援與時俱進的系統環境,例如容器化?
- 高效能:
企業或許對於 SQL2005 以下的版本會有 SQL Server 在效能上的 Concern,但是隨著時間推移,在與 Oracle 方興未艾的競爭中,雙方在 OLTP與 OLAP中的舞台上,已經呈現不分軒輊的局面了 (關於TPC的評比,細節可以參考之前的文章)。
若是可以選擇雲端資料庫的版本,甚至可以直接解決地端環境的天缺(資料碎片所造成的效能下降),並且基礎於 Query Store 來實現的 Auto tuning 與 Auto indexing 的功能,可以自動增減其索引,讓 User database 的效能可以一直保持在最佳化,大大的降低 DBA的負擔。但是考量許多企業在地端的環境,會朝向購買一台64核心這類型的 Powerful 伺服器,來運行多個 Instance,但是這種 Auto tuning 是屬於全域變數,可能治好了 A Instance 卻壞了 B Instance,所以這個的功能需要由 DBA 費心來謹慎使用。
另外,眾所皆知都了全球前500大的超級電腦都是採用 Linux 作業系統,在 Oracle 的作業系統也大多是 Unix/ Linux的選擇,因為其 OS Kernel 只需要 2 MB,再加上其他必要的模組也不過 10 MB起跳,既輕巧又穩定。然而相較於 Windows Server 80GB起跳的大空間,即使採用了企業版的最輕量的 Nano Server 也還是遇到127 MB 空間的極限。然而很戲劇性,在 SQL2017 on Linux 環境下,也能實現類似與小OS大DB的 Oracle 架構,甚至在這個版本中,還將 In memory 運算的速度推升至加速 30倍的新高(雖然是在忽略資料一致性考量的情況下,但這是一個最要的里程碑)。
- 雲端開發:
隨著 App /訂閱/電商經濟、前後端語言/開發工具/公有雲環境/5G網路的成熟、企業的開發週期刻度已經從年/季/月度,縮減至雙/單週;程式上版的速度,也透過 DevOps 的革新,由數小時縮減至數分鐘,甚至是數秒鐘…
SQL Server 除了支援 DevOps 能夠有效地做好 DB schema 的版本管理,並且配合 Visual Studio 的整合,實現以上高效開發。另外,SQL2017 也讓 SQL Server 可以運行在 Linux 作業系統與容器的環境下,開拓出更大的商業機會。
- 人工智慧:
SQL Server 自2016 版本,就開始支援 R語言,讓已經熄火一陣子的 Data mining 可以透過內建七千多個 Package 的 Machine learning services(於 2017版本改名),讓企業能夠朝著 AI 的方向來成長。在2017 版本中有支援 Machine learning 最熱門的 Python 語言。可惜一年的時間還來不及開發完 Linux 版本在 OLAP 的進階企業版功能,只實作出較主要的 OLTP 進階企業版功能,所幸在 2019 版本中終於追上了。另外,在 Machine learning services 中還增加了對 NLP 很熱門的 Java 語言,豐富了對 AI 的支援版圖…
評估角度:以下將列舉常見的應用情境與其適合的功能模組(如果對於不同 Licensing 的功能比較請參考 之前的文章)/效能/價格…考量
- RD 開發:由於是要模擬正式環境,建議可以選擇 Developer 版本,直接使用包含企業版本的全功能,以免開發過程中,還要釐清是程式邏輯還是資料庫環境的問題上,至於價格上則更是超值的免費。
- Infra 備援:在SQL2012以後的版本 AlwaysOn 是針對 HA需求的專屬解決方案,在非同步的次要副本中,只要企業有買 SA (Software Assurance) 都可以合法使用。下圖是參考 Licensing guide 中的範例,With SA benefit 只需要支付 Active node 12 核心授權外加 SA費用,就可以合法的安裝 Passive secondary 的 HA(同步模式)、地端 DR(非同步模式)、雲端 DR(非同步模式)的節點,做單向的 HA/DR。
**但如果想比照 Oracle 做雙向的 Active-Active HA 就要買齊所有的核心數授權。
**關於什麼是 HA/DR、同步/非同步模式、主/被動容錯移轉?請參考之前寫的文章 有提到細部的設定 - Mission critical 的重要系統:絕大部份的重要系統都會搭配以實體核心數 Per core 計價的 Enterprise 企業版,因為它可以解鎖所有的限制,或是做更有彈性的資源控管。例如,我曾經在客戶端有一次的救火經驗,就是大約上午十點,有一個資料分析師不長眼的按下了 BI報表的製作,然後電話就爆大量的湧入 IT 部門,所幸他們有買企業版,我看完 SSMS 的 Activity Monitor 後,先是 Kill 那個要命的 Session 後,修改 Porcessor affinity 保留一顆 CPU供系統管理,剩下留給應用系統使用。接著,順手又幫客戶建立了一組 Resource Governor 規則,並且對 BI 分析師的帳號設定了資源的使用上限,杜絕相同災難再次的發生。
另外,除了企業版功能,有時還會搭配 SA 解鎖 Power BI report server 或是在 2019 特有的 Big data cluster entitlement(在企業版上可以解鎖八倍 Master node 的運算量在其他節點上,有效地降低授權的成本。例如你有巨量資料運算的需求,申請了13台4核心的伺服器來建立橫向的 Big data cluster,你拿其中的1台做Master node 並且符合4核心的低消,另外12台4核心節點 node 的授權要怎麼買呢?一、如果沒有買 SA,就是48 個核心的 Standard 或是 Enterprise edition,因為 Big data cluster 只有 Per code 沒有 Server-CAL選項。二、如果有買 SA,在 Standard edition 可以應用 Big data cluster entitlement 減免4核心,48-4=44;在 Enterprise edition 則是可以減免 4*八倍個核心數,48-32=16)
- 打包舊系統:遇到有些任務性的應用系統,例如一年才用一次的尾牙抽獎系統,你可以透過VM或是容器化的方式來打包。後者是輕薄高效的新一代虛擬化方式,細節可以參考這一篇。其授權方式是以實體核心數 4核低消或是 Server - CAL 依使用人數的模式,二選一(我在 SQL2016版本時曾經算過,大概超過80個使用者時,Per code 會比較划算,建議你可以參考這個 Concept 自己試算一次再進行購買)。
- 機房代管:界於雲端/地端中間的機房代管,是許多發展中的企業的中間歷程,如果您身處於這個階段,而且手邊有一些在網際網路上的產品或服務,例如「訂便當」。我會建議您採用 Web edition,不曉得有多少人哈死這個超高 CP值的SKU,也唯有透過 SPLA 的授權管道才能買到(連在雲端租用 VM也不能合法地購買這個 SKU)
- 硬體老舊或是SQL快要EOS:就像是持有 iPhone一樣,在2021年使用 iPhone 3S是不 Make sense的,過時的頂尖科技,不管CP值再高都無法通過當前的資安要求,以及滿足當前客戶的新需求。在採購時,如果這個應用系統是需要與時俱進的,建議您可以購買 SA,擁有隨時升級的權利;如果評估下來這個應用系統的潛力有限,就要有將來翻新時,資料庫重買的打算。
- 商業智慧:為了支援高階主管的決策分析,需要將Operational 的資料彙總為 Business 的資訊,並且以高度視覺化的方式來呈現。如果企業不願意選擇雲端的PowerBI Saas服務,只能透過購買企業版並加購 SA的方式來取得 Power BI report server 的合法授權,才能佈署在地端。另外,關於這個議題,有興趣者,還可以參考之前的文章,再進一步的研究
- 微型的應用系統:例如30人以下的微型進銷存,這種單機包含應用程式與資料庫的小型應用,我會建議以 SQL Express 再選擇 Local DB 這個易於佈署與可攜性(系統參數、帳號、權限)高的解決方案。因為這是一種可以隨應用程式免費轉發的版本,但需要注意:僅支援單一執行緒、每個 User Database有 10GB(SQL2008以下的版本是 4GB)的空間限制、沒有 Agent service可供排程備份(要用Windows 排程)/無法透過執行計畫來查看校能問題/二個 Express無法相互通訊…等
- 大型的資料中台:例如龐大的電信業,擁有數種巨量資料源的各種內部的大型應用系統,包含OLAP的TeraData、著名的關聯式資料庫 Oracle/DB2/HANA...、NoSQL的 MongoDB/Cassandra/ElasticSearch、巨量資料 Hadoop/Spark,資料整合的需求一直都在,但是想到整合資料的龐大運算/儲存需求就開始頭痛,所幸自 SQL2016所推出的企業版 PolyBase功能,能以 external table 的方式做 on the fly的運算,大大地降低這筆龐大可觀的驚人成本。至於授權方式在 SQL2019 已經沒有限制說 Head node 一定要買到企業版,細節可以參考官網的說明。企業可以將多台 SQL Server as computer nodes 組成一個運算叢集
- 大型的資料中台:一樣是電信業,如果在各種內部的大型應用系統中,存在著巨量的非結構的資料,包含:客戶對話、系統日誌 Log、社群留言、監控影片檔…你想要儲存到 Data Lake資料湖中,以利將來可以進一步的提取 Insight 或是開發出新的加值服務,你會需要一個基礎於 HDFS檔案架構的 SQL Server 或是 Spark 的資料湖儲存體。在授權上可以比照上面介紹過的 Big data cluster 的買法,只是其他節點叫作 Compute node
- ML 系統:例如廣告業,企業可以透過 R, Python, Java…等程式語言,選擇在 SQL 2019上以 R Server、SQL Server Machine Learning Services、Spark ML的方式來進行 AI的建模,並且整合以下的資源串起完整的 Machine Learning life cycle。至於授權的部份,簡單的ML 購買標準版即可達成,如果是以資料湖 Data Lake的方式則需要買到企業版,如果有存取到非 SQL2019 肚子中的 Hadoop 則要再加購 SA才可以。
結論:
在 ABC (AI, Big data, Cloud)時代,在資料庫的產品線中 SQL 2019 真的是一個令人激賞且可以一站式購足的優秀產品,基礎於下圖中高度資訊安全的基底,從免費的 Express 到能搔到癢處的 Standard,再到 Enterprise edition。SQL 2019 可以包山包海,帶你簡單實作一個本機的小型應用程式,賣進佔台灣 95%以上的中小企業 ;搭配 DevOps 手法或是系統架構師實作出一個中大型的應用系統,快速地回應瞬息萬變的高度競爭市場;如果是高速成長的企業,採用新一代的 Data vitualization 的先進功能,讓您可以破除資訊孤島高效地整合全公司的資料,維持競爭優勢;在資料為王的軍備競賽中,採用先進的 Big data cluster,讓您可以攻守有據,輕易駕馭非結構化的資料,開發新的藍海契機;最後是最火熱的 ML,具備有高達七千多個 Template R套件以及支援多種主流的 AI相關程式語言,讓您自家的產品可以 AI inside賣到強強滾…
李秉錡 Christian Lee
Once worked at Microsoft Taiwan