SQL Server On Linux运维实战(txt+pdf+epub+mobi电子书下载)


发布时间:2021-02-12 09:53:24

点击下载

作者:黄钊吉 熊章立

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

SQL Server On 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上运行的图书,同时网上资料过于零散,作者经过近一年的实践及资料整合写就本书,目的是让读者尽快上手,掌握基于Linux的SQL Server的安装、配置、管理及性能优化方法。书中部分内容不局限于Linux平台,但以Linux平台为主。

通过阅读本书,读者将会了解到如何使用基于Linux的SQL Server,如何更好地管理在Linux上的SQL Server及如何进行常规的SQL Server性能优化。本书结构

本书分为5篇,分别是基础篇、管理篇、性能篇、架构篇、案例篇。

第1篇包括第1~3章,介绍SQL Server On Linux的基础内容及环境准备。

第2篇包括第4~9章,分别介绍Linux及SQL Server的日常监控和管理知识。

第3篇包括第10~16章,介绍SQL Server的性能优化知识。在本篇中,不仅介绍关于性能的基础知识(可以理解为“内功”),同时也会介绍多种工具(可以理解为“武功招式”)。善用工具能够极大地提升工作效率,减少故障和问题定位的时间,这样才能真正地进阶高手。

第4篇只有第17章,专门介绍Linux上SQL Server AlwaysON的搭建。

第5篇包含第18章和第19章,分别介绍两位作者在Linux和SQL Server运维过程中的一些案例。

书末有4个附录,单独介绍一些扩展的知识点。本书基于的版本

到目前为止,有3个术语容易造成混淆:SQL Server vNext、SQL Server 2016和SQL Server 2017。这3个术语中的SQL Server产品都能运行在Windows和Linux(包含Docker)操作系统之上。需要说明的是,vNext实际上是指“开发中的SQL Server”,而另外两个则是官方发布的正式版本。从2016版开始,SQL Server正式实现跨平台。同时由于很多新功能是从2016版开始引入的,所以本书使用的SQL Server虽然是2017版,但是也会兼顾2016版,在必要的地方会加以说明。本书不包含的内容

本书主要关注数据库引擎的管理和使用,不会涉及SQL Server编程、商业智能、大数据、人工智能等方面。

读者在阅读和使用本书的过程中,如果发现有问题或者需要提交勘误,请登录人民邮电出版社的异步社区,或者与本书的责任编辑联系,邮箱为wangfengsong@ptpress.com.cn。资源与支持

本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。配套资源

本书提供如下资源:● 本书彩图文件;● 配套脚本文件。

要获得以上配套资源,请在异步社区本书页面中点击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,点击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。

如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。关于异步社区和异步图书“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、软件测试、前端、网络技术等。异步社区微信服务号第1篇 基础篇

本篇包含第1~3章,首先对SQL Server On Linux进行简介,然后搭建Linux环境,并在该环境上搭建SQL Server。

本篇的目的在于搭建基础环境以便后续学习使用。第1章 SQL Server On Linux简介

1分钟速读

运行在Linux上的新版SQL Server,将其新特性及强大功能与Linux原生系统的优点进行结合,不仅在运维及性能上带来巨大的便利和提升,同时对大数据和数据挖掘领域的逐步兼容[如内置机器学习、图形处理、兼容HDFS(hadoop分布式文件系统)、Containers(容器)等特性],使得企业不需要从头开始搭建或者把现有环境迁移到“适合”大数据环境的其他关系型数据库中。

本章简要介绍“为什么选择SQL Server On Linux”(1.1节)、“它是什么”(1.2节、1.3节)和“如何使用”(1.4节、1.5节)。1.1 为何选择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表现得更好。关于Linux的介绍详见第2章及其相关章节。

实际上,从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”。1.2 SQL Server关键组件简介

本节有3个目的:● 让读者特别是初学者大概了解SQL Server的组成。● 为后续章节做铺垫。● 在安装SQL Server时,了解如何选择各种功能。说明: 尽管本书主要基于Linux上的SQL Server,但是也有必要介绍一些与平台无关的部分,以便本书更具可读性和可操作性。由于在Linux安装时没有直观界面,所以本节的截图是基于Windows平台的SQL Server 2017的。从SQL Server 2016开始,SQL Server Management Studio(简称SSMS)需要独立下载,必应搜索“下载 SQL Server Management Studio (SSMS)”。

