系列文章目录
第1章 MySQL系列文章之子查询
第2章 MySQL系列文章之表的操作和约束
第3章 MySQL系列文章之表的视图和存储过程
第4章 MySQL系列文章之逻辑架构
第5章 MySQL系列文章之存储引擎
第6章 MySQL系列文章之索引的数据结构
第7章 MySQL系列文章之索引的创建与设计原则
第8章 MySQL系列文章之索引的性能分析工具的使用
第9章 MySQL系列文章之索引优化与查询优化
第10章 MySQL系列文章之数据库其它调优策略
第11章 MySQL事务和事务日志
第12章 MySQL的锁
第13章 MySQL的多版本并发控制
第14章 MySQL日志和主从复制
第15章 基于Docker的MySQL备份
文章目录
一、逻辑架构
1.1、服务器处理客户端请求
进一步说明:
简化为三层结构:
- 连接层:客户端和服务器端建立连接,客户端发送 SQL 至服务器端;
- SQL 层(服务层):对 SQL 语句进行查询处理;与数据库文件的存储方式无关;
- 存储引擎层:与数据库文件打交道,负责数据的存储和读取。
二、SQL执行流程
2.1、MySQL 中的 SQL执行流程
三、数据库缓冲池(buffer pool)
3.1、缓冲池 vs 查询缓存
缓冲池和查询缓存是一个东西吗?不是。
- 缓冲池:缓冲池包括了数据页、索引页、插入缓冲、锁信息、自适应 Hash 和数据字典信息等。
- 查询缓存:提前把查询结果缓存起来,这样下次不需要执行就可以直接拿到结果。查询缓存类似K-V结构,只缓存sql语句查出来的内容。
3.2、缓冲池的作用
DBMS 会申请占用内存来作为数据缓冲池,在真正访问页面之前,需要把在磁盘上的页缓存到内存中的Buffer Pool 之后才可以访问。这样做的好处是可以让磁盘活动最小化,从而减少与磁盘直接进行 I/O 的时间。
3.3、缓冲池如何读取数据
缓冲池管理器会尽量将经常使用的数据保存起来,在数据库进行页面读操作的时候,首先会判断该页面是否在缓冲池中,如果存在就直接读取,如果不存在,就会通过内存或磁盘将页面存放到缓冲池中再进行读取。
更新到一半突然发生错误了,想要回滚到更新之前的版本,该怎么办?
通过Redo Log & Undo Log进行数据持久化、事务回滚。
3.4、查看/设置缓冲池的大小
进入MySQL。
查看缓冲池大小:
show variables like 'innodb_buffer_pool_size';
设置缓冲池大小:
set global innodb_buffer_pool_size = 268435456;
3.5、多个Buffer Pool实例
多线程访问,可以创建多个缓存池实例,前提是缓存池大于1G。
要创建2个Buffer Pool 实例:
innodb_buffer_pool_instances = 2
参考:MySQL高级特性篇-宋红康