微软弃 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平台为主。

弃 Windows 而拥抱 Linux 之后,SQL Server on linux教了新玩法_WINDOWS


《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.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上后被简化甚至取消了。但总体来说,这并不会造成非常大的影响。

弃 Windows 而拥抱 Linux 之后,SQL Server on linux教了新玩法_linux_02

弃 Windows 而拥抱 Linux 之后,SQL Server on linux教了新玩法_WINDOWS_03

《SQL Server On Linux运维实战》

作者:黄钊吉, 熊章立


  • SQL Server凤凰涅槃,浴火重生;
  • 跨平台,Linux和Windows平台均适用;
  • 从入门到精通,突出运维监控、性能调优;
  • 融入作者10年工作经历,系统、实用、经常翻阅的工具书。


- END -


异步图书

聊聊图书背后的故事

弃 Windows 而拥抱 Linux 之后,SQL Server on linux教了新玩法_linux_04

弃 Windows 而拥抱 Linux 之后,SQL Server on linux教了新玩法_server_05