Optimizing MySQL Configuration |优化MySQL配置(二)

这里推荐了两个工具

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
  • 小心任意大小的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/的效率很是高,直接写进内存)

PPT在这里缓存

转载请标明出处,谢谢安全

相关文章
相关标签/搜索