MySQL thread入门分析

今天下午和群里的朋友讨论mysql的thread pool,讨论的非常热闹,收获不少,借此自己也总结下thread,以备忘。下面贴上lidan的图片:

Mysql支持单线程和多线程两种连接线程模式,如果单线程,则在同一时刻,只能有一个connection连接到Mysql,其他的连接会被挂起。如果是多线程,则同一时刻可以支持多个connection同时连接到服务器。mysql使用哪种线程模式通过下面变量控制。

mysql> show variables like '%thread_handling%';
+-----------------+---------------------------+
| Variable_name   | Value                     |
+-----------------+---------------------------+
| thread_handling | one-thread-per-connection |
+-----------------+---------------------------+
1 row in set (0.02 sec)

客户端发起连接到mysql server,mysql server监听进程,监听到新的请求,然后mysql为其分配一个新的 thread,去处理此请求。从建立连接之开始,CPU要给它划分一定的thread stack,然后进行用户身份认证,建立上下文信息,最后请求完成,关闭连接,同时释放资源,在高并发的情况下,将给系统带来巨大的压力,不能保证性能。所以,mysql通过线程缓存来是实现线程重用,减小这部分的消耗;一个connection断开,并不销毁承载其的线程,而是将此线程放入线程缓冲区,并处于挂起状态,当下一个新的Connection到来时,首先去线程缓冲区去查找是否有空闲的线程,如果有,则使用之,如果没有则新建线程。

mysql通过 thread_cache_size这参数来设置可以重用线程的个数,他的大小可以通过状态变量Threads_cached和Threads_created来设置

mysql> show status like 'thread%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 0     |
| Threads_connected | 2     |
| Threads_created   | 1065  |
| Threads_running   | 1     |
+-------------------+-------+
4 rows in set (0.13 sec)

thread_connected等于show processlist

thread_running代表真正在运行的(等于1一般就是这个show status命令本身)

thread_cached代表mysql管理的线程池中还有多少可以被复用的资源

thread_created代表新创建的thread

在5.5.16以前,线程处理的模式是,每个请求就对应一个线程的模式,这就意味着当有成千上万的请求时,对应的也就需要成千上万的线程来相应这些请求,那么此刻问题就很明显了,系统的资源是有限的,必须要保证thread_number*thread_stack不能超过可以使用的内存资源,还要考虑CPU的调度能力,I/O的处理能力,这是一种很粗放的资源使用方式,同时,这种不加控制的处理方式,也会带来资源使用的冲突,大量互斥锁的出现,性能的急剧下降。在5.5.16以后通过Thread Pool来控制确保不会超过服务器的最大负载能力,避免出现服务无响应,导致宕机的惨状。

thread pool是如何动态控制并发线程数量的?待续....

mysql thread入门分析相关推荐

  1. MySql的入门到入坟

    系列文章目录 本章讲述Mysql的入门和使用. 文章目录 系列文章目录 前言 一.数据库设计分析 1. 软件开发周期 2. 设计数据库的步骤 3. 绘制E-R图 4. 数据库设计范式 二.MySql的 ...

  2. mysql一个死锁分析

    版本5.6,隔离级别为rc 表结构: CREATE TABLE `uk_test` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `a` int(11) NOT ...

  3. bean加载context idea_02-基于IDEA创建SpringBoot项目并进行入门分析

    SpringBoot 项目创建 创建Module 基于IDEA创建项目Module,模块名为04-springboot-start,组id和包名为com.cy,如图所示: 填写module信息,如图所 ...

  4. MySQL锁阻塞分析

    日常维护中,经常会碰到线程被阻塞,导致数据库响应非常慢,下面就看看如何获取是哪个线程导致了阻塞的. blog地址:http://blog.csdn.net/hw_libo/article/detail ...

  5. MySQL索引优化分析

    转载来源:https://www.cnblogs.com/itdragon/p/8146439.html MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学 ...

  6. (何凳成博客)MySQL 加锁处理分析——学习笔记

    1. 准备测试数据 use test; CREATE TABLE t1(id int,name varchar(20)); alter table t1 add primary key(id); in ...

  7. MySQL使用profile分析语句性能消耗

    MySQL使用profile分析语句性能消耗 MySQL可以使用profile分析SQL语句的性能消耗情况.例如,查询到SQL会执行多少时间,并看出CPU.内存使用量,执行过程中系统锁及表锁的花费时间 ...

  8. mysql死锁异常分析及解决

    前言 其实在这次之前也发生过死锁异常,但当时并没当回事,也没分析数据,简单的认为是偶发现象,并且是修改同一用户产生,于是就在最初添加了select for update,直到这两天发生了好几笔,分析数 ...

  9. 转 MySQL源码分析

    看到一个不错的介绍,原址如下: http://software.intel.com/zh-cn/blogs/2010/08/20/mysql0/ MySQL源码分析(0):编译安装及调试 作者: Yu ...

最新文章

  1. java script 月日年转年月日_js的如何进行日期格式转换成年月日
  2. Webservice开发之xsd中开发登录请求的响应接口
  3. SQLServer2008 视图创建实例
  4. POJ - 2002 Squares 数正方形【二分】【哈希表】
  5. linux网口驱动实现(待续)
  6. 02 List、Tuple、Dict、Set
  7. ocx控件 postmessage消息会消失_实战经验:如何检测CMFCTabCtrl控件标签页切换事件...
  8. MySQL中order by中关于NULL值的排序问题
  9. android 耗电量分析,使用能耗性能剖析器检查耗电量
  10. About 产量数据选取问题
  11. 阿里云mysql导出表,mysql导出数据库表数据
  12. 网上商城-java基础练习项目-仿照雷蛇商城
  13. 穷举php,[讨论]穷举攻击
  14. Microsemi Libero系列教程(一)——Libero开发环境介绍、下载、安装与注册
  15. XXXXXXX\android-sdk\\tools\zipalign.exe”无效
  16. Ilog cplex, java 表示分段线性函数 piecewise function
  17. linux安装chrome浏览器并初步使用
  18. 多张JPG图片怎么转成一个PDF
  19. UILocalizedIndexedCollation
  20. 天刀服务器维护时间,《天涯明月刀》2021年3月10日服务器例行维护公告 服务器例行维护怎么样...

热门文章

  1. IOS 浏览器端overflow:scroll overflow:auto元素无法滑动bug解决方法整理
  2. mysql Access denied for user root@localhost错误处理备忘
  3. dotnet core入门
  4. beta阶段第二次scrum meeting
  5. ASP.NET MVC动态加载数据
  6. 【Linux】工作管理
  7. 0119——UITextField
  8. [导入]LAMP架构下安装Drupal
  9. element ui登录界面_Vue和Element-UI做一个简单的登录页面
  10. django mysql内存泄漏_Django的:使内存的关系,而不保存到数据库