前面两篇大部分属于Windows和 Linux 平台公用,但是这一篇主要集中在Linux内核层面。因为本系列是Linux上的SQL Server(以2017、2019为主体)的介绍。
完整的列表可以查阅官方文档: 性能最佳实践和 Linux 上的SQL Server 配置准则 ,这里挑一些重点选项来介绍一下。
首先是要了解正在使用的Linux 版本是否针对某些选项已经默认开启了,比如Red Hat Linux,官方文档有这样的描述,因为是自动翻译所以有点不顺口,看得懂英文的就按英文来吧:
然后本篇重点提一下下面几个配置项。
BIOS电源相关配置
大概8年前看过一篇台湾的MVP写的troubleshooting的文章,大概内容是一台Windows+SQL Server的服务器,出现了性能问题,但是对 数据库 不管如何优化都没有效果,无意之中修改了一下Windows的电源选项,设置成高性能,问题就解决了。今天看来,你从结论当然可以推断出各种原因,什么省电模式会导致如何如何的问题。但是在那个网络还不是非常普及,搜索引擎也还不能搜出大量问题解决思路的年代,不得不感叹他的坚持和运气。
那么换回Linux,其实原理是一样的。想要最大化性能,那么BIOS设置也尽可能为最大
虚拟环境配置事项
现在越来越多系统运行在虚拟环境下,如果不熟悉虚拟环境,最好先了解特定虚拟环境的一些限制。特别是对虚拟CPU、NUMA还有虚拟机内的磁盘跟宿主机磁盘的关联关系,这些都直接影响性能。最最重要的一点是,不管使用什么虚拟机管理软件,对于生产系统而言,不要使用动态内存!这些由于跟具体虚拟软件有关,就不在这里多说了。
其他配置
在Windows平台,有两个配置会影响SQL Server性能,一个是 锁定内存页(lock pages in memory) 和 即时文件初始化( instant file initialization ) 。对于Linux平台而言,这两者其实都不是必须的,因为Linux没有锁定内存页这个概念,使用memorylimitmb选项就可以避免内存问题和SQL Server进程的分页问题。针对Linux的即时文件初始化功能,SQL Server直接使用Linux API来实现同样功能,所以可以理解为Linux上自动实现数据文件的即时文件初始化。关于即时文件初始化可以看一下本人另外一篇文章: SQL Server On Linux中的即时文件初始化