程序连接数据库响应慢!是Thread pool参数捣的鬼吗?

 

数据库版本:percona-mysql 5.6.16

在很长一段时间,都会出现程序连接数据库,出现响应慢的情况,正常在几到几十毫秒之间,但是偶尔会出现上百毫秒的情况;

开始由于开发重新设置并调整过程序连接池,一直怀疑是连接池的问题,但是问题依旧;

[[214120]]

因为使用的版本是 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 参数调大,但是问题依旧;

[[214121]]

检查 thread_cache_size,服务器内存大小为 64G,thread_cache_size=128;

每建立一个连接,都需要一个线程来与之匹配,此参数用来缓存空闲的线程,以至不被销毁,如果线程缓存中有空闲线程,这时候如果建立新连接,MYSQL 就会很快的响应连接请求;

  1. show status like '%thread%'
  2.  
  3. Variable_name Value 
  4.  
  5. Threads_cached     0 
  6.  
  7. Threads_connected   219 
  8.  
  9. Threads_created     655068 
  10.  
  11. Threads_running     48 

使用 show status 查看当前 mysql 连接情况:

  1. SHOW STATUS WHERE Variable_name LIKE '%Thread%'

Threads_cached : 代表当前此时此刻线程缓存中有多少空闲线程。

Threads_connected : 代表当前已建立连接的数量,因为一个连接就需要一个线程,所以也可以看成当前被使用的线程数。

Threads_created : 代表从最近一次服务启动,已创建线程的数量。

Threads_running : 代表当前激活的(非睡眠状态)线程数。并不是代表正在使用的线程数,有时候连接已建立,但是连接处于 sleep 状态,这里相对应的线程也是 sleep 状态。

***将 thread_cache_size 设置成与 threads_connected 一样。

  1. show variables like '%thread%'
  2.  
  3. +-----------------------------------------+-----------------+ 
  4.  
  5. | Variable_name                           | Value           | 
  6.  
  7. +-----------------------------------------+-----------------+ 
  8.  
  9. | innodb_purge_threads                    | 1               | 
  10.  
  11. | innodb_read_io_threads                  | 4               | 
  12.  
  13. | innodb_thread_concurrency               | 0               | 
  14.  
  15. | innodb_thread_sleep_delay               | 10000           | 
  16.  
  17. | innodb_write_io_threads                 | 4               | 
  18.  
  19. | max_delayed_threads                     | 20              | 
  20.  
  21. | max_insert_delayed_threads              | 20              | 
  22.  
  23. | myisam_repair_threads                   | 1               | 
  24.  
  25. | performance_schema_max_thread_classes   | 50              | 
  26.  
  27. | performance_schema_max_thread_instances | -1              | 
  28.  
  29. | pseudo_thread_id                        | 8735851         | 
  30.  
  31. | thread_cache_size                       | 128             | 
  32.  
  33. | thread_concurrency                      | 24              | 
  34.  
  35. | thread_handling                         | pool-of-threads | 
  36.  
  37. | thread_pool_high_prio_mode              | transactions    | 
  38.  
  39. | thread_pool_high_prio_tickets           | 4294967295      | 
  40.  
  41. | thread_pool_idle_timeout                | 60              | 
  42.  
  43. | thread_pool_max_threads                 | 100000          | 
  44.  
  45. | thread_pool_oversubscribe               | 40              | 
  46.  
  47. | thread_pool_size                        | 12              | 
  48.  
  49. | thread_pool_stall_limit                 | 500             | 
  50.  
  51. | thread_stack                            | 262144          | 
  52.  
  53. | thread_statistics                       | OFF             | 
  54.  
  55. +-----------------------------------------+-----------------+ 

可以不断刷新,如果 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 后,重新测试程序连接数据库响应时间,速度极快,不再出现程序连接数据库响应慢的情况! 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/267467.html<

(0)
管理的头像管理
上一篇2025-05-06 10:40
下一篇 2025-05-06 10:42

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注