MySQL系列(3)--用户连接

MySQL启动后,加载了配置文件,并设置了系统的全局变量参数,同时初始化了网络,后续的步骤就等待用户的接入,实现的函数为:handle_connection_methonds

函数的功能主要是等待一个用户的连接请求,并给他分配一个工作线程
函数处理连接分为管道命令,套接字,共享内存的方式。套接字是最常见的使用方法。针对套接字连接步骤如下:
1、使用poll或者select的方式监听客户端连接请求
2、有新的连接请求进来,会取出其中对应的sock,等待进一步网路交互
3、使用accept函数,成功后有新的套接字出来,说明握手成功,连接建立成功。新的套接字与这个连接对应,新的套接字名称为new_sock;
4、为新建连接创建线程对象thd,关于这个连接的信息,都用这个对象来保存并处理。
5、新建一个vio,主要用来处理网络数据传输,这个对象一直陪伴着这个线程thd,new_sock是为这个连接产生的新套接字,vio也是建立在这个套接字基础上
6、为当前的连接初始化网络数据传输相关的参数,并取得连接文件句柄
7、真正创建连接 create_new_thread(thd)

创建新的线程步骤如下:

1、判断当前连接数是否超过了系统配置的最大连接数,超过就断开
2、连接数没超过最大值,就会将连接加入到队列中创建连接,方法为thread_scheduler.add_connection(thd)

创建连接的步骤为:

1、查看线程缓存,有空闲的直接调用,缓存中没有,则新建
2、新建的方式为,将当前的thd保存到threads列表中,这个列表可以通过show processlist查看到
3、创建一个新的线程,这个线程handle_one_connection与这个连接唯一对应

在MySQL中,用户连接退出后,服务端并没有关闭线程,而是缓存起来,如果以后有新的连接请求,系统会将已经缓存的连接直接给这个客户使用,一定程度提高了性能。没有空余的线程就会新建。handle_one_connection的建立步骤如下:

1、初始化预处理
2、载入一些Session级变量
3、进行连接身份认证,初始化准备执行语句--线程一直等待新的用户连接进行身份认证
4、处理命令--循环处理客户端的数据,读取的内容存储在packet中,有新的数据就来就读取并处理。

每一个会话对应一个线程,线程资源是有限的,因此,需要限制最大连接数来防止会话太多导致数据库性能下降

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值