影响mysql的场外因素

2022-06-20 20:07:43 浏览数 (1)

Mysql在使用时不仅会受到自己的配置参数影响, 服务器硬件设施, 内核参数也会对性能有影响.

服务器硬件

先看下服务器硬件对Mysql性能的影响, 这里主要介绍下CPU, 内存, 磁盘IO三个方面的影响.

CPU

影响CPU性能的主要是主频和核数, 根据运行服务的不同, CPU的选取重点也会有侧重点,

CPU密集型

运行需要更快的CPU, 主频越高越好

吞吐量优先型

WEB服务使用的数据库对并发量, 吞吐量要求较高, 需要并发处理SQL的能力更高, CPU核数越多越好;

在选择mysql时, 需要注意在5.6以后的版本, 对多核CPU支持比较好.

注意: 在64位主机运行在了32位操作系统, 会导致资源的严重浪费.

内存

因为数据会缓存到内存中, 内存会直接影响性能.

MyISAM引擎会将索引数据缓存到内存中, 数据信息从磁盘中读取.

InnoDB引擎会将索引和数据信息都会缓存到内存中.

同时, 内存越大, 数据写入会更快, 因为大量的数据可缓存到内存中, 批量写入磁盘.

在选择内存时, 尽量选择主板能支持最高主频CPU; 也应选择主板能支撑的型号; 单条内存也要足够大;

磁盘

现在磁盘一般都会选用固态磁盘, 相比SAAS磁盘除了读写速度快以外, 还有另外两个优点:

1.磁盘对随机读写支持比较好;

数据库使用场景中, 随机读写是比较多的.

2. 固态磁盘能更好支持并发;

内核参数调整

除了需要选择合适的硬件支撑外, 调整合适的内核参数也很重要.

调整TCP监听队列

net.core.somaxconn = 65535

socket监听(listen) 的backlog(socket监听队列)上限.

net.core.netdev_max_backlog = 262144

当网络接口接收数据包的速率比内核处理包的速率快时, 允许发送到队列的数据包的最大数量

net.ipv4.tcp_max_syn_backlog = 262144

尚未收到客户端确认信息的连接请求的最大值

timeout时, 加快tcp连接回收

net.ipv4.tcp_tw_reuse = 1

允许将TIME-WAIT 的sockets重新用于新的TCP连接

net.ipv4.tcp_tw_recycle = 1

允许TCP连接中TIME-WAIT状态的 sockets快速回收

net.ipv4.tcp_fin_timeout = 10

Socket 4次握手关闭时, 保持FIN-WAIT-2状态的时间

Tcp连接缓冲区

net.core.rmem_default = 262144

默认接收socket缓冲区大小值

net.core.rmem_max = 16777216

接收socket缓冲区的最大值

net.core.wmem_default = 262144

默认发送socket缓冲区大小值

net.core.wmem_max = 16777216

发送socket缓冲区最大值

减少失效连接占用系统资源

net.ipv4.tcp_keepalive_time = 1800 表示当keepalive起用的时候, TCP发送keepalive消息的频度. 缺省是2小时, 改为30分钟. net.ipv4.tcp_keepalive_probes = 3 对方不应答时, 探测包的发送次数 net.ipv4.tcp_keepalive_intvl = 15 探测包的发送间隔

共享内存设置

kernel.shmmax

定义共享内存段的最大值.

在64位系统中, 可取的最大值为物理内存值-1b. 应设置的足够大, 以便能在一个共享内存段中容纳整个Innodb缓存池大小; 一般为物理内存的一半.

交互内存设置

vm.swappiness=0

当物理内存完全满了之后, 使用交互内存.

系统的最大文件打开数

修改配置文件: /etc/security/limits.conf

代码语言:javascript复制
cat > /etc/security/limits.conf <
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
EOF

磁盘I/O调度策略

代码语言:javascript复制
echo"deadline" > /sys/block/sda/queue/scheduler

Linux提供了cfq, deadline和noop三种磁盘IO调度策略

cfq

是Complete Fairness Queueing的缩写, 是一个复杂的调度策略, 按进程创建多个队列, 试图保持对多个进程的公平, 但没考虑读操作和写操作不同耗时的情况;

deadline

这个策略比较简单, 只分了读和写两个队列, 内核会为每个I/O操作都设置一个超时时间;

noop

这个策略最简单, 只有单个队列, 只有一些简单合并操作;

Mysql这种数据库存储系统一般都会选用deadline

0 人点赞