本文转载自公众号数据库随笔,作者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的用户线程。反之,则需要创建线程。

MySQL 用户连接与用户线程的更多相关文章

  1. MySQL远程连接、用户授权

    目录 MySQL远程连接 创建用户.授权 MySQL添加用户.删除用户.授权及撤销权限 MySQL可授予用户的执行权限 MySQL远程连接 远程连接 授权 常见权限表 相关库:mysql 相关表:us ...

  2. 错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是无法给远程连接的用户权限问题

    错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是无法给远程连接的用 ...

  3. 允许mysql远程用户连接。

    默认mysql是禁止远程用户连接的.连接提示: 1045,“Access denied for user 'root'@'192.168.100.1' (using password:YES)&quo ...

  4. mysql 8创建远程访问用户以及连接mysql速度慢的解决方法

      mysql 8创建远程访问用户 [root@demo /]# mysql -u root -p  #登录服务器数据库 Enter password:123xxx >user mysql; & ...

  5. mysql基础之mariadb的安装,连接,用户,密码,权限设置语句详解

    一.mariadb安装 1.配置mariadb源: [root@ren7 ~]# vim /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB ...

  6. MySQL下查看用户和建立用户

    启动数据库: [root@server ~]# mysqld_safe & [1] 3289 [root@server ~]# 130913 08:19:58 mysqld_safe Logg ...

  7. wifidog源码分析 - 用户连接过程

    引言 之前的文章已经描述wifidog大概的一个工作流程,这里我们具体说说wifidog是怎么把一个新用户重定向到认证服务器中的,它又是怎么对一个已认证的用户实行放行操作的.我们已经知道wifidog ...

  8. Mysql创建和删除用户

    问题描述:        Mysql中创建用户和删除用户 问题解决:     (1)查询Mysql当前登录账户     (2)创建用户     方法一: 创建用户赋予用户所有权限: 新创建的用户可以在 ...

  9. Mysql创建、删除用户

    1.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户mysql> insert into mysql.user(Host,User,Passwor ...

随机推荐

  1. windows下cmd无法使用telnet命令解决方法 (原)

    telnet不是内部或者外部命令,也不是可运行程序-----解决办法: (win7为例) 控制面板 --- > 程序(小图标下直接到[程序和功能]) --- >程序和功能 --- > ...

  2. C# Newtonsoft.Json JsonSerializerSettings 全局序列化设置

    Newtonsoft.Json.JsonSerializerSettings setting = new Newtonsoft.Json.JsonSerializerSettings(); JsonC ...

  3. Unity性能优化之特效合并

    特效合并,意思是说将粒子所用的零碎图片,以shader为单位合并成一张图集,好处就是可以降低draw call.试想,合并前每个粒子使用一个material,而每一个material就要占用一个dra ...

  4. vue安装,router-link的一些属性,用法,tag active-class,to,replace,exex等等

    第一步:$ npm install -g vue-cli 第二部:$ vue init webpack my-projectName 下面内容转载自:https://www.cnblogs.com/c ...

  5. Python之包管理

    1.setup.py from distutils.core import setup setup(name='Distutils', version='1.0', description='Pyth ...

  6. 每天一个Linux命令 10

    文件处理命令:ln命令名称:ln 命令英文原意:link语法: ln -s [原文件] [目标文件] -s 创建软连接功能描述:生成链接文件 #ln -s /etc/issue /tmp/issue. ...

  7. xshell的优化和连接

    远程连接linux ###远程连接工具---xshell/SecureCRT/Putty 商业版(收费) 家庭版(免费) 一.xshell进行优化 1.打开文件属性 2.设置终端类型问linux,输入 ...

  8. 加密方法与HTTPS 原理详解

    一:加密方法: 1,对称加密 AES,3DES,DES等,适合做大量数据或数据文件的加解密. 2,非对称加密 如RSA,Rabin.公钥加密,私钥解密.对大数据量进行加解密时性能较低. 二:https ...

  9. error: 'Can't connect to local MySQL server through socket '/data/3307/data/mysql.sock' (2)'

    centos7.5 重启mysql报错 问题: [root@db01-51 ~]# mysqladmin -uroot -p123 -S /data/3307/data/mysql.sock shut ...

  10. urllib3

    urllib3是一个功能强大.条理清晰.用于http客户端的python库,相对于urllib它所有的特点如下: 线程安全 连接池 客户端SSL/TLS验证 使用多部分编码上传文件 Helpers用于 ...