数据库版本:percona-mysql 5.6.16 在很长一段时间,程序参数都会出现程序连接数据库,连接出现响应慢的数据情况,正常在几到几十毫秒之间,库响但是应慢偶尔会出现上百毫秒的情况; 开始由于开发重新设置并调整过程序连接池,一直怀疑是程序参数连接池的问题,但是连接问题依旧; 因为使用的版本是 percona-mysql 5.6.16 并且使用了数据库连接池。 Thread Pool 根据参数 thread_pool_size 被分为若干个 group,数据 每个 group 维护 client 发起的 connections, 当 MySQL 建立 connection 时, MySQL 根据 connection 的 thread id 对 thread_pool_size 取模, 将 connection 发起的 sql 语句分配到对应的 group。每个 group 的库响*** worker 数量为 thread_pool_oversubscribe+1。若 worker 达到***数量后还是应慢不足以处理回话请求, 则连接在本 group 上等待, 导致 sql 语句的 rt 增大; 因此将 thread_pool_oversubscribe 参数调大,但是程序参数问题依旧; 检查 thread_cache_size,服务器内存大小为 64G,连接thread_cache_size=128; 每建立一个连接,数据都需要一个线程来与之匹配,源码库库响此参数用来缓存空闲的应慢线程,以至不被销毁,如果线程缓存中有空闲线程,这时候如果建立新连接,MYSQL 就会很快的响应连接请求; 使用 show status 查看当前 mysql 连接情况: Threads_cached : 代表当前此时此刻线程缓存中有多少空闲线程。 Threads_connected : 代表当前已建立连接的数量,因为一个连接就需要一个线程,所以也可以看成当前被使用的线程数。 Threads_created : 代表从最近一次服务启动,已创建线程的数量。 Threads_running : 代表当前激活的(非睡眠状态)线程数。并不是代表正在使用的线程数,有时候连接已建立,但是连接处于 sleep 状态,这里相对应的线程也是 sleep 状态。 ***将 thread_cache_size 设置成与 threads_connected 一样。 可以不断刷新,如果 Threads_cached = 0 且 Threads_created 不断增大,亿华云那么当前 thread_cache_size 的值设置要改大,改到 Threads_connected 值左右, 再结合物理内存 1G —> 8;2G —> 16; 3G —> 32; >3G —> 64 二个情况综合考虑一下值, 将 thread_cache_size 改为 512; 注译: Threads_cached : 代表当前此时此刻线程缓存中有多少空闲线程。 Threads_connected : 代表当前已建立连接的数量,因为一个连接就需要一个线程,所以也可以看成当前被使用的线程数。 Threads_created : 代表从最近一次服务启动,已创建线程的数量。 Threads_running : 代表当前激活的(非睡眠状态)线程数。并不是代表正在使用的线程数,有时候连接已建立,但是连接处于 sleep 状态,这里相对应的线程也是 sleep 状态。 修改 thread_cache_size 为 512 后,重新测试程序连接数据库响应时间,速度极快,不再出现程序连接数据库响应慢的情况!