优化技巧
- 配置文件的快速查找
1
2
3
4/usr/libexec/mysqld --verbose --help|grep -A 1 'Default options'
200815 16:01:04 [Note] Plugin 'FEEDBACK' is disabled.
Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf - 配置项使用小写,单词之间使用横线或下划线分隔,并且使用统一的规范
- 作用域:全局、会话、对象
Buffer Pool设置思路
- 从服务器内存开始,减去系统本身使用内存,减去其他服务使用内存(如果存在)
- 减去MySQL本身使用到的内存(比如为每个查询操作分配的一些缓冲)
- 减去足够让操作系统缓存InnoDB日志文件的内存,至少是足够缓存最近经常访问的部分;预留至少可以缓存二进制日志最后一部分以便用于主从复制
- 减去其他配置的MySQL缓冲和缓存需要的内存(比如MyISAM的Key Cache或Query Cache)
- 除以105%,向下取整
InnoDB缓冲池(InnoDB Buffer Pool)
缓存内容
- 索引
- 行数据
- 自适应哈希索引
- Insert Buffer
- 锁
- 其他内部数据结构
线程缓存
- 保存当前没有与连接关联但是准备为后面新的连接服务的线程。
- 使用thread_cache_size进行设置。
- 线程池中的每个线程或者休眠状态的线程占用内存大小为256KB。
- 常用观察参数
- Threads_cached:线程缓存内的线程的数量。
- Threads_connected:当前打开的连接的数量。
- Threads_created:创建用来处理连接的线程数。如果Threads_created较大,你可能要增加thread_cache_size值。缓存访问率的计算方法Threads_created/Connections。
- Threads_running:激活的(非睡眠状态)线程数
Table Cache
- 表.frm文件的解析结果
- 打开表的缓存:table_open_cache,每个线程独有(表.frm文件的解析结果)
- 表定义缓存:table_definition_cache,全局
- 参考opened_tables参数进行缓存配置的调整
IO配置
并发配置
- innodb_thread_concurrency:CPU数量 * 磁盘数量 * 2