MySQL用户现成的建立与用户线程的状态源码解析
2017-01-11 17:40
369 查看
本文转载自公众号数据库随笔,作者happypig
微信看起来麻烦
pig已经好长一段时间没有分享文章了,有点对不起订阅的朋友。最近在做比较复杂跟困难的事情,也并不一定最终会有成果,因此必须对此沉默。 停了一段时间,现在定个小目标----2个星期至少写一篇小文章,简单讲清楚一个小细节。希望自己最后坚持下来。
回题,mysql是多线程的数据库,每个应用会话连接到数据库时,会使用或者创建一个用户线程, 至于是使用尚未使用的用户线程还是新创建一个用户线程,取决于是否还有没有分配给用户会话的用户线程。 这样说,可能还太好理解,下面再继续描述跟补充:
mysql数据库(这里指的是mysql5.7,其他版本是否有这功能未查)为了使用户会话连接可以快速建立,将一些将用于用户会话的线程提前建立起来,这些线程是一个普通的用户线程,一直处于等待被某个用户连接会话使用的状态。下面是这类线程的栈,该线程在调用Per_thread_connection_handler::
block_until_new_connection 函数, 等待被新的会话连接使用。
另外一类用户线程,就是被已经某个用户连接(会话)占用着,该用户线程可能正在执行数据库的命令或者等待用户发送命令,下面是等待用户会话发送命令时的用户线程的栈。该用户线程在等待一个网络事件的发生。
到此,应该大家清楚这两种类型的用户线程,我们再来看一下用户线程是如何被创建的--用户线程是被主线程在需要的时候创建的。所谓需要的时候, 就是用户会话跟数据库服务器建立连接时,而数据库服务器没有可以利用的用户线程时(也就是不存在上面所说的第一类用户线程),则直接创建一个新的用户线程。下面是创建用户线程的函数,在该函数体内调用了mysql_thread_create, 创建入口函数为handle_connection的线程。因此handle_connection也就是用户线程的顶层函数。
下面我们来看一下该函数的栈。
上面提到,在新的用户会话连接进来的时候,会视情况来决定是否需要创建新的用户线程,判断函数如下: .
当blocked_pthread_count> wake_pthread的时候,是不需要创建新的线程的,直接wake up一个idle的用户线程。反之,则需要创建线程。
微信看起来麻烦
pig已经好长一段时间没有分享文章了,有点对不起订阅的朋友。最近在做比较复杂跟困难的事情,也并不一定最终会有成果,因此必须对此沉默。 停了一段时间,现在定个小目标----2个星期至少写一篇小文章,简单讲清楚一个小细节。希望自己最后坚持下来。
回题,mysql是多线程的数据库,每个应用会话连接到数据库时,会使用或者创建一个用户线程, 至于是使用尚未使用的用户线程还是新创建一个用户线程,取决于是否还有没有分配给用户会话的用户线程。 这样说,可能还太好理解,下面再继续描述跟补充:
mysql数据库(这里指的是mysql5.7,其他版本是否有这功能未查)为了使用户会话连接可以快速建立,将一些将用于用户会话的线程提前建立起来,这些线程是一个普通的用户线程,一直处于等待被某个用户连接会话使用的状态。下面是这类线程的栈,该线程在调用Per_thread_connection_handler::
block_until_new_connection 函数, 等待被新的会话连接使用。
另外一类用户线程,就是被已经某个用户连接(会话)占用着,该用户线程可能正在执行数据库的命令或者等待用户发送命令,下面是等待用户会话发送命令时的用户线程的栈。该用户线程在等待一个网络事件的发生。
到此,应该大家清楚这两种类型的用户线程,我们再来看一下用户线程是如何被创建的--用户线程是被主线程在需要的时候创建的。所谓需要的时候, 就是用户会话跟数据库服务器建立连接时,而数据库服务器没有可以利用的用户线程时(也就是不存在上面所说的第一类用户线程),则直接创建一个新的用户线程。下面是创建用户线程的函数,在该函数体内调用了mysql_thread_create, 创建入口函数为handle_connection的线程。因此handle_connection也就是用户线程的顶层函数。
下面我们来看一下该函数的栈。
上面提到,在新的用户会话连接进来的时候,会视情况来决定是否需要创建新的用户线程,判断函数如下: .
当blocked_pthread_count> wake_pthread的时候,是不需要创建新的线程的,直接wake up一个idle的用户线程。反之,则需要创建线程。
相关文章推荐
- mysql获取所有分类的前n条记录的两种方法浅析
- mysql 定时任务
- mysql用cmd登录、查所有的库、查所有的表、查表下的所有字段等简单的cmd命令
- 《MySQL必知必会》学习笔记
- mysql插入字符串带单引号+双引号
- mysql 密码过期
- mysql操作命令梳理(5)-执行sql语句查询即mysql状态说明
- mysql 导出导入数据 -csv
- Mysql数据库定义语言DDL(DataDefinition Language)
- MySQL各版本解释和下载
- Mysql 手册
- 如何在Windows下创建两个mysql服务,并做主从数据库
- mysql备份的三种方式详解
- mysql数据类型
- win10 下 pyton 安装 MySQLdb 中遇到的一些问题
- 字段类型(数据类型)
- mysql主从同步(5)-同步延迟状态考量(seconds_behind_master和pt-heartbea)
- mysql修改AUTO_INCREMENT的值
- ubuntu16.xxx安装mysql5.0项目迁移环境搭建
- 【MySQL】解决JDBC无法成功连接MySQL5.7的问题