mysql对于做程序的肯定很熟悉吧,本文主要记录一下mysql架构和一条sql执行的整个流程
1. 连接
- 长链接、短连接(用完就关闭)
- 协议 Tcp、unix socket(mysql 命令本地连接用)
2.数据库
在mysql中,存在两个非常相似的概念,即数据库和数据库实例。在mysql中的定义如下:
- 数据库:存储数据的集合
- 数据库实例:操作数据库的集合
一个数据库实例可以操作多个数据库,一对多的关系。
mysql是一个单进程多线程的服务,客户端每建立起一个连接,服务端都会用一个线程去处理这个连接。这中间都存在一一对应关系。
3.数据库变量查询
3.1 服务端维持了多少个连接
show global status like "%Thread%"
分析一下比较重要的几个:
Threads_connected:线程连接数
Threads_running:线程运行数
3.2 各种超时时间查询,单位秒
show global variables like '%timeout%'
分析一下比较重要的几个:
connect_timeout:连接超时时间
innodb_lock_wait_timeout:表锁超时时间
interactive_timeout:交互式工具超时时间
lock_wait_timeout:锁等待时间
wait_timeout:非交互式连接超时时间,如JDBC
3.3 连接数
show variables like '%connections%';
max_connections:最大连接数,默认151,。最大可设置10000
3.4 当前线程数
每个服务端的线程都是由id的,可以用下面这个命令查看详细线程
show processlist;
字段就不多解释了
3.5 服务出现超出最大连接数
如果线程服务出现超出最大连接数,可以用以下指令快速分析问题
show variables like '%connections%';
show variables like '%wait_timeout%';
show processlist;
show status;
3.6 查看本地相关信息
#查看目录 缓冲区 字符集
show variables like "%data%";
#查看版本相关
show variables like "%version%";
4.mysql架构图
由图可以看出mysql最上层是连接组件,下面是由管理服务和工具、连接池、解析器、优化器、缓存、存储引擎、文件系统组成。
简单介绍一下存储引擎:
InnoDB:默认存储引擎,事务安全特性、奔溃恢复能力、行级别锁、一致性非锁定性读
MyISAM:表锁的,适合读
Memory:内存存储,读取非常快,适合临时数据
5.一条sql执行的流程图
6.第二次查询会不会加快
答案:不会
因为,每次执行都需要走一遍上述的操作,其次缓存模块其实一直很垃圾,在8版本已经弃用
在sql执行过程中,如果想查看sql执行明细,可以在information_schema.OPTIMIZER_TRACE
表中查看
以上就是本章的全部内容了。
上一篇:mysql第一话 - mysql基于docker的安装及使用
下一篇:mysql第三话 - mysql内存结构详解以及事务的更新语句的执行过程
旧书不厌百回读,熟读精思子自知