调整 MySQL 并发相关的参数

MySQL server 是多线程结构,包括后台线程和客户服务线程。多线程能够有效利用服务器资源,提升数据库的并发性能。在 MySQL 中,控制并发链接和线程的主要参数包括 max_connections、back_log、thread_cache_size 以及 table_open_cache 等。sql

1、调整 max_connections,提升并发链接

参数 max_connections 控制容许链接到 MySQL 数据库的最大数量。若是状态变量 connection_errors_max_connections 不为零,而且一直增加,就说明不断有链接请求因数据库链接数已达到最大容许的值而失败,应考虑增大max_connections 的值。 数据库

MySQL 最大可支持的数据库链接取决于不少因素,包括给定操做系统平台线程库的质量、内存大小、每一个链接的符合以及指望的响应时间等。在 Linux 平台下,MySQL 支持 500~1000 个链接不是难事,若是内存足够,不考虑响应时间,甚至能达到上万个链接。而在 windows 平台下,受其所用线程库的影响,最大链接数有如下限制: segmentfault

(open tables * 2 + open connections) < 2048 windows

每一个session 操做 MySQL 数据库表都须要占用文件描述符,数据库链接自己也要占用文件描述符,所以,在增大 max_connections 时,也要注意评估 open-files-limit (文件描述符)的设置是否够用。缓存

2、调整 back_log

back_log 参数控制 MySQL 监听 tcp 端口时设置的积压请求栈大小,5.6.6版本之前的默认值是 50,5.6.6 版本之后的默认值是 50 + (max_connections/5),但最大不能超过 900。 服务器

若是须要数据库在较短期内处理大量链接请求,能够考虑适当增大 back_log 的值。session

3、调整 table_open_cache

每个 sql 执行线程至少都要打开一个表缓存,参数 table_open_cache 控制全部 sql 执行线程可打开表缓存的数量。这个参数的值应根据最大链接数 max_connections 以及每一个链接执行关联查询中所涉及表的最大个数(用 N 表示)来设定: 多线程

max_connection * N 并发

在未执行 flush tables 命令的状况下,若是 MySQL 状态值 opened_tables 的值较大,就说明 table_open_cache 设置的过小,应适当增大。增大 table_open_cache 的值,会增长 MySQL 对文件描述符的使用量,所以,也要注意评估 open-files-limit 的设置是或否够用。tcp

4、调整 thread_cache_size

为加快链接数据库的速度,MySQL 会缓存必定数量的客户服务线程以备重用,经过参数 thread_cache_size 可控制 MySQL 缓存客户端线程的数量。
能够经过计算线程 cache 的失效率 threads_created / connections 来衡量 thread_cahce_size 的设置是否合适,该值越接近 1,说明线程 cache 命中率越低,应考虑适当增长 thread_cahce_size 的值。

5、innodb_lock_wait_timeout 的设置

参数 innodb_lock_wait_timeout 能够控制 innodb 事务等待行锁的时间,默认值是 50ms,能够根据须要动态设置。对于须要快速反馈的交互式应用,能够将行锁等待超时时间调大,以免发生大的回滚操做。

相关文章
相关标签/搜索