小林coding网站---mysql基础-server层-mysql连接器
整理小林coding网站关于mysql的信息笔记
基础篇
以mysql执行一条select语句,
select * from product_tb where id ='1'
mysql在中间发生了什么,这就需要了解mysql的内部的结构,其各个的主要组成部分有两层,Server层和存储引擎层
server层包括了
解析器,查询缓存,预处理器,优化器,执行计划,执行器
存储引擎包括了以不同形式存储的数据,对应的不同的存储引擎
innodb(从5.5之后成为默认的存储引擎)
myisam
memory
csv
...
图片来源为小林网站(https://xiaolincoding.com/mysql)
连接器
-
连接都是TCP三次握手,mysql基于TCP协议传输
-
查看mysql服务被多少客户端连接了
-
默认的最长的空闲时长,由wait_timeout参数控制,默认是8个小时,也就是28880秒,如果超过这个时间,空闲的连接会总动断开
-
可以使用kill connection 加上对应的id,就可以关闭对应的连接
-
mysql连接数的最大限制是多少
MySQL 服务支持的最大连接数由 max_connections 参数控制,超过200个连接,系统就会拒绝接下来的连接请求,并报错提示“Too many connections”。 -
msyql的连接跟HTTP一样,也有短连接与长连接的分别
连接 mysql 服务(TCP 三次握手) 执行sql,执行少量的占时间短的sql 断开 mysql 服务(TCP 四次挥手) // 长连接 连接 mysql 服务(TCP 三次握手) 执行sql 多个sql,时间长 执行sql 执行sql .... 断开 mysql 服务(TCP 四次挥手)
长连接的好处就是可以减少建立连接和断开连接的过程时间,但是长连接可能会占用内存增多,有可能被系杀掉进程,会发生mysql服务异常重启的现象。
-
如何解决长连接占用内存的问题
- 第一种,定期断开长连接,然后会释放占用的内存资源
- 第二种,客户端主动重置连接,mysql5.7版本之后实现了mysql_reset_connection()函数的接口,当客户端执行了一个很大的操作之后,代码里调用mysql_reset_connection 函数来完成重置连接,打到释放内存的效果,而且这个过程不需要重新连接和重新权限校验,恢复到刚刚创建连接的状态。