佬技术总监,是这样优化产线 MySQL 数据库配置的
⛳️ 实战场景
很多时候,当我们在服务器端安装 MySQL 软件之后,就会立马进行数据表结构的创建,表数据的填充,但其实我们可以提前对 MySQL 配置文件进行一些修改,从而让其效率达到最优。
典型的一些配置调整。
⛳️ 查询缓存
当数据库查询使用比较频繁的时候,开启该命令。
query_cache_size/query_cache_type
查询缓存,建议关闭,即设置为
可以使用如下命令查询缓存状态是否开启
如果查询到 query_cache_type
为 OFF
,表示未开启缓存,其余参数说明如下所示:
query_cache_limit
:缓存大小限制,超过不缓存,缺省值为 1M,可以设置为 2M;query_cache_min_res_unit
:缓存块大小,默认 4KB;query_cache_size
:查询缓存大小,需要设置为 1024 的倍数,单位为字节;query_cache_type
:缓存类型,0 为不设置,1 为缓存所有结果,2 为缓存 select 语句中通过SQL_CACHE
指定的缓存。
禁止查询缓存的方法是直接注释 query_cache_limit
即可。
⛳️ 各种缓存
sort_buffer_size
可以设置为
查询排序时可使用的缓冲区大小,该参数对应的分配内存是单连接独占,只对 order by 和 group by 起作用,如果有 10 个连接,实际分配的内存是 10x4M = 10M,对于 4GB 内存的服务器,可以设置为 4~8M。
与该参数对应的两个参数是 read_buffer_size
和 join_buffer_size
,分别表示读查询缓冲区大小,联合查询缓冲区大小。
key_buffer_size
索引的缓冲区大小,根据服务器内存进行配置,一般占用实际内存的 10%左右即可。
max_allowed_packet
网络传输中消息的最大值,默认为 1M,最大值是 1024M,必须是 1024 的倍数。
⛳️ Innodb 缓存及其相关
innodb_buffer_pool_size
缓冲池大小,当使用 InnoDB 之后应该设置的选项,该值原则上越大越好,一般设置内存总量的 70%~80%大小。
设置格式如下所示,注意单位。
innodb_log_file_size
redo 日志的大小,重写日志用于确保写操作崩溃时的快速恢复,以 M 为单位,提高该值也能提高效率。
innodb_lock_wait_timeout
默认为 50 ,修改为 30
innodb_lock_wait_timeout
MySQL 事务超时时间,默认时间为 50S,当数据库锁超过这个值就会报错。
⛳️ 连接数
max_connections
MySQL 最大连接数,当服务器并发量比较大的时候,会返回 too many connections
错误时,可以调整该值进行处理,该值默认值为 100,你可以设置为更高的值。
设置的时候,可以参考产线环境,在操作库上执行下述代码。
对比得到的结果集,如果 max_used_connections
= max_connections
,即调高 max_connections
。
如果 max_used_connections
远远小于 max_connections
,则调低该值。
该内容还会衍生出一个配置,即暂存链接数 back_log
。该值表示的是 MySQL 暂停新请求之前,短时间内可以寄存的请求数,一般设置为 100~200 即可。
⛳️ 时间
wait_timeout 和 interactive_timeout
wait_timeout
表示 MySQL 关闭非交互的连接之前的等待秒数;interactive_timeout
表示 MySQL 关闭交互连接之前要等待的秒数。
interactive_timeout
默认值是 28800,可以优化到 6000(即 100 分钟), wait_timeout
酌情进行处理即可。
常用的配置如下:日志格式与路径
表名忽略大小写
慢日志相关
连接数配置
超时配置
缓存相关配置
innodb 缓冲区配置
📣📣📣📣📣📣🌻 本文如果发现错误,欢迎在评论区中指正哦 💗
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/4930b516d74568cfb69d53a4d】。文章转载请联系作者。
评论