如何调整MySQL并发相关的参数

如何调整MySQL并发相关的参数

在 MySQL 中,控制并发连接和线程的主参数包括max_connections、back_log、thread_cache_size 以及 table_open_cache等

调整 max_connections,提高并发连接

参数 max_connections控制允许连接到 MySQL数据库的最大数量,默认值是151。如果状态变量 connection_errors_max_connections 不为零,并且一直在增长,就说明不断有连接请求数据库,连接数已达到最大允许的值而失败,应考虑增大 max_connections 的值。

MySOL 最大可支持的数据库连接取决于很多因素,包括给定操作系统平台线程库的质量、内存大小、每个连接的负荷以及期望的响应时间等。在Linux 平台下,MySQL 支持 500~1000个连接不是难事,如果内存足够、不考虑响应时间,甚至能达到上万个连接。而在 Window平台下,受其所用线程库的影响,最大连接数有以下限制:

(open tables x 2 + open connections) < 2048

每一个session操作MySQL 数据库表都需要占用文件描述符,数据库连接本身也要占用文件描述符,因此,在增大 max_connections 时,也要注意评估 open-files-limit 的设置是否够用。

调整back_log

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

如果需要数据库在较短时间内处理大量连接请求,可以考虑适当增大 back_log 的值。

调整table_open_cache

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

max_connections x N

在未执行 flush tables 命令的情况下 ,如果 MySQL 状态变量 opened_tables 的值较大,就明table_open_cache设置得太小,应适当增大。增大 table_open_cache 的值,会增加 MySQL文件描述符的使用量,因此,也要注意评估 open-files-limit 的设置是否够用。

调整 thread_cache_size

为加快连接数据库的速度,MySQL 会缓存一定数量的客户服务线程以备重用,通过参数thread_cache_size 可控制 MySQL 缓存客户服务线程的数最。

可以通过计算线程 cache的失效率 threads_created/connections 来衡量 thread_cache_size 的没置是否合适。该值越接近 1,说明线程 cache 命中率越低,应考当增加 thread_cache_size 的值。

innodb_lock_wait_timeout 的设置

参数 innodb_lock _wait timeout 可以控制InnoDB 事务等待行锁的时间,默认值是 50ms,可以根据需要动态设置。对于需要快速反馈的交互式OLTP应用,可以将行锁等待超时时间调小,以避免事务长时间挂起;对于后台运行的批处理操作,可以将行锁等待超时时间调大,以器免发生大的回滚操作。

发布于 2023-05-26 23:09・IP 属地广东