 |
 |
 |
这里推荐了两个工具 mysqltuner pt-variable-advisor 这两个工具网上的详解不少,自行百度谷歌html 借助 MySQLTuner 优化 MySQL 性能mysql pt-variable-advisorlinux |
 |
|
 |
 |
官方的一个自动生成mysql配置文件的工具sql |
 |
议程
- MySQL 配置文件优化基础知识
- 配置MySQL的工具
- 介绍部分重要的变量选项
|
 |
如今咱们来看下配置选项
- 不一样类别的配置选项
- 常规选项
- MyISAM的选项
- InnoDB的选项
- 可见性(应该理解为UI可视化的配置)和日志选项
|
 |
获取状态变量
- 咱们针对 SHOW GLOBAL STATUS 输出作了多样化阐述
- Percona Toolkit工具集里面的 pt-mext 对你颇有帮助
- pt-mext -r --mysqladmin ext -i100 -c4
 |
 |
常规选项
- max_connections
- 连接的容许(应该翻译成合理)范围是多少
- 观察 max_used_connections 状态值
- thread_cache
- 使用cache来防止过分的(短连接[长链接不明显])线程建立(带来的性能消耗)
- 50-100是个不错的范围。关注threads_created状态值
- table_cache/table_open_cache mariadb官方 mysql官方
- 缓存打开表的实例(缓存的是文件描述符)
- 单个表能够有多个打开文件描述符
- 观察 opened_tables 状态值(若是发现open_tables等于table_open_cache,而且opened_tables在不断增加,那么就须要增长table_open_cache的值,但若是table_open_cache设置成很大,可能会形成文件描述符不足,形成性能不稳定或者链接失败)
- 从4096开始
- MySQL只在须要的地方使用
|
 |
常规选项
- open_files_limit
- MyISAM 表require 最多2个文件句柄
- 每一个链接都是文件句柄(file handle,能够理解为用来方便控制file[文件]的东西,这玩意是开山祖师爷们的神翻译,和socket翻译成套字同样逆天)
- 在大多数系统里面设置成65535是安全的
- table_definition_cache
- 缓存表定义(CREATE TABLE)
- 每一个表只能有一个记录
- 观察 opened_table_definitions
- 设置表的数量 + 10% 除非表数量50K+
|
 |
常规选项
- back_log
- 若是每秒有不少connection链接过来,须要调整
- 2048是合理的值
- max_allowed_packet
- 限制查询的最大大小
- 限制内部字符串变量的大小
- 16MB是个不错的大小
- max_connect_errors
- 防止密码暴力破解
- 可引发“Host Blocked” 错误信息
- 值在1000000范围能够接受
|
 |
常规选项
- skip_name_resolve
- 避免连接的时候查找DNS。这样更快和安全
- 不要使用主机名在 GRANTs(受权语句)
- old_passwords
|
 |
常规选项
- log_bin
- 启用能够用来作主从复制和定点还原
- 设置“mysql-bin”来避免默认命名
- sync_binlog
- 使Binlog持久化。若是有 RAID带BBU或者Flash,设置成1
- 这可能成为磁盘慢的真正性能杀手
- expire_log_days
- 在这个天数后清除旧的二进制日志
- 14(2周)配合周备份是很好的一个值
|
 |
常规选项
- tmp_table_size
- max_heap_table_size
- 一般设置为相同的值(基于工做负载)
- 留意Created_tmp_disk_tables 状态值 (这里有叶金荣的一篇文章)
- 小心任意大小的BLOB/TEXT字段引发磁盘临时表生成
- query_cache_size
- 只有当通过测试提供了显著的收益时,才启用查询缓存(MYSQL的查询缓存用于缓存select查询结果,并在下次接收到一样的查询请求时,再也不执行实际查询处理而直接返回结果,有这样的查询缓存能提升查询的速度,使查询性能获得优化,前提条件是你有大量的相同或类似的查询,而不多改变表里的数据,不然没有必要使用此功能。能够经过Qcache_lowmem_prunes变量的值来检查是否当前的值知足你目前系统的负载。注意:若是你查询的表更新比较频繁,并且不多有相同的查询,最好不要使用查询缓存。)
- 常引发stalls(没弄懂这里表明什么)和争用
- 不要设置超过512MB
|
 |
常规选项
- sort_buffer_size
- 在内存里面做为排序缓存区
- 观察 sort_merge_passes(sort_merge_passes 包括两步。mysql 首先会尝试在内存中作排序,使用的内存大小由系统变量 sort_buffer_size 决定,若是它的大小不够把全部的记录都读到内存中,mysql 就会把每次在内存中排序的结果存到临时文件中,等 mysql 找到全部记录以后,再把临时文件中的记录作一次排序。这再次排序就会增长 sort_merge_passes。实际上,mysql 会用另外一个临时文件来存再次排序的结果,因此一般会看到 sort_merge_passes 增长的数值是建临时文件数的两倍)
- 考虑在大的查询会话里面增大
- 值在1MB周围是一个不错的默认值
- 较大值在小查询会下降性能
- join_buffer_size
- 对没有索引的表链接提升性能
- 能获取到关联主键在每一个表链接更好
- 8MB是一个合理的值
- default_storage_engine
|
 |
常规选项
- read_rnd_buffer_size
- 用于在排序中读取行的缓冲区
- 指定最大值
- 一般设置16MB左右的值
- 不要和 read_buffer_size 混淆
- Tmpdir
- 指定临时目录的位置
- tmpfs是常不错的选择,除非须要很是大的临时空间。
- tmpdir=/dev/shm(/dev/shm/是linux下一个目录,/dev/shm目录不在磁盘上,而是在内存里,所以使用linux /dev/shm/的效率很是高,直接写进内存)
|