mysql体系结构
mysql8.0体系结构
图上看mysql服务是一个c/s架构 它是用c和c++开发的
Connectors 端
可以通过,各种各样的客户端,链接mysql服务器 如mysql命令,各种apl等
server端
又分为很多模块
链接层
1提供链接协议 TCP/IP 本地的socket
2用户名密码验证(通过授权表做的验证数据库一启动,会把授权表加载到内存中 mysql.user mysql.db mysql.table_priv mysql.column_priv)
3提供链接线程
查看链接线程 show processlist;
查看后台所有线程 select * from performance_schema.threadsG
sql层
sql线程接收链接线程
预处理(lex) 语法,语义(语句是什么类型的),权限(访问的库或者表有没有权限) 检查
解析(yacc) 生成解析树 (ast抽象语法树)
优化 逻辑优化 基于关系代数的等价转换,在物理优化 参考统计信息(描述了,数据的分布,索引的一些状态,粗略记录表里有多少行)以及一些优化器算法,代价评估,生成执行计划(explain)
统计信息说明
统计信息记录的是 表的状态, 如表名 数据行 数据分布情况 索引状态信息...
统计信息是mysql定期收集而来 通过一些参数指标 不是实时收集的
mysql.innodb_index_stats
mysql.innodb_table_stats
#问题 一条sql语句昨天运行的好好的(0.01秒) ,突然变慢了(2min)? 为什么
由于统计信息不准确造成的,不走索引造成的
可以通过命令强制重新收集 也有参数控制
analyze teble 库名.表名;
或者 optimize table 库名.表名; #命令锁表 谨慎使用
引擎层
io线程接收sql线程
mysql和磁盘打交道的类似于linux的文件系统
innodb存储引擎分为内存结构和磁盘结构
存储的宏观结构
在mysql中一个数据库,就在系统中就是一个目录
在mysql中一个表 对应操作系统中的一个.ibd文件(8.0)
在操作系统可以通过ibd2sdi 文件名 可以查看文件
表中记录的 数据行 + 元数据(表属性,表的列(列属性),表名)
mysql8.0表的存储方式 每张表的数据都存储在ibd文件中
mysql5.7表的存储方式
数据行 ibd文件
源数据 frm +ibdata1(总体) 文件
Online DDL 的时候会更加快速
8.0新特性了解
metdata 结构变化
5.7版本问题
两套数据字典信息server层 .frm innodb数据字典
DDL无法原子化 (删除两张表的时候,不是一起执行的)
frm和innodb层会出现不一致
并发处理需要小心处理(MDL,dict_sys::mutex,dict_sys::rw_lock)
崩溃无法恢复
8.0新特性
支持事务性DDL,崩溃可以回滚,保证一致,
只保留一份数据字典信息,取消了frm数据字典
数据都放在的InnoDB表中
采用套锁机制,管理数据字典的并发访问(DML)
全新的plugin支持
8.0.17后加入clone plugin,更好的支持MGR InnoDB Clustre的节点管理
安全的加密方式改变
改变加密方式为caching_sha2_password
SSL 将支持到TLSv1.3版本.
用户管理及认证方式改变
改变授权方式
加入role角色权限
添加更多权限
cache&&Buffer的变化
取消了Query Cache
缓存的是查询的结果 会把你查询的语句做一个hash 结果做成key 如果你查询条件增加了 缓存就不会命中
mysql的查询缓存并非缓存执行计划,而是查询及其结果集,这就意味着只有相同的查询操作才能命中缓存,隐藏mysql查询命中率很低
oracle 缓存的是执行计划 减少了解过程.
mysql实例
mysqld守护进程 + Master Threa + Worker Threads + 预分配的内存
mysql的内存结构
global buffers(全局)
innodb_buffer_pool(可以设置物理内存的%50-%75):数据缓冲区
innodb_log_buffer:日志缓冲区
key_buffer
table_cache
session buffers(每个会话独立使用)
read_buffer
read_fnd_buffer
sort buffer
join buffer
tmp table
binlog_cache
mysql中的线程
master thread 作用核心后台进程,负责全局管理数据刷新和数据一致性处理
io thread 负责和磁盘io交互 (read io write io insert buffer log io) 相关参数inndbo_read_io_threads, inndbo_write_io_threads
Purge thread 作用 UNDO页回收 参数 innodb_purge_threads
page cleaner 作用 脏页刷新线程 默认1 最大64 参数 innodb_page_cleaners
other threads
相关文章
- SpringBoot | 1.4 数据库事务处理
- Elasticsearch搜索(查询)性能优化
- PostgreSQL数据目录深度揭秘
- 阿里云产品8月刊
- mysql 系列:锁和它的运用
- 怎么快速的让网站被收录?搜索引擎的工作原理
- Logstash 同步 mysql 踩坑
- 云数据库选型必读:总有一款适合你!
- IDC《2017年中国BI市场的的跟踪报告》发布 中国厂商帆软软件位居第一
- 区域内有几个一二三类LSA计算
- 深入浅出 带你看懂数据可视化「美」的历程
- prometheus笔记
- 云数据库选型也绕不开“CAP定理”?
- DPU:5G边缘云的新基石
- 微软警告数千名云服务客户:数据库或被暴露
- 云数据库选型必读:如何梳理需求?
- 边缘计算:科技行业的下一个万亿美元机会
- 使用 Flink Hudi 构建流式数据湖
- 公共云能否成为机密?
- 全球十大农业大数据经典案例