一次查询的全过程:
比方说我这里有一个订单系统,一条查询请求发送过来,它内部是怎么执行的呢?
- 用户发送请求到业务系统,就会有一条线程来处理这个请求
- 该线程会在数据库连接池里面获取一个JDBC连接
- MySQL工作线程会监听数据库操作的请求
- 工作线程读取到 SQL 后会交给SQL接口去执行(SQL接口是一个组件,负责处理接收到的SQL语句)
- SQL接口会把SQL语句交给SQL解析器,SQL解析器能将SQL语句转化成 MySQL 系统能够理解的格式
- 接着交给查询优化器来选择一个最优的查询路径
- 执行器会根据优化器选择的执行计划,去调用存储过程的接口按照一定的顺序和步骤,调用存储引擎接口
- 在存储引擎中,有一块内存区域(Buffer Pool),内存块中有很多实例(chunk), 通过 SQL的描述数据,就能够查询对应的缓存页
- 磁盘文件通过 IO 将数据加载到内存当中,也就是缓存页中
- 存储引擎将所需的数据进行返回
- 最终返回给用户
查看默认 buffer pool 的大小
select @@innodb_buffer_pool_size/1024/1024;
查看默认 buffer pool 的实例
select @@innodb_buffer_pool_instances;
参考文章:
分库分表实战:追根溯源—一次查询会经过哪些流程呢:https://www.51cto.com/article/712999.html