整个安装过程都很简单,下面截取在Windows下安装SQL Server 2017过程中需要注意的部分进行介绍。

从图1-1(实例功能、每个实例单独安装)、图1-2(共享功能、一台服务器只能安装一次、所有实例共享)所示的缩进程度可以看出层级关系。从层级来说,功能(feature)可以分为数据库引擎服务、分析服务和共享功能3类。图1-1 SQL Server安装过程中实例功能选项图1-2 SQL Server安装过程中共享功能选项(续图1-1)

数据库引擎服务(database engine services):是 SQL Server 的核心服务,包括了SQLOS、SQLPAL(见1.5节)、存储引擎、关系引擎等,见图1-3。它负责安全性、数据处理、优化等工作。在数据库引擎下面的缩进中,它又包含复制、机器学习及一些针对大数据方面的功能。● SQL Server Replication:也称复制,是最晚从SQL 2000出现的

一种初衷用于分布式访问但后来更多用于读写分离的技术。● Machine Learning Services(In-Database):机器学习从SQL

2017开始内置,此处它为数据库内部功能,兼容了R与Python。● 除了上面两个,还包含了全文检索、SQL 2012出现的数据质量

服务(DQS)和2016引入的PolyBase服务,它用于整合SQL

Server和Hadoop。图1-3 数据库引擎组件

分析服务(analysis services):简称SSAS,主要用于商业智能的分析引擎,它不属于本书范畴。

共享功能(shared features):共享功能只能在一台机器上安装一次,其中包含以下内容。● 机器学习服务器(独立):此处为单独部署,不属于SQL Server

引擎的内部功能。● 数据质量客户端(DQC):用于管理DQS的GUI功能。● 客户端连接工具:一组用于客户端和服务器交互的组件,它包括

OLEDB、ODBC、ADODB和OLAP网络库。● 集成服务:简称SSIS,使用场景多为BI方面的ETL过程和数据库

环境下的数据传输。从SQL 2012开始,SSIS不再纳入数据库引

擎范围,从SQL 2012开始,SSIS也支持HDFS。另外SSIS又包

含了两个Scale Out功能选项(Scale Out Master和Scale Out

Worker),它们可以让执行分布到多台计算机中进行。● Scale Out Master:负责Scale Out管理和接收来自用户包的执行请求。● Scale Out Worker:从master库中获取执行任务并完成执行工作。

具体说明可见官方文档,必应搜索“SQL Server Integration Services (SSIS) Scale Out”。● 客户端工具的兼容性(Client Tools Backwards Compatibility):

兼容旧版本中的一些功能。● 客户端工具SDK(Client Tools SDK):提供SMO(服务器管理对

象),安装它之后,可使用.NET通过编程来控制SQL Server和

SSIS。● 文档组件(Documentation Components):从SQL 2014开始它不

再在安装过程出现,需要额外下载。● 分布式重放控制器/客户端(Distributed Reply Controller/

Client):用于捕获一个跟踪(trace),然后在另外一台服务器重

播。它很适合跟踪性能问题或测试软件更新,其中Client用于搭

配Controller,安装在需要收集信息的服务器上。然后用

Controller重播。Client类似于代理。● SQL客户端连接SDK(SQL Client Connectivity SDK):提供一个

SDK给SQL Native Client用于支持应用程序开发,也对客户端堆

栈跟踪等功能提供支持。● 主数据服务(Master Data Services):SQL Server提供的“主数

据”功能不属于本书范畴。

选择不同的功能(如Master Data Services)会自动安装一些辅助功能,为了后续使用和管理,建议按需选择,不要(也几乎不可能)在服务器上安装全部功能。

从作者的DBA经历来看,在常规业务的系统部署中,一般需要安装的功能有以下两个。● 数据库引擎服务:注意可以仅勾选这个而不安装下一级功能。● 共享功能:Client Tools Connectivity、SSIS、Client Tools

Backwards Compatibility、Client Tools SDK、SQL Client

Connectivity SDK。

其他功能仅在需要的时候安装。1.3 SQL Server On Linux新特性简介

