原文地址:Mysql一些重要配置参数的学习与整理(三)html
以前的Mysql一些重要配置参数的学习与整理(一)和Mysql一些重要配置参数的学习与整理(二)中,对于线上mysql服务器的一些配置参数进行了学习,不过参阅官方doc后对其中的一些参数的配置的理解不是很清晰,今天与同事进行了交流和沟通,都一些重要的配置交换了意见,本篇就对其中的一些疑问点,整理一下心得。mysql
skip-external-locking做用sql
在Mysql Linux 的发行版中,默认存在一行skip-external-locking,它表示跳过外部锁定,与之相对,External-locking变量表示启用外 部锁定,用于多线程条件下对MyISAM数据表进行锁定,默认状况下mysql是禁用外部锁定的,在现实生产中,咱们的业务环境是单服务器环境,不须要外 部锁定,因此将其禁用。数据库
key_buffer_size 在InnoDB引擎时无效windows
在 现实的生产环境中,咱们曾对业务库进行过升级,虽然咱们的业务库使用的是InnoDB引擎,可是其中仍然存在几张遗留的使用MyISAM存储引擎的表,设 置这个参数也是为了提供对于这几张表的访问性能,用于这几张表的索引更好的处理读和多写操做。另外,在以前windows上安装mysql 5.5时,会默认产生几个不一样生产环境的my.ini文件,这个参数的配置也参阅了其中的一些配置。服务器
table_open_cache=64 设置是否太小多线程
这个参数的设置最好根据现实生产环境进行设置,在mysql命令行经过show global status like 'open%_tables%',能够查到两个重要的参数,以下:并发
+---------------+-------+性能
| Variable_name | Value |学习
+---------------+-------+
| Open_tables | 81 |
| Opened_tables | 88 |
+---------------+-------+
对与大多数的服务器设置,建议参考一下公式:Open_tables / Opened_tables >= 0.85;Open_tables / table_open_cache <= 0.95
可是并非设置table_open_cache越大越好,由于table_cache加大后,使得mysql对 SQL响应的速度更快了,不可避免的会产生更多的死锁(dead lock),这样反而使得数据库整个一套操做慢了下来,严重影响性能。因此平时维护中仍是要根据库的实际状况去做出判断,找到最适合你维护的库的 table_open_cache值。
详请参阅:参数table_open_cache。
myisam_sort_buffer_size参数只对MyISAM引擎有效
在现实的生产环境中,虽然咱们的业务库使用的是InnoDB引擎,但有多张业务表使用的是MyIsam引擎,须要这个参数,用于进行表恢复时使用的缓冲区的大小,也是参考了mysql 5.5的配置。
net_buffer_length默认为16K,设置为8K?
这个参数根据客户端connection 语句的长度有关,现实的业务并不繁杂,语句也比较简单,参考mysql 5.5的配置,设置net_buffer_length=8k,不过通过与同事讨论,决定使用默认值16K。
thread_cache_size设置为20的依据
这个参数的设置与max_connections有关,max_connections表示最大容许的并发客户端链接数,会影响在服务器上运行的线程数量,默认值是151,thread_cache_size 的设置,官方doc建议公式:8+(max_connections / 100),这与现实的业务也存在关系,当服务器并发很大时,须要修改max_connections的值以知足业务须要,在咱们的现实业务 中,thread_cache_size设置为20较为合适。
innodb_flush_log_at_trx_commit 官方doc建设不要修改默认值
虽然mysql官方doc建议将innodb_flush_log_at_trx_commit设置为1,但在现实的业务中,客户对于业务性能的速度很高,默认为1表示,在每次事务提交的时候,InnoDB日志缓冲区的内容都会被写入到日志文件,而且日志文件会被刷新到磁盘。设置为2减小了刷新磁盘的操做,虽然在忽然断点或系统崩溃时可能丢失事务数据,可是在业务容许范围内,相反修改此参数对于业务速度有很大的提高。
read_rnd_buffer_size增长order by查询效率
在What exactly is read_rnd_buffer_size中有了一点理解,其中提到了read_buffer_size,在三个方法优化MySQL数据库查询中大概的了解了这个参数的做用,当一个查询不断地扫描某一个表,MySQL会为它分配一段内存缓冲区。read_buffer_size变 量控制这一缓冲区的大小。若是你认为连续扫描进行得太慢,能够经过增长该变量值以及内存缓冲区大小提升其性能。不过貌似这两个参数都是值针对于 MyIsam表的,在mysql安装目录my.ini中看到这样一句注释:Size of the buffer used for doing full table scans of MyISAM tables。对于这个参数的配置还须要再讨论。
InnoDB_thread_concurrency
具体的能够看这里