mysql thread入门分析
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入门分析相关推荐
- MySql的入门到入坟
系列文章目录 本章讲述Mysql的入门和使用. 文章目录 系列文章目录 前言 一.数据库设计分析 1. 软件开发周期 2. 设计数据库的步骤 3. 绘制E-R图 4. 数据库设计范式 二.MySql的 ...
- mysql一个死锁分析
版本5.6,隔离级别为rc 表结构: CREATE TABLE `uk_test` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `a` int(11) NOT ...
- bean加载context idea_02-基于IDEA创建SpringBoot项目并进行入门分析
SpringBoot 项目创建 创建Module 基于IDEA创建项目Module,模块名为04-springboot-start,组id和包名为com.cy,如图所示: 填写module信息,如图所 ...
- MySQL锁阻塞分析
日常维护中,经常会碰到线程被阻塞,导致数据库响应非常慢,下面就看看如何获取是哪个线程导致了阻塞的. blog地址:http://blog.csdn.net/hw_libo/article/detail ...
- MySQL索引优化分析
转载来源:https://www.cnblogs.com/itdragon/p/8146439.html MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学 ...
- (何凳成博客)MySQL 加锁处理分析——学习笔记
1. 准备测试数据 use test; CREATE TABLE t1(id int,name varchar(20)); alter table t1 add primary key(id); in ...
- MySQL使用profile分析语句性能消耗
MySQL使用profile分析语句性能消耗 MySQL可以使用profile分析SQL语句的性能消耗情况.例如,查询到SQL会执行多少时间,并看出CPU.内存使用量,执行过程中系统锁及表锁的花费时间 ...
- mysql死锁异常分析及解决
前言 其实在这次之前也发生过死锁异常,但当时并没当回事,也没分析数据,简单的认为是偶发现象,并且是修改同一用户产生,于是就在最初添加了select for update,直到这两天发生了好几笔,分析数 ...
- 转 MySQL源码分析
看到一个不错的介绍,原址如下: http://software.intel.com/zh-cn/blogs/2010/08/20/mysql0/ MySQL源码分析(0):编译安装及调试 作者: Yu ...
最新文章
- java script 月日年转年月日_js的如何进行日期格式转换成年月日
- Webservice开发之xsd中开发登录请求的响应接口
- SQLServer2008 视图创建实例
- POJ - 2002 Squares 数正方形【二分】【哈希表】
- linux网口驱动实现(待续)
- 02 List、Tuple、Dict、Set
- ocx控件 postmessage消息会消失_实战经验:如何检测CMFCTabCtrl控件标签页切换事件...
- MySQL中order by中关于NULL值的排序问题
- android 耗电量分析,使用能耗性能剖析器检查耗电量
- About 产量数据选取问题
- 阿里云mysql导出表,mysql导出数据库表数据
- 网上商城-java基础练习项目-仿照雷蛇商城
- 穷举php,[讨论]穷举攻击
- Microsemi Libero系列教程(一)——Libero开发环境介绍、下载、安装与注册
- XXXXXXX\android-sdk\\tools\zipalign.exe”无效
- Ilog cplex, java 表示分段线性函数 piecewise function
- linux安装chrome浏览器并初步使用
- 多张JPG图片怎么转成一个PDF
- UILocalizedIndexedCollation
- 天刀服务器维护时间,《天涯明月刀》2021年3月10日服务器例行维护公告 服务器例行维护怎么样...
热门文章
- IOS 浏览器端overflow:scroll overflow:auto元素无法滑动bug解决方法整理
- mysql Access denied for user root@localhost错误处理备忘
- dotnet core入门
- beta阶段第二次scrum meeting
- ASP.NET MVC动态加载数据
- 【Linux】工作管理
- 0119——UITextField
- [导入]LAMP架构下安装Drupal
- element ui登录界面_Vue和Element-UI做一个简单的登录页面
- django mysql内存泄漏_Django的:使内存的关系,而不保存到数据库