mysql服务器参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql服务器参数相关的知识,希望对你有一定的参考价值。
以下列出了一些主要需要关注的参数。要看更全的,找mysql官方文档,注意要对应版本。
max_connect_errors
最大错误连接数,达到时会阻止连接,建议大于5000
max_connections
并行的最大连接数,建议2000-5000
max_used_connections
服务启动后曾经达到的最大连接数,若达到max_connections,则表示某个时刻存在突然的高峰连接,可能会有性能问题。
threads_connected
当前连接数。
threads_running
指同时运行的线程数目。这个值一般不会大于逻辑CPU的个数,如果经常有过多的线程同时运行,那么可能就意味着有性能问题。这个指标很重要,往往表明了一个系统的繁忙程度,它在系统爆发性能问题之前,会有一个上升的趋势,此时收集的性能信息,将有助于我们诊断复杂的性能问题。
Qcache_lowmem_prunes
该变量记录了由于查询缓存出现内存不足,而需要从缓存中删除的查询数量,可通过监控Qcache_lowmem_prunes的增量,来衡量是否需要增大query_cache_size。
Created_tmp_tables
创建内存临时表的数量,如果Created_tmp_disk_tables比较大,则应该考虑增加tmp_table_size的大小。应该将tmp_table_size和max_heap_table_size简单调整到大小一样。32MB一般足够了。对这两个参数的控制通常基于内存引擎的临时表可以增长的阈值,若超过了这个阈值,就会转化成On-disk MyISAM表。
Open_tables
当前打开的表的数量。
Opened_tables
已经打开的表的数量。
查看Open_tables及Opened_tables的增量时,如果Opened_tables的增量比较大,那么可能table_open_cache不够用了。如果Open_tables对比table_cache_size并不大,但Opened_tables还在持续增长,那么也可能是显式临时表被不断打开而导致的。
table_open_cache
默认的设置太小了,生产环境中应该将其设置得足够大,数千到一万是比较合理的值。检查Opened_tables status变量,如果该值比较大,而我们不经常运行FLUSH TABLES命令,那么应该增加table_open_cache的变量值。
table_definition_cache
一般可以将其设置为足够高的值来缓存表定义,比如4096,这并不会耗费什么资源。默认的256太小了。
innodb_buffer_pool_size
这个参数主要作用是缓存innodb表的索引,数据,插入数据时的缓冲。一个简单的策略是如果数据库很大,远远超过内存,那么应设置尽可能大的缓冲池(buffer pool)。如果数据库较小,一般来说,缓冲池的大小设置为稍大于数据库的10%就可以了。我们的库不会太小,所以,这个值应该尽可能大,如设置为50-80%的物理内存。默认值是128M,太小了。
innodb_log_file_size
事务日志大小。日志太小,会频繁切换日志,性能差;日志太大,会导致灾难恢复时过慢。建议是256M-512M。
innodb_flush_log_at_trx_commit
建议设置为2,兼顾性能和安全。0最快,1最安全,2可能会丢失一秒的事务。
0:日志缓冲将每秒一次被写到日志文件中,并且对日志文件进行磁盘操作的刷新,但是在事务提交时不进行任何操作。
1:在每个事务进行提交时,日志缓冲将被写到日志文件,且把对日志文件的变更刷新到磁盘中。
2:在每个事务进行提交时,日志缓冲将被写到文件,但不会对日志文件进行到磁盘操作的刷新,对日志文件的刷新每秒发生一次。
sync_binlog
写多少次二进制日志后,同步磁盘。默认是0,不同步。建议设置为8-20。设置为1最安全,但可能会造成IO瓶颈。
read_rnd_buffer_size
排序后,按照排序后的顺序读取行时,则通过该缓冲区读取行,以避免搜索硬盘。将该变量设置为较大的值可以改进ORDER BY的性能。但是,这是为每个客户端分配的缓冲区,因此你不应该将全局变量设置为较大的值。相反,只为需要运行大查询的客户端更改会话变量即可。
sort_buffer_size
每个排序线程分配的缓冲区的大小。增加该值可以加快ORDER BY或GROUP BY操作。查询需要排序的时候(如filesort)才分配sort_buffer_size指定的内存,不要设置得过大,否则小的排序也需要大的内存。确定需要进行大的排序操作的时候,可以在会话级别定义大的值。
query_cache_size
缓存查询结果。默认是0禁用的。要开户,需要同时保证query_cache_type=ON。建议设置为64M-256M,不要太大。写库时,会清除相关数据的缓存,所以这个值太大,会导致写性能变差。
以上是关于mysql服务器参数的主要内容,如果未能解决你的问题,请参考以下文章