深度优化数据库性能:Linux 内核参数调整解析

点击上方蓝字关注我

数据库服务器性能的优化是每个IT团队关注的焦点之一。除了数据库引擎的优化之外,合理调整操作系统的内核参数也是提高数据库性能的关键。本文将解析一些常见的 Linux 内核参数,以及它们在数据库服务器优化中的作用和建议的值。

1. 参数说明

1.1 关闭 IPv6 支持

apache 复制代码
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

**作用:**关闭对 IPv6 的支持,减轻系统负担,提高安全性

解析:

  • net.ipv6.conf.all.disable_ipv6:禁用系统中所有网络接口的IPv6

  • net.ipv6.conf.default.disable_ipv6:禁用默认网络接口的IPv6

**说明:**大多数数据库环境仍主要使用IPv4,关闭IPv6可以减轻系统对IPv6网络的处理负担,提高系统安全性。

1.2 防范放大攻击

go 复制代码
net.ipv4.icmp_echo_ignore_broadcasts = 1

**作用:**禁用对 ICMP 广播的回应,防范 ICMP 广播放大攻击。

解析:

  • net.ipv4.icmp_echo_ignore_broadcasts:设置为1表示不回应 ICMP 广播

**说明:**防范 ICMP 广播放大攻击,通过禁用对 ICMP 广播的回应,减少系统响应对可能的网络攻击的风险

1.3 启用恶意 ICMP 错误消息保护

go 复制代码
net.ipv4.icmp_ignore_bogus_error_responses = 1

**作用:**防止网络中的恶意主机发送虚假的 ICMP 错误消息,提高网络安全性

解析:

  • net.ipv4.icmp_ignore_bogus_error_responses:设置为1表示忽略虚假的 ICMP 错误消息

**说明:**防止网络中的恶意主机通过发送虚假的 ICMP 错误消息来欺骗系统,提高系统的安全性

1.4 核心转储优化

go 复制代码
kernel.core_uses_pid = 1

**作用:**配置核心转储文件名中包含PID,方便识别和调查问题

解析:

  • kernel.core_uses_pid:设置为1表示在核心转储文件名中包含PID

**说明:**在数据库环境中,当发生进程崩溃时,生成的核心转储文件包含进程的PID,有助于精确定位问题,加速故障排查

1.5 启用 SYN 洪水攻击保护

go 复制代码
net.ipv4.tcp_syncookies = 1

**作用:**启用 SYN 洪水攻击保护,防范网络攻击

解析:

  • net.ipv4.tcp_syncookies:设置为1表示启用 SYN 洪水攻击保护

**说明:**SYN 洪水攻击是一种常见的DDoS攻击方式,通过启用 SYN 洪水攻击保护,系统可以更好地应对大量的虚假连接请求,确保正常的网络服务

1.6 调整消息队列和共享内存

go 复制代码
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

**作用:**适当调整消息队列和共享内存的大小,以满足数据库的需求

解析:

  • kernel.msgmnb:设置消息队列的最大字节数

  • kernel.msgmax:设置消息队列中单个消息的最大字节数

  • kernel.shmmax:设置最大共享内存段的大小

  • kernel.shmall:设置系统范围内所有共享内存的总页数

**说明:**通过调整消息队列和共享内存的大小,可以满足数据库通信和数据共享的需求,优化系统性能

1.7 调整 TIME-WAIT 状态和 TCP 缓冲区

go 复制代码
net.ipv4.tcp_max_tw_buckets = 655350
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_rmem = 32768 131072 16777216
net.ipv4.tcp_wmem = 8192 131072 16777216

**作用:**优化TCP连接的管理,避免资源耗尽,并提高性能

解析:

  • net.ipv4.tcp_max_tw_buckets:设置 TIME-WAIT 状态的最大数量

  • net.ipv4.tcp_tw_recycle:设置为1表示启用 TIME-WAIT 快速回收

  • net.ipv4.tcp_tw_reuse:设置为1表示允许将 TIME-WAIT sockets 重新用于新的TCP 连接

  • net.ipv4.tcp_rmem:设置TCP接收缓冲区的最小、默认和最大字节数

  • net.ipv4.tcp_wmem:设置TCP发送缓冲区的最小、默认和最大字节数

**说明:**调整 TIME-WAIT 状态和 TCP 缓冲区参数,有助于优化系统处理大量TCP连接的性能,防止资源耗尽。

1.8 调整网络连接和资源管理

go 复制代码
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0

**作用:**提高系统的网络性能和连接管理

解析:

  • net.core.somaxconn:设置待处理连接的最大队列长度

  • net.core.netdev_max_backlog:设置每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目

  • net.ipv4.tcp_max_orphans:设置系统允许的最大孤立的TCP连接数量

  • net.ipv4.tcp_max_syn_backlog:设置TCP同时等待处理的最大连接请求数

  • net.ipv4.tcp_timestamps:设置为0表示禁用TCP时间戳

