本文主要基于MySQL 5.7版本的数据库环境,总结my.cnf文件中核心参数的配置使用,让更多的人对MySQL技术体系有更全面、更专业的深度了解。
一、客户端核心参数
1、port
端口号,默认3306
2、socket
Socket文件地址,默认以.sock为文件名称后缀,用于UNIX套接字通信。
二、服务端全局区(SGA)缓冲区参数
1、innodb_buffer_pool
InnoDB缓冲池,位于主内存
缓存被访问过的表数据、索引文件、插入缓冲、数据字典等
推荐大小设置为物理内存的50%-80%
2、innodb_buffer_pool_instance
将缓冲池进一步划分为互相隔离的内存区域,更好的支持并发读写,减少内存争用现象
默认值为1
仅当innodb_buffer_pool参数配置大于1024MB有效
通过命令show engine innodb status查看每个内存区域的内存使用情况
3、innodb_old_blocks_time和innodb_old_blocks_pct
InnoDB缓冲池innodb_buffer_pool,内部由LRU链表管理
LRU链表进一步分为old pages list和young pages list:
old pages list:存放长时间未被访问的数据页
young pages list:存放最新、最近被访问的数据页
当超过innodb_old_blocks_time参数设置的时间时,就会移动到old pages list,默认是1000ms。
innodb_old_blocks_pct参数决定old pages list在LRU链表及innodb_buffer_pool中占比:
存在大表扫描或者执行mysqldump备份操作时,可能会剔除热数据,增加I/O压力,因此要适当减少innodb_old_blocks_pct参数值
4、innodb_log_buffer_size和innodb_log_waits
innodb_log_buffer_size:日志缓冲区的大小,取值范围16MB-64MB
innodb_log_waits:等待日志缓冲刷出的次数
通过命令show global status like "%innodb_log_waits%"查看:
如果发现innodb_log_waits值大于0,并且持续增长,可以考虑增大innodb_log_buffer_size
5、innodb_log_buffer
事务在内存中的缓冲区的大小,即redo log buffer
6、query_cache_size和query_cache_type
query_cache_siz静态数据的缓存区大小
默认关闭,建议关闭,保证数据库的TPS
数据仓库场景可能会选择开启