正如人类进化一样,传统数据库软件为了应对时代的发展,必须要做出很多的“进化”甚至“革新”。有些是我们看不到的,比如SQL Server 2000到SQL Server 2005就引入了一次彻底的重构,加入了SQLOS,到SQL Server 2016之前,我们大量使用的DMV都来自这里。从SQL Server On Linux/SQL Server 2017开始,又引入了SQL PAL(见1.5节),这些对于用户甚至DBA来说都是透明的。这些通常成了产品的卖点。

近年来SQL Server平均每两年发布一个大版本,每个大版本又包含了大量的新特性,没有必要一一详述,作者会根据经历及当前需求,挑选一些比较有价值的功能介绍和演示。

完整的新特性列表可见官方文档,可以用必应搜索“SQL Server 2016 中的新增功能”及其延伸阅读部分。

按照官方的安装过程,本节也从数据库引擎、SSIS、机器学习及兼容Linux这4大方面进行介绍,其中每个功能前面的小括号代表着它在哪个版本开始出现。1.3.1 数据库引擎提醒: 下面功能说明中的(2016+/2017+)表示从SQL Server 2016/2017开始引入的新特性。另外由于安装过程中有些功能依旧以英文名显示,所以下面会尽量列出一些中英文名字的对照,以便读者在后续使用过程中减少混淆。

数据库引擎是各种数据库产品中最核心的组件,没有这个引擎数据库是无法正常运行的,同时其他功能或多或少地是这个组件的辅助工具。从SQL Server 2008特别是R2版本开始,SQL Server的更新重点都在数据库管理、性能、高可用和BI/大数据方面进行提升,其中以BI/大数据的增强最为明显,所以下面对数据库引擎按照“数据库管理”“数据库性能”“高可用”和“大数据”4个方面进行介绍。数据库管理(含数据库安全)

这部分是数据库管理系统中的基础功能。它让数据库“可用”,只有可用的数据库,才能继续执行性能、高可用及数据利用等功能。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。这将在7.2节中

详细介绍。●( 2016+)Dynamic Data Masking:简称DDM,中文常见名为动

态数据屏蔽。使用它后,不具有UNMASK权限的用户只能看到

经过屏蔽处理的数据。这将在7.3节中详细介绍。●( 2016+)Row-Level Security:简称RLS,中文常见名为行级安

全性。它可以在数据库引擎层面上限制数据访问,用户只能看到

