Mysql 配置方面的优化主要考虑的方面就是关于内存和磁盘和并发量,
由于mysql 经常使用的是inoodb存储引擎,所以以下讲的主要是innodb引擎的参数优化
1.内存和磁盘方面
Innodb_buffer_pool_size innodb缓存池大小,默认值32M,由于innodb的相关操作都会使用到innodb缓冲池,所以增大此参数,可以提高性能,此参数值的大小可设定为
系统总内存 – mysql运行内存 – mysql其他功能所需内存 – 系统占用内存 – 其他程序运行内存
Innodb_log_file_size参数,innodb插入数据时会记录日志,如果日志文件过小就会频繁刷写日志造成性能下降,所以该值的设置应该至少满足业务需求一个小时的增长量
Innodb_log_buffer_size 日志缓冲区大小,该值应该满足一秒内的增长量,因为innodb引擎会一秒刷新一次缓冲区,所以该值设置太大没有意义
innodb_flush_log_at_trx_commit
日志行为方式 该值有0,1,2
0表示把日志缓冲记录到日志文件,一秒一次,事务提交时不做任何事,可能会丢失一秒事务
1日志缓冲写到日志文件,每次事务提交都会进行持久化操作,设置该值不会都是任何事务
2每次提交日志缓冲到日志文件,但并不刷新,innodb一秒做一次刷新,和0相比,mysql进程挂掉不会丢失事务,断电时会丢
日志的方式会改变io的读写方式,能够将随机读写io变成顺序读写,从而提高读写速度
Innodb_data_home_dir 设置数据文件存储位置,可将数据文件存储在读写性能好的磁盘上
Innodb_flush_method 数据刷写方式,跟操作系统有关,该值表示了操作系统i/0的方式,i可选择速度块的i/o方式
windows下选项: async_unbuffered, 不使用缓冲的i/O innodb_flush_log_at_trx_commit 设置为2时例外
unbuffered(默认选项), 不使用原生异步i/o
normal 不使用原生异步i/o或者无缓冲i/o
非windows下选项:fdatasync:(默认选项)
0_DIRECT: 依赖操作系统,并不是在所有的 类Unix系统
并发相关配置
Innodb_thread_concurrency 限制线程怎样访问内核数据 0不限制 计算公式为 cpu数量 * 磁盘数量 * 2 一般设置的值比该值小,最好根据实验获取
Innodb_commit_concurrency 控制同一时间内可提交事务的线程数量
此外,还有最大连接数和最大超时时间相关的参数,每一个连接数据库的系统最大连接数量都时可以从相应系统中获取的,不需要太关心,除非真的用到