问君能有几多愁,恰似不懂Linux SQL如何调优——聊聊SQL Server on Linux最佳实践

自从微软开始拥抱Linux, SQL Server 很快就推出了 Linux版本, linux的SQL 与windows 在运行环境截然不同,SQL自己的配置和优化几乎想通,但是涉及到操作系统层的优化,还是有所区别。 官方给了一些最佳实践。

SQL Server 配置

1、Use PROCESS AFFINITY for Node and/or CPUs,建议将服务器的所有CPU和NUMA节点进行关联,处理器关联可帮助维护高效的 Linux 和 SQL 计划行为。


/*下面显示如何设置与 CPU 和 NUMA 节点的进程关联。 该示例假定服务器包含 256 个 CPU,这些 CPU 分为四组,每组各有 16 个 NUMA 节点。 线程未分配给任何 NUMA 节点或 CPU。
组 0:NUMA 节点 0 到 3,CPU 0 到 63
组 1:NUMA 节点 4 到 7,CPU 64 到 127
组 2:NUMA 节点 8 到 12,CPU 128 到 191
组 3:NUMA 节点 13 到 16,CPU 192 到 255 */
​
--设置与 0 和 2 组中所有 CPU 的关联。
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU=0 TO 63, 128 TO 191;
​
--设置与 NUMA 节点 0 和 7 中所有 CPU 的关联
​
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY NUMANODE=0, 7;
​
--设置与 AUTO 的关联
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU=AUTO;
​

一般建议将所有的CPU进行关联。

2、配置多个 tempdb 数据文件


/*Linux 系统下,在安装SQL Server的过程,没有进行tempdb的配置,因此为了平衡tempdb的负载,应该要对tempdb进行分配,建议添加数据文件,数量为CPU核心数目相同,将文件放在最快的磁盘,如果有多个磁盘,可以平均放在不同的磁盘上。添加文件代码如下类似*/
​
USE [master]
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev01', FILENAME = N'/var/opt/mssql/data/tempdev01.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
GO
​

3、 mssql-conf 设置内存限制

SQL Server 为了确保Linux操作系统有足够的可用内存,因此在默认情况下只使用物理内存的80%,但是对于大内存的服务器20%内存对Linux太大,例如,在使用 1 TB 系统的 RAM 中,默认设置将使大约 200 GB 的 RAM 未使用。所以我们需要进行设置,可以通过mssql-conf进行设置。

--下面代码是将内存改为64000M
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 64000
--完成后重启服务
sudo systemctl restart mssql-server

注意此处配置的内存,并不是指SQL Server种的最大内存,sp_configure 中可以设置 max server memory (MB),这里指的是相当于windows版本下的操作系统内存的概念。如图

而  max server memory (MB) 指的是

操作系统配置

Linux 上SQL Server要获得最好的性能,有以下建议

##CPU配置

下表提供了建议的 CPU 设置:

设置 参考信息
CPU frequency governor performance See the cpupower command
ENERGY_PERF_BIAS performance See the x86_energy_perf_policy command
min_perf_pct 100 See your documentation on intel p-state
C-States C1 only See your Linux or system documentation on how to ensure C-States is set to C1 only

磁盘配置

设置 参考信息
disk readahead 4096 See the blockdev command
sysctl settings kernel.sched_min_granularity_ns = 10000000 kernel.sched_wakeup_granularity_ns = 15000000 vm.dirty_ratio = 40 vm.dirty_background_ratio = 10 vm.swappiness=10 See the sysctl command

多节点的NUMA系统中设置自动NUMA

如果在多节点上安装 SQL Server NUMA系统、 以下kernel.numa_balancing默认启用内核设置。 若要允许 SQL Server 上运行最大效率NUMA系统,禁用自动 numa 平衡的多节点 NUMA 系统上:

sysctl -w kernel.numa_balancing=0

内核虚拟地址空间设置

默认设置vm.max_map_count (默认 65536) 对于 SQL Server这值太小。 将此值 (这是一个上限) 更改为 256k。

sysctl -w vm.max_map_count=262144

SQL Server 数据和日志文件禁用  last accessed date/time

存储 SQL Server 数据和日志文件使用noatime属性

Leave Transparent Huge Pages (THP) enabled

默认情况下,大多数 Linux 安装应该对具有此选项。 我们建议用于最一致的性能体验,要启用此配置选项。

swapfile

确保已正确配置的交换文件,以避免任何内存不足问题。

Virtual Machines and Dynamic Memory

如果正在虚拟机在 Linux 上运行 SQL Server,请确保您选择选项来修复虚拟机保留的内存量。 不要使用 HYPER-V 动态内存等功能。

