本文共 1132 字,大约阅读时间需要 3 分钟。
mysql是多线程结构,包括后台线程和客户服务线程,多线程可以有效利用服务器资源,提高数据库的并发性能。在mysql的并发能力上,主要有有下列参数界定。分别为max_connections,back_log,thread_cache_size,table_open_cache等。
1.调整max_connections提高并发连接数
max_connections表示最大连接数量,默认值为151,如果状态变量connection_errors_max_connctions不为零,并且一直在增长,说明不断有连接请求因为数据库连接数量达到允许的最大值而连接失败,应该考虑增大该值。在linux平台,mysql支持500-1000个连接不是问题,但是再window平台,最大连接数有以下限制:
(open tables*2+open connections)<2048
每个session操作mysql数据库表都需要占用文件描述符,数据库连接本身也要占用文件描述符,因此在增大max_connections时,也要注意评估open-files-limit的设置是否够用!
2.调整back_log
back_log参数控制mysql监听tcp端口时设置的积压请求栈的大小,默认是50,5.6版本之后默认值为50+(max_connections/5),但是最大不能超过900
如果需要数据库在较短时间内处理大量的连接请求,可以考虑增大back_log的值。
3.调整table_open_cache
每一个sql执行线程至少要打开一个表缓存,参数table_open_cache控制所有sql执行线程可以打开表缓存的数量,这个参数应该根据最大连接数max_connections以及每个连接执行关联查询中所涉及的表的最大数量来设定。
max_connections*n
如果mysql的状态变量opened_tables比较大,说明table_open_cache设置的太小,应该适当增大,但是增大table_open_cache的值会增加mysql对文件描述符的使用量,因此也要注意评估open_files_limit的设置是否足够。
4.设置thread_cache_size
为了加快连接数据库的速度,mysql会缓存一定数量的客户服务线程以备重用,通过参数thread_cache_size可控制mysql缓存客户端服务线程的数量
5.innodb_lock_wait_timeout的设置
参数innodb_lock_wait_timeout控制innodb事务执行锁的时间,默认为50ms,可以根据动态调整。对于后台执行的批处理操作,可以调大避免回滚。
转载地址:http://pekmi.baihongyu.com/