本人新书上市,请多多关照:《SQL Server On Linux运维实战 2017版从入门到精通》
在安装SQL Server On Linux的过程中,发生了什么事情?可能大部分读者或者用户并不关心,但是作为本人深入研究而言,有必要进行了解。这一篇本身应该放在安装后接着讲,但是由于某些细节本人还没找到相关资料去研究,所以暂缓了文章的进度。那么这篇文章就从DBA的角度去看一下安装过程发生了什么,同时了解一下某些文件的位置。
在Windows平台,我们习惯了使用.exe或者.iso作为安装介质进行安装,但是在Linux平台,更常用的是二进制文件(binary files),当然还有其他方式。在SQL Server 2017、2019中(这里不讨论SQL 2016的Linux版本,因为它不算正式版本),其二进制文件存放在/opt目录下,它的应用程序文件包含数据库文件则存储在/var/opt目录下。下面介绍一些重要的目录:
首先是/opt/mssql,这个目录下包含了bin和lib两个目录:
先说bin目录,bin目录包含了sqlservr二进制文件、mssql-conf bash脚本还有一系列支持dump 文件诊断的shell脚本。
接下来是lib目录,lib目录下包含的内容比较多:
这个目录对于DBA而言极其重要,因为默认情况下,你的SQL Server用户数据库都在这里。
在SQL Server安装过程中,还会安装其他的一些文件,包括:
在安装结束后,在LOG目录下会出现这些内容,LOG目录默认在/var/opt/msssql/log中:
cat /var/opt/mssql/log/errorlog
来查看错误日志,大概是下面这个样子,不过习惯于使用SSMS的我而言更倾向使用SSMS来阅读: 不管是Windows还是Linux平台上的SQL Server,安装成功之后,要进行一些交付前配置,这些配置通常是为了获取更好的安全性和性能。具体的细节在后续会陆续介绍。这里先做一个简介。
配置工作需要一些工具,这些工具有自带的T-SQL命令、Linux平台特有的mssql-conf,首先介绍一下Linux平台的mssql-conf。
在Windows平台上,有一个称为配置管理器的图形化工具用于配置一些不适合或者无法使用T-SQL命令实现的配置,如SQL Server服务账号的选择、TCP/IP配置等等。而在Linux平台上,由于通常使用的都是命令行方式,所以需要有一个工具来提到这部分的功能,所以mssql-conf就应运而生。我们可以使用sudo /opt/mssql/bin/mssql-conf --help
来查看这个命令的说明。
其中最常用到的选项是set/unset和traceflag这三个:
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
除此之外,还有一些配置可能会用到:
sqlcmd -Usa -S localhost,1401
。 同时要切记一并检查防火墙的策略是否对新端口开放,否则也会连接不上。提醒一下,上面的配置项在Windows平台也是需要考虑的内容。
sudo /opt/mssql/bin/mssql-conf traceflag 1222 on
前面提到的算是在SQL Server“外部配置”,那么接下来就是对SQL Server进行内部配置,主要针对实例级别的配置。这里跟操作系统平台的关联就相对较小了。这部分主要使用T-SQL即可完成,包括系统存储过程sp_configure及ALTER SERVER CONFIGURATION命令。但是需要提醒的是大部分配置修改操作都需要system administrator权限来执行。
作者印象中(不去深究了),从SQL 2008开始,很多SQL Server的配置项被定义为“高级配置”,如果不使用sp_configure把它先开启(修改show advanced options 的值为1),是无法继续下去的。具体的清单可以参阅官方文档:sp_configure ,在后续的过程中也会多次使用到,这里就不多说了。
sp_configure在修改单值配置时是很有用的,但是一些服务器范围的配置可能需要进行较为复杂的修改,这时候ALTER SERVER CONFIGURATION就有用处了。比如可能不常用到的处理器掩码(PROCESS AFFINITY),由于通常数据库服务器是专用的,且只用于一类负载(OLTP/OLAP),所以对CPU的使用没有太多讲究,但是某些情况下服务器可能会混用OLTP和OLAP,那么这个时候CPU的分配就有所讲究。比如我们需要设置SQL Server进程仅在NUMA节点0上进行调度,可以使用下面T-SQL命令完成:
ALTER SERVER CONFIGURATION SET PROCESS AFFINITY NUMANODE=0
在Windows平台中,SQL Server需要进行某些配置,那么相对而言,在Linux平台下,有些配置是通用的。但是也存在某些配置是不通用的,下面我们来浏览一下。
也叫锁定页,在Windows中有一个概念,如果应用程序使用了AWE(Address Windowing Extensions,地址空间扩展)可以避免工作集影响内存使用。在企业版和标准版中是默认启用的。但是Linux中没有AWE这个概念。所以是不能等同使用的。Linux会针对内存消耗来终止进程或者分配页。这个在后续介绍。
Instant File Initialization,在Windows平台,如果SQL Server的服务账号具有本机管理器权限,那么会自动启用,如果没有则要修改“执行卷维护计划”的权限给SQL 服务账号,Windows平台是通过调用SetFileValidData()这个API来实现。而Linux平台,首先只有mssql这个账号,但是默认可以执行初始化,Linux通过调用fallocate()这个Linux API来实现,因此不需要额外的配置。
这是Windows平台的概念,当启用跟踪标记834的时候会使用。相对Linux平台,叫做Transparent Huge Pages(THP),影响内存分配,Linux上也存在834这个跟踪标记,但是由于平台的内存调度不同,微软建议仅对特定的高端系统使用。可以参考微软文章:SQL Server 在高性能的工作负载运行时的优化选项
WSFC,在Windows平台上,借助WSFC,SQL Server可以搭建集群和AlwaysOn技术实现高可用。但是Linux平台不存在WSFC,所以需要使用别的软件,微软建议使用Pacemaker,当然你也可以使用第三方的其他工具实现,只要它们支持。这部分在AlwaysOn章节独立介绍。有兴趣的读者可以先看一下官方文档:故障转移群集实例-Linux 上的 SQL Server
在这篇文章中,简要介绍了一些Linux上SQL Server的配置内容,下一节我们介绍一下Linux平台上的SQL Server升级、卸载和回滚。