转自:http://blog.csdn.net/wyzxg/article/details/8258033

mysql 线程处理流程图:

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)

Threads_cached:已经被线程缓存池缓存的线程个数
Threads_created:已经创建的线程个数,通过这个变化的趋势,可以判断thread_cache_size参数值

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

mysql thread pool的更多相关文章

  1. MySQL thread pool【转】

    本文来自:http://blog.chinaunix.net/uid-26896862-id-3993773.html 刚刚经历了淘宝的双11,真实感受到了紧张的氛围.尽管DB淡定的度过,但是历程中的 ...

  2. MySQL Thread Pool: Problem Definition

    A new thread pool plugin is now a part of the MySQL Enterprise Edition.In this blog we will cover th ...

  3. MySQL学习分享--Thread pool实现

    基于<MySQL学习分享--Thread pool>对Thread pool架构设计的详细了解,本文主要对Thread pool的实现进行分析,并根据Mariadb和Percona提供的开 ...

  4. MySQL线程池(THREAD POOL)的原理

    MySQL常用(目前线上使用)的线程调度方式是one-thread-per-connection(每连接一个线程),server为每一个连接创建一个线程来服务,连接断开后,这个线程进入thread_c ...

  5. 【MySQL】mysql buffer pool结构分析

    转自:http://blog.csdn.net/wyzxg/article/details/7700394 MySQL官网配置说明地址:http://dev.mysql.com/doc/refman/ ...

  6. MySQL--线程池(Thread Pool)

    ================================================================= 线程池技术 在MySQL社区版中,MySQL使用one-thread ...

  7. Thread pool引起的程序连接数据库响应慢

    数据库版本:percona-mysql 5.6.16 ​在很长一段时间,都会出现程序连接数据库,出现响应慢的情况,正常在几到几十毫秒之间,但是偶尔会出现上百毫秒的情况: 开始由于开发重新设置并调整过程 ...

  8. mysql5.6 thread pool

    从percona 的压测来看,确实很牛笔啊.提升很大. http://www.mysqlperformanceblog.com/2014/01/29/percona-server-thread-poo ...

  9. Reporting Service 告警"w WARN: Thread pool pressure. Using current thread for a work item"

    如果Reporting Service偶尔出现不可访问或访问出错情况,这种情况一般没有做监控的话,很难捕捉到.出现这种问题,最好检查Reporting Service的日志文件. 今天早上就遇到这样一 ...

随机推荐

  1. 关于导入zepto出错的问题

    一.前言 webpack在配置多页面开发的时候 ,发现用 import 导入 Zepto 时,会报 Uncaught TypeError: Cannot read property 'createEl ...

  2. JS实现简单斗地主效果

    let play = document.querySelectorAll(".play"); let dizhupai = document.getElementById(&quo ...

  3. Linux系统常见的压缩与打包命令

    常见的压缩文件扩展名 1.*.Z          compress程序压缩的文件 2.*.gz         gzip程序压缩的文件 3..bz2        bzip2程序压缩的文件 4..t ...

  4. centos查看自启动服务

    1,查看自启动服务? 2,查看某服务的开机启动状态? 3,启动(关闭,重启,查看)某个服务? 4,设置开机启动或者关闭某个服务? 1,查看自启动服务? systemctl list-unit-file ...

  5. 区间求小于等于k的数字个数 hdu4177

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目意思给出一个序列,叫我们求一个区间里面小于等于k的数字个数. 这里面我用分块和主席树两种方法 ...

  6. html转化为图片下载

    业务需求:按照客户要求把排课表转化为图片下载到本地.一个月到排课有很多.所以图片会很大 <!DOCTYPE html> <html lang="en"> & ...

  7. innodb 体系结构(后台进程)

    一.后台进程(innodb 1.0.x以前的) 1.master thread master thread具有最高的线程优先级别,其内部由多个循环(loop)组成:主循环(loop).后台循环(bac ...

  8. command not found解决方案

    如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found.那么 首先就要考虑root 的$PATH里是否已经包含了这些环境变量 ...

  9. route的简单使用

    route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If] add : 添加一条路由规则del : 删除一条路由规则-net ...

  10. Win10系统下安装Gradle-3.5

    1. 下载 从官网https://gradle.org/releases/上下载3.5版本 2.解压 解压到D盘,路径是:D:\gradle-3.5 3.配置系统环境变量 首先依赖JAVA_HOME这 ...