与其相关的数据行。这将在7.4节中详细介绍。●( 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参与大数据的系统搭建带来了不少的便利。1.3.2 SQL Server Integration Services

这部分不在本书讨论范围,读者可用必应搜索“SQL Server Integration Services”进行深入阅读。●( 2016+)支持AlwaysON可用性组。●( 2016+)支持Always Encrypted。●( 2016+)支持Hadoop文件系统(HDFS)。●( 2017+)新增Scale Out功能。1.3.3 机器学习

原为SQL Server R服务,从2017开始,它兼容Python,并更名为SQL Server机器学习服务。可以使用“机器学习服务”(数据库内)在SQL Server中运行R或者Python脚本,或者使用“机器学习服务器”(独立)来部署和使用不需要SQL Server的R及Python模型。这些不属于本书范畴,感兴趣的读者可以访问官方资料,使用必应搜索“What is SQL Server Machine Learning Services?”

虽然本书没有提及,但是这个服务将会是以后的重点服务,建议读者多多重视。1.3.4 兼容Linux平台

SQL Server可以运行在Linux和Windows平台,并且大部分功能是一致的,除了一些与平台相关的功能会有所差异,作者相信随着时间的推移它们将逐步兼容。由于SQL Server On Linux正是本书的主要内容,所以这里暂时不展开。1.3.5 其他

除了上面4大类之外,Linux上的SQL Server和Windows平台上的是相同的数据库引擎,绝大部分功能是一样的。同时SQL Server On Linux不仅支持Linux还支持Docker。

之所以说大部分功能是一样的,因为也有不支持或暂未支持的功能,截至2017年10月,SQL Server还有不少需要逐步添加的功能,详细清单可见官网资料,使用必应搜索“Linux 上的SQL Server概述”的概述中的“版本和支持功能”。1.4 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不再仅仅是一个传统的数据库管理系统。1.5 SQL Platform Abstraction Layer说明: 由于SQL Platform Abstraction Layer过于学术,不适合初学者甚至有经验的读者学习,除非你有兴趣研究或者用来做二次开发,否则不建议深入阅读。本节也仅停留在简介,读者只需要知道大概是什么即可,不需要过于纠结。如果看不懂,那么可以直接看1.5.3节。1.5.1 PAL简介

如果曾经用过SQL Server 2000,那么你会发现,从SQL Server 2005开始,操作界面、编程、DBA日常工作都有了不一样的感受,而从SQL Server 2005到当前版本,则相对稳定。SQL Server 2005对SQL Server 2000进行了底层重构,加入了一层API,它称为SQL OS或者SOS。SOS的出现很大程度是因为硬件性能大幅度提升,使其可以应对数据量的快速增长。在后来的十几年中,软硬件依旧以强劲的速度发展,同时随着大数据的出现,传统的数据库管理系统(由于硬件的限制,关系数据库中的很多概念已经过时)已经无法很好地应对这种挑战。为此,需要对SQL Server底层再次重构。除此之外,为了更好应对虚拟化和响应“Microsoft ❤ Linux”的口号,就出现了一个名为SQL Platform Abstraction Layer的新技术,简称SQL PAL。注意要跟Windows性能计数器分析工具PAL(Performance Analysis of Logs)区分开来。

PAL来自微软研究项目Drawbridge,这个项目并不是专门为SQL Server而研究的,更多是为了虚拟化。为了使SQL Server这个一直以来只能运行在Windows平台下的软件也能够运行在Linux上并且表现不会比在Windows平台上差,微软把PAL引入SQL Server中。

PAL通过对所有操作系统或者平台特定的代码进行隔离,使其基础结构保持对操作系统的不可知性。从而“跨平台”提供支持环境。

为了实现对Linux平台的支持,SQL Server借助PAL完成以下主要的目标。● 具有与Windows平台一样甚至更好的安全性和稳定性。● 提供相同的功能、性能和可扩展性。这需要一个过程。● 兼容来自Windows和Linux的应用程序。● 在保证SQL Server的代码库持续快速创新的同时,确保新功能和

修复程序都能实现跨平台。● 为将来的SQL Server套件服务(如SSIS)在Linux环境下运行建

立基础。

为了让SQL Server能很好地运行在Linux上,核心问题就是如何让SQL Server去除对Windows的过度依赖同时又能使用Linux提供的各种强大功能,二者缺一不可。要知道,SQL Server已经运行在Windows上接近30年,不管是单纯的API调用还是本身内核中的编码,都有大量为Windows定制的部分。另外SQL Server作为一个大型软件,其代码量何止千万行。

根据官方资料,SQL Server对Windows的依赖主要有以下3部分。●“ Win32”,如user32.dll● NT内核,如ntdll.dll● Windows应用程序库,如MSXML

另外从应用层面来说,Windows的群集、分布式事务协同(MS DTC)甚至邮件功能等都早已对SQL Server进行了稳定的交互。基于这些大量而强的依赖特性,改造需要一步一步进行,所以即使SQL Server On Linux已经正式发布,在某些细节上面可能还会有暂时不能兼容的情况。

PAL负责从软件本身抽象出底层操作系统及其库的调用和语义。在PAL出现之前,绝大部分资源(如内存和线程)并不完全受控,Win32/NT API等可以创建自己的线程和内存资源。这一次SQLPAL把所有这些都纳入自己的可控范围。从而进一步摆脱了SQL Server对Windows的依赖。

新架构(PAL)由一套不经过任何Win32或NT系统的SOS Direct API组成。没有关于SOS Direct API的代码,要么通过托管的Windows API(如MSXML),要么通过NTUM(NT User Mode API,它包含1500+ Win32和NT系统调用),所有子系统的存储、网络、资源管理都基于SOS,并且在SOS Direct和NTUM API中共享。SQL PAL的架构如图1-4所示。图1-4 SQL PAL架构图

操作系统的运作基于各种进程,下面简介在PAL中的进程模型。1.5.2 进程模型

操作系统的运行依赖于进程,进程完成一系列的动作。SQL Server不管在哪个平台上,最终也是以进程方式存在的,并通过调用其他系统进程来完成数据库与外部资源的交互。图1-4和图1-5所示的Host Extension类似于一个本地Linux应用程序,当Host Extension启动时,它会加载并初始化SQL PAL,然后PAL再启动SQL Server,PAL可以实现软件隔离,使得SQL Server对底层操作系统不敏感。图1-5 Linux进程模型

SQL Server对操作系统发出的请求,会由PAL翻译成平台所能识别的具体调用。1.5.3 小结

如果要类比,那么可以把SQL PAL当作Java中的JVM,把SQL Server对外部的调用通过SQL PAL转换成操作系统可识别的方式来实现,使其充当一个翻译者的角色。从而去除SQL Server对底层操作系统的依赖。

除此之外,通过SQL PAL,SQL Server只需要一次开发即可多平台运行。这保证了在Windows上运行的SQL Server跟在Linux上运行的SQL Server是同一个核心。由于Linux跟Windows毕竟有很多差异,所以一些在Windows上成熟的技术特别是关于HA/DR方面的,并不能马上迁移到Linux上。但这不过只是时间上的问题而已。

关于Drawbridge自行必应搜索“Drawbridge - Microsoft Research”。1.6 本书结构

这里大概介绍一下本书的结构,本书目标是在实用的前提下,使其不仅能作为入门书籍,还能作为参考书,随时翻阅,所以在串联各种知识点的前提下,也尽量兼顾每章的相对独立。

至于本书的整体内容,应该没有什么比一个图更能够表达了,如图1-6所示。图1-6 本书结构示意图

由于很多内容实际上是相互关联的,所以没有办法说清楚每个方框具体在哪一章,读完本书之后,相信读者应该有所感悟。SQL Server在Windows和Linux平台上的特点

表1-1是作者简单对比SQL Server在不同平台上的运行情况。在使用Linux上的SQL Server时,你会发现(假设你已经用过Windows上的SQL Server)它们有不少区别和注意事项。下面列出一些比较明显常见的。表1-1  SQL Server在Windows及Linux上的区别功  能Windows平台Linux平台数据库引擎在安装过程中可默认为SQL Server组下的SQL Server用户。默认服务账号以选择各种权限仅限于SQL Server目录Windows账号操作系统权常规需求时较为权限系统比较复杂限配置简单SQL代理、有界面可操作,纯命令行,没有配置管理器,需要使用命令工具SQL ServerSQL代理可以配操作和配置。SQL 代理只能进行服务状态变更,配置管理器置权限不能配置服务账号环境变量配Windows上几乎需要配置较多的环境变量置不需要配置性能配置较少需要配置的内容较多功能支持较全暂时未能与Windows上完全一致

上面是作者在使用过程中感受到的差异,简单来说,由于SQL Server在Windows上运行了三四十年,而在Linux上只运行了一年多,加上Linux本身只是一个“内核”。考虑到即使作为一个简单的服务器都需要进行较多的配置,所以SQL Server在Linux上需要进行的配置会比较多,而且很多界面操作到了Linux上后被简化甚至取消了。但总体来说,这并不会造成非常大的影响。注: 上面的内容没有讨论未在Linux上实现的或者Windows特有的一些功能,不排除微软后续会有改进。1.7 总结

本章对SQL Server On Linux做了一个非常简单的介绍,重点介绍的是SQL Server On Linux的新功能。同时也展示了SQL Server能运行在Linux平台上的原因。在当前趋势下,以SQL Server 为切入点学习Linux确实是非常好的时机。作者认为在不久的将来(可能二三年内),SQL Server On Linux将会越来越被重视和广泛使用。

另外本章也列出了在某些场景下可能用到的新功能。读者可以根据自身情况去安排学习顺序,本书尽量保证章节的相互独立性以便能够在系统学习之后本书依旧可以作为参考工具来使用。

最后以图的形式展示了本书的大概结构。本章的目的在于通过对SQL Server On Linux的介绍,让读者更加坚定地进行后续的学习。

下一章是关于Linux的介绍及演示环境搭建。第2章 Linux基础及安装部署

2分钟速读

本章是大部分Linux参考书籍中的必备内容。对于每本与Linux相关的书籍,作者都会花一定的篇幅来介绍如何部署一个完整的系统。事实上,合理的规划,对于系统及后续的运行及改进都起着良性作用。如果规划过程混乱,那么往往会在后期的运维中深受其害。建议初学者在学习初期按照书中定义的规则去部署系统,这并不是必需的,但是可以让你培养一个良好的习惯。

由于本书是关于SQL Server on Linux的,所以搭建一个“可用”的Linux环境是读者跟随本书学习的必要条件。

本章将围绕“背景介绍”“前期规划”“基础框架”和“部署”这几个内容进行展开说明。2.1 背景介绍

Linux是操作系统,而操作系统是由内核扩展而来的。Linux内核的诞生来源于托瓦斯,但是托瓦斯为何要创造这一操作系统,这有着历史的原因和机遇所在。当然,这一类的故事众说纷纭,有兴趣的读者可以自行搜寻相关信息进行阅读。

Linux一开始出来的成品其实很粗糙,它本身的内核也只是能跑在386的机器上。因为其开源共享的思想,作者将内核上传到互联网后,吸引了全球的相关人员对此进行修补创造,从而使一个脆弱的内核变得更强大。系统性能很大程度依赖于内核的版本,这并不是说,有了新的内核版本,我们就必须把系统的内核版本也升级到最新,这是不安全的。因为我们运维的最大目标就是保障业务系统的稳定,新的内核版本往往存在一定的漏洞或者需要改进的地方。

Linux架构继承于UNIX系统,故此它相当稳定强大。坊间就有个说法,UNIX的儿子是Linux。但UNIX不是开源系统,它大部分服务于小型机等机器。早期UNIX并不支持X86平台。目前在UNIX发行版中,有若干类的UNIX版本,早期的有Minux,现在有FreeBSD、MAC OS X等。

多年以来,我们被潜移默化地接受了一个观点:Linux系统比Windows系统安全高效。事实上真是这样吗?从安全漏洞爆发的情况来看,这两大操作系统是“旗鼓相当”的。作者认为 Windows 的安全漏洞反而更小。因为其封闭性导致了很多测试都需要进行黑盒测试方能体现。Linux不一样,它遵循GPL协议,它的源码都是公开的。这样它所有的东西都暴露在公众视角下,资深的工程师很容易通过分析源码来获取到漏洞信息。所以在安全体系方面,如果Linux不加固,那么事实上它会更加脆弱,甚至初级黑客都能轻易地登录你的系统,因为没有任何相对安全的配置可用于防范。在本章节后面会介绍如何使系统较为安全地运行。提醒: 上面内容为作者个人观点,并不代表官方说法。

接下来我们先看看Linux家族,图2-1列出了到目前为止Linux各分支版本(或者叫发行版)的延伸图。图2-1 Linux分支发行版延伸图

关于分支的具体介绍可参考维基中所提供的资料,读者可使用必应搜索“Linux distribution”。既然要使用Linux作为应用赖以生存的基础,我们应了解一下Linux系统的特色。Linux发展至今,其规模已经非常大,功能非常成熟,作为以SQL Server为主体的本书,不打算花太多精力在Linux的细节上,作者挑出以下几点供读者参考,它们包括“源码不受限”“任意适配”“内核稳定”“相对安全”和“运维高效”。● 源码不受限

由于Linux是基于GPL协议的,因此它是一个自由软件个体。既然是自由的,那么各地的读者都可以下载其源码来阅读或者修改使你的应用变得更敏捷(这要求你有一定的源码编译能力)。Linux的内核源码,是用C来实现的。有兴趣研究源码的读者,必须了解C语言的基本功能。● 任意适配

Linux可以在绝大部分的X86架构的机器上运行。这使得公司可以购买大量的X86架构的服务器来运行应用,而不需要采用小型机等高价设备来运行。从而在成本上节省了开支。当然,对于读者而言,如果有一些尘封的机器,那么也可以将这些机器进行二次利用运行Linux。不过使用年代久远的机器服务来应用,本身的硬件是不稳定的,容易造成业务的不稳定在这种情况下,很大程度上并不是系统的问题,而是设备的问题。● 内核稳定

Linux原生内核是很稳定的,很少出问题。当然,由于源码的开放性,会有不少人对其内核进行修改,增加新特性。如果使用第三方优化过的内核,那么很可能会造成业务的不稳定,但这部分并不在本书的讨论范围,在本书中如果没有特殊说明均指的是原生的内核环境,也就是分支版本中的默认内核版本。如果读者想在后面运行SQL Server,若Linux系统和内核版本太低的话,则需要升级或者更换操作系统。请注意,一些应用软件需要内核版本的支持。在选型的时候,一定要注意需要运行的应用是否能够符合当前内核的运行要求,以避免部署要推倒重来或者业务受到影响。● 相对安全

重点提醒,这里只是相对安全,从来就没有绝对可靠的系统。由于Linux的机制都是自定义模块化的,故此可以根据其实际需要进行对应的嵌套,如采取自带的防火墙进行加固;对应用账号采用独立应用账号的启动机制;采用NAT或VPN的方式访问内网中其他机器等。这些可以在系统内完成,而且配置过程并不复杂。相比之下,Windows配置这些规则就没那么自由了。● 运维高效

这点仅是从运维的角度来考虑。不得不承认,维护Linux比维护Windows要轻松很多。在Linux环境体系中,只需要提前制定好规则,写好对应的脚本和更新逻辑,即可应对成百上千台服务器。而Windows可能没那么方便。当然,这是过去的观点,随着Windows的逐步改善,新版本的Windows Server也强大了不少。另外值得一提的是,安装Linux的机器是可以不重启的,这点目前来说Windows还做不到。提醒: 上述内容仅为作者个人观点和经验所谈,并不代表官方说法。

很多初学者为了表示自己的决心,将当前系统更换成Linux桌面版或者是双系统。这其实并不是好事,对于学习一门技能来说,怎么方便快速地上手才是关键。对于绝大部分Windows用户和Linux用户来说,安装成单系统并不总能让你更高效地学习对应的内容,除非你有很强的学习能力和自制力。如果日常习惯被扰乱,那么反而会影响你的积极性。读者可以考虑在Windows中使用虚拟软件(如VMware或Hyper-V等)运行Linux,本书就是在Windows Server上使用Hyper-V搭建多个装有Linux(Ubuntu)虚拟机进行演示的。接下来将介绍一下对系统的前期规划。2.2 前期规划

安装部署任何一套应用系统,都需要提前规划好各个部件的位置,包括项目类型、磁盘分区规划、IP规划、主机命名等,以便后面进行标准化运维。

在实际环境中,往往没有那么理想化。我们去一家已经成立了一段时间的公司进行维护管理时,很多环境已经定型,这就要求我们有一定的基本功和心态(这个很重要)去适应这个既定的环境,同时又不能有强迫症,要求所有的应用按照自己的定义路径来。这种做法很容易造成现有系统的不稳定,同时也会让新同事觉得反感,从而有意无意地阻碍你的工作推进。更合理的做法是小步快跑,首先让旧事物保持原风格,然后小幅度修改不合理的地方,对于新项目则要求按照新规矩来处理。

即使是整改,也不能一下子全部更改,尤其是年代久远的应用更加不可以操之过急,一定要在熟悉各个部件后,一部分一部分进行修正。如果你所在的企业已经制定好规则(不管合理与否),那么你要做的不是改成你自己的那一套,而是适应公司原有的风格,当然不合理的地方还要逐步改进。下面将针对上述几点(项目类型、磁盘分区规划、IP规划、主机命名)提出一些对应的标准参考,但是切记具体问题具体分析。● 项目类型

系统部署之前,一定要考虑清楚项目是属于哪种类型的,它是属于Web类型的前端应用还是诸如Java、C++、Golang等后端应用,是DB应用还是其他?明白了这些后,我们才清楚怎么去选型。由于本书是针对数据库的书籍,所以这里假定是以DB为基准的数据库服务。

数据库服务类型系统意味着是资源密集型系统,这对CPU、内存、I/O要求都很高,同时还要预估一定的空间给后续业务增长的需要,要使其能满足2~3年的需求。这个时间点并不是一成不变的。由于 10 年前,数据量并不像现在这样容易出现井喷,所以服务器的配置

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载