why

在5.6以前,mysql会对每个连接创建一个线程,请求结束后销毁线程。在高并发的情况下,为了避免频繁创建和释放连接,可以通过thread-cache将线程缓存起来,请求来了先尝试从cache中获取,重复利用线程资源。

show global status like 'thread%'

show variables like 'thread_cache_size';

问题

在低并发的情况下,thread_cache可以成为一个有效的优化机制,但在并发突然增加时,会产生非常严重的问题。比如thead_cache_size是512,突然来了3000个连接怎么办?

mysql在5.6之前,会硬着头皮创建3000个线程!如果是一台一般配置的机器,比如32核、128G这种看起来还不错的配置,会因为线程上下文切换,导致整个实例无法及时响应问题,即使按主键查询,也可能超过1s,因此dba可能建议你:控制连接数在300左右。

通过客户端使用连接池技术,是可以控制总的连接个数,超过连接池最大值,客户端直接拒绝响应。但随着机器的扩大,在微服务还未完全的系统中,多个应用连一个库并非不可能,再诸如一个mysql实例多库的情况,更上雪上加霜。

通过在5.5版本上的遭遇,在3.5k的connections和threads情况下,mysql所在机器的cpu、memory不是性能陡然下降的原因,此时cpu有可能利用率很低,因为时间都花在了切换线程上下文上了,操作系统的资源也包括线程资源。

当然可以设置 max_connections,在连接过多时,拒绝信的连接请求

解决

一个线程可以处理多个连接

连接被thread group管理起来,group的数量和cpu核心数相当,每个group最少有一个连接,达到最大程度利用cpu的效果,按连接的性质进行重要性排序和queued

适用场景

Threads_running变量持续较高,如innodb引擎中,总是超过40

如果你在使用innodb_thread_concurrency来限制同时执行语句的数量,他们解决了相同的问题

主要是短查询时

较多的事务导致的资源竞争,导致获取锁的时间消耗变大,thread pool将减少这样的竞争

经验值

thread_pool_size :线程组数量,默认16,建议16-36,最好是24-36,值的范围1-64,否则报错(线程组数量与cpu相当,每个线程组中有WorkerThread,ListenThread)

thread_pool_stall_limit:将一个sql打标成stall的时间的阈值,意思为这个sql占用了较长的时间,该让个其它人了,较低的值允许线程更快的启动起来;避免死锁。较高的值适合于长时间运行的语句,避免当前语句执行时有太多其他语句执行

每一个group有多个worker线程,一个worker线程可以处理多个连接的sql,可以按优先级进行队列排序,比如默认的按事务排序

show global variables like ‘%thread_handling%‘;

mysql 线程池 优点_Mysql 线程池 ===相关推荐

  1. mysql复合索引优点_mysql 联合索引有什么好处? 联合索引的意义

    mysql 里创建'联合索引'的意义 问题? 因为什么需求,要创建'联合索引'?最实际好处在于什么?如果是为了更快查询到数据,有单列索引不是Ok?为什么有'联合索引'的存在? 简单的说有两个主要原因: ...

  2. java线程池newfi_Java进阶——线程与多线程

    线程和多线程 概念 程序 程序是一段静态代码. 进程 进程是程序的一次动态执行过程(从代码加载.执行.执行完毕的完整过程).进程是资源分配的最小单位. 线程 线程是CPU调度的最小执行单位.程序执行过 ...

  3. mysql 线程池大小设置_MySQL线程池参数解析

    线程池是数据库系统非常重要功能,然而MySQL社区版并不包含线程池功能,不过好在MySQL的Percona发行版本提供了这个功能,除此之外,MySQL的企业版也提供线程池,从性价比上说,Percona ...

  4. mysql服务器多线程模型_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码 - 陈彦斌 - 博客园...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

  5. 易语言mysql线程池数量_线程池最佳线程数量到底要如何配置?

    前言 对应从事后端开发的同学来说,线程是必须要使用了,因为使用它可以提升系统的性能.但是,创建线程和销毁线程都是比较耗时的操作,频繁的创建和销毁线程会浪费很多CPU的资源.此外,如果每个任务都创建一个 ...

  6. 第三十一章 线程------GIL、线/近程池、异/同步、异步回调

    一.什么是GIL 官方解释:'''In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple ...

  7. Java基础加强重温_08:线程不安全、线程同步、线程状态、线程状态切换、线程池(Executors类、newFixedThreadPool)、死锁、Lambda表达式、Stream

    摘要 Java基础加强重温_08: 线程安全(线程安全概念.线程不安全案例). 线程同步(同步代码块.同步方法.Lock锁,锁对象). 线程状态(new新建.Runnable可运行.Blocked锁阻 ...

  8. 池技术:连接池,线程池,内存池,进程池等汇总分析

    引言 在软件开发中,经常会遇到需要频繁创建和销毁某些资源的情况.这些资源可能是内存.线程.数据库连接等.频繁地创建和销毁资源可能导致性能下降和资源浪费.为了解决这些问题,软件开发者设计了一种称为&qu ...

  9. mysql的worker 线程_MySQL线程

    当MySQL服务器本身遇到性能问题的时候,一般可以通过slow log来找到耗时比较多的SQL语句,并且进一步通过explain来优化和改进SQL执行速度.这种方法有这几方面的限制:首先,并不是所有的 ...

最新文章

  1. webpack源码阅读——npm脚本运行webpack与命令行输入webpack的区别
  2. 为什么我的resharper控件安装之后没有显示
  3. 如何在SAP Spartacus的scss里引入全局变量
  4. Java弱引用(WeakReference)的理解与使用
  5. jdk1.6集成activemq的2种方式
  6. et200sp模块接线手册_西门子PN/PN耦合器学习应用系列(1)-外观及接线
  7. Python网络编程——socket套接字实现UDP/TCP信息传输
  8. mac下hive-1.2.2-src版本的编译
  9. 那些年我们跳过的 IE坑
  10. firebase_crashlytics缺失dSYM unity ios
  11. 小程序如何跳转至同服务器app,小程序新功能,app可以直接跳转小程序
  12. pbootcms模板,pbootcms模板程序,pboot响应式模板
  13. Fiddler自动回复器伪造回复
  14. java pfx 证书_java 证书 .cer 和 .pfx
  15. 一对一直播源码开发,一对一视频直播解决方案新思路
  16. php 统计 字数,PHP 仿 Word 统计文章字数
  17. Unity + Kinect基本上所有的手势二次封装(一)
  18. Jetbrains IDEA 打不开的解决方法(多次重装IDEA,突然打不开)
  19. 《Google软件测试之道》 google软件测试工具介绍
  20. 运营分析:用七种维度来分析广告投放效果

热门文章

  1. Excel功能强大到可批量下载网页的PNG格式图片
  2. Android手机屏幕投影到大屏幕的工具
  3. Ignored attempt to cancel a touchmove event with cancelable=false问题
  4. 【LittleVGL】仪表guage函数 lv_gauge_set_scale
  5. 嵌入式软件笔试(转载)
  6. data后缀文件解码_data类型的Url格式
  7. 最火的android开源项目(二)
  8. BIMserver入门安装部署 - 环境搭建、数据导入及预览
  9. 蓝桥杯-迷宫(17年)-python
  10. asp.net快递单打印的实现