总结

以上是官方的最佳实践和安装配置选项。 性能问题的调优和一些实践。改天再来写一些。

问君能有几多愁,恰似不懂Linux SQL如何调优——聊聊SQL Server on Linux最佳实践相关推荐

  1. linux磁盘io调优,Linux系统管理和调优(内存、CPU、磁盘IO、网络)

    系统管理 Author:Rich七哥 查看 CPU 负载相关工具,找出系统中使用 CPU 最多的进程 查看 Memory 运行状态相关工具,找出系统中使用内存最多的进程 查看 IO 运行状态相关工具, ...

  2. linux系统基础调优32条技巧

    linux系统基础调优32条技巧 版权声明:原创作品,如需转载,请与作者联系.否则将追究法律责任. 缘起:本文为老男孩linux系统基础优化部分,一些高级方面的调优欢迎大家一起讨论或单独交流,谢谢大家 ...

  3. 通过案例学调优之--SQL Profile

    通过案例学调优之--SQL Profile 一.什么是SQL Profile(概要) SQL Profile在性能优化中占有一个重要的位置. MOS里这么描述SQL Profile: SQL Prof ...

  4. linux内核关闭tcp校验,linux内核tcp调优规范与方案

    1.TCP常用内核参数优化 上一篇我们介绍了服务器上有大量的TIME_WAIT等待,可能造成的危害,以及给web服务器带来负担.如何解决这个问题呢,其实,解决思路很简单,就是让服务器能够快速回收和重用 ...

  5. DB2 SQL性能调优秘笈pdf

    下载地址:网盘下载 简介 编辑 <DB2 SQL性能调优秘笈>是一本不可多得的DB2数据库性能调优秘笈,由拥有20余年DB2工作经验的资深数据库专家撰写,Amazon全五星评价畅销书.&l ...

  6. 11g新特性-自动sql调优(Automatic SQL Tuning)

    11g新特性-自动sql调优(Automatic SQL Tuning) 在Oracle 10g中,引进了自动sql调优特性.此外,ADDM也会监控捕获高负载的sql语句. 在Oracle 11g中, ...

  7. 十八般武艺玩转GaussDB(DWS)性能调优:SQL改写

    摘要:本文将系统介绍在GaussDB(DWS)系统中影响性能的坏味道SQL及SQL模式,帮助大家能够从原理层面尽快识别这些坏味道SQL,在调优过程中及时发现问题,进行整改. 数据库的应用中,充斥着坏味 ...

  8. Azure SQL性能调优实践

    Azure SQL性能调优实践 注:blog具备时效性,所有内容都是在当前时间为准,截止时间2017-6-5 首先,创建了一个测试数据库 MaxAadventureWorkTest 使用了 示例数据库 ...

  9. linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms

    linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms changing a readonly file (linu single user mode) ...

最新文章

  1. python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方、立方)、np.power函数默认返回整数格式、np.float_power函数默认返回浮点数
  2. 备战 ‘金三银四’ 必备超多软件测试面试题全在这里
  3. 跨网页的新手引导_IOS中新手引导页面的实现(新手引导,Guide)
  4. 【Python】pandas 缺失数据处理大全(附代码)
  5. 微软发布 Microsoft Edge 85 稳定版
  6. Python yaml模块
  7. 使用python实现深度神经网络--学习笔记
  8. python UI自动化图片断言
  9. ubuntu安装nat123
  10. 必须安装三星系列android系统智能手机usb驱动程序,三星usb手机驱动
  11. offline RL介绍
  12. 场外期权:一个你从未了解过的金融衍生品市场正在中国悄悄壮大
  13. MongoDB find查询语句详解
  14. python文件怎么另存为,python文件怎么保存
  15. Android 版本更新,支持增量更新
  16. BlockingQueue队列有哪些
  17. CMS几种GC模式解读
  18. 网络安全2.0主动防御体系有哪些新思路?
  19. android iOS App客户端如何实现在线支付
  20. 拼多多上市了!社交电商的力量不容小觑!

热门文章

  1. 虫师自动化测试robot Framework 框架的学习2
  2. 四则运算编程题第二版
  3. 你了解SVN, CVS等版本控制器吗?
  4. Java 16 正式发布
  5. PostgreSQL 空间处理函数
  6. 笨办法学 Python · 续 练习 22:后缀数组
  7. Matplotlib 中文用户指南 8.1 屏幕截图
  8. 米斯特白帽培训讲义 漏洞篇 弱口令、爆破、遍历
  9. 封装UIlabel 辨别用户名 ,话题 ,链接,电话,高亮文字等
  10. iOS-APP启动页加载广告