**说明:**通过调整这些参数,可以提高系统处理连接的能力,有效管理网络资源,防止系统性能瓶颈

1.9 配置 TCP Keepalive 和超时参数

go 复制代码
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_retries2 = 5

**作用:**提高TCP连接的稳定性和可靠性

解析:

  • net.ipv4.tcp_keepalive_time:设置TCP连接的空闲时间,超过此时间将发送keepalive消息

  • net.ipv4.tcp_keepalive_probes:设置TCP发送keepalive消息的次数

  • net.ipv4.tcp_keepalive_intvl:设置TCP发送keepalive消息的频率

  • net.ipv4.tcp_retries2:设置连接失败后重新尝试的最大次数

**说明:**通过配置TCP Keepalive和超时参数,确保长时间运行的连接保持稳定,减少因连接中断导致的性能损失

1.10 文件描述符和缓存优化

swift 复制代码
fs.file-max = 65536
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

**作用:**增加文件描述符限制和调整系统文件缓存大小,提高数据库读取和写入效率。

解析:

  • fs.file-max:设置系统最大文件描述符数

  • vm.dirty_background_ratio:设置系统脏页(尚未同步到磁盘的页)的最小百分比

  • vm.dirty_ratio:设置系统脏页的最大百分比

**说明:**通过增加文件描述符限制和调整系统文件缓存大小,可以优化数据库读写性能,提高系统整体性能

1.11 调整虚拟内存管理

go 复制代码
vm.swappiness = 0

**作用:**优化虚拟内存管理,减少对交换空间的依赖

**说明:**设置vm.swappiness为0表示尽量使用物理内存,减少对交换空间的频繁使用,提高系统整体性能

1.12 调整内核崩溃和恢复策略

go 复制代码
kernel.panic = 5
kernel.panic_on_oops = 1
kernel.core_pipe_limit = 0

作用: 配置内核崩溃和恢复策略,提高系统稳定性

说明: 通过调整这些参数,可以更好地应对内核崩溃和系统出现问题的情况,提高系统的稳定性和可靠性

1.13 调整网络连接追踪

go 复制代码
net.nf_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max = 655350
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200

作用: 优化网络连接追踪,提高系统网络性能

说明: 调整网络连接追踪相关参数,可以更好地适应大量网络连接的环境,提高系统网络性能

1.14 限制系统打开的端口范围

go 复制代码
net.ipv4.ip_local_port_range = 1024 65535

作用: 限制系统打开的端口范围,提高系统安全性

说明: 通过限制可用端口范围,可以减少潜在的安全风险,提高系统安全性

2. 结语

深度调优数据库服务器性能需要综合考虑多个方面,包括网络安全、连接管理、资源利用等。合理配置 Linux 内核参数是提高数据库性能的关键缓解之一。通过这些深度调优,可以更好地发挥数据库在高负载环境下的性能潜力,实现数据库性能的巅峰状态。

往期精彩回顾

  1. MySQL高可用之MHA集群部署

2. mysql8.0新增用户及加密规则修改的那些事

3. 比hive快10倍的大数据查询利器-- presto

4. 监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

  1. PostgreSQL主从复制--物理复制

  2. MySQL传统点位复制在线转为GTID模式复制

7. MySQL敏感数据加密及解密

8. MySQL数据备份及还原(一)

9. MySQL数据备份及还原(二)

扫码关注

相关推荐
鸿永与1 小时前
『SQLite』表达式操作
数据库·sqlite
开源优测2 小时前
这些年 devops 和自动化测试项目实践工具链集合
运维·devops
Bytebase3 小时前
MySQL 如何赶上 PostgreSQL 的势头?
运维·数据库·dba·开发者·数据库管理·devops
acegi135794 小时前
MySQL - 子查询和相关子查询详解
数据库·mysql
背太阳的牧羊人4 小时前
使用 SQL 和表格数据进行问答和 RAG(7)—将表格数据(CSV 或 Excel 文件)加载到向量数据库(ChromaDB)中
数据库·sql·langchain·excel
MonkeyKing_sunyuhua5 小时前
在 Ubuntu 22.04 上从 Wayland 切换到 X11的详细步骤
linux·运维·ubuntu
你若安好我便天晴5 小时前
sql--MERGE INTO
数据库·sql
半桶水专家5 小时前
go怎么终止协程的运行
数据库·sql·golang
xchenhao5 小时前
Linux 环境(Ubuntu)部署 Hadoop 环境
大数据·linux·hadoop·ubuntu·hdfs·环境·dfs
weixin_438335405 小时前
【更新中】Mysql问题分析
数据库·mysql