mysql架构与innodb内存模型

2024年 3月 15日 85.1k 0

MYSQL架构

mysql支持可插拔存储引擎,架构实现分二层:server,存储引擎

MySQL Server
Storage Engines

mysql架构与innodb内存模型-1

MySQL Server

主要包括连接器、分析器、优化器、执行器等

NoSQL接口:CURD操作
SQL接口:DML,DDL,存储过程,试图,触发器
分析器:词法分析,语法分析,对象权限
优化器:查询访问路径,统计信息

Storage Engines

并发控制 :行锁,MVCC/快照读
事务:ACID
关联完整性:主外键
物理存储:表和索引页大小,物理存储格式
索引类型:B-tree ,hash,fulltext,
性能帮助:并行操作、线程并发、数据库检查点、批量插入

Cache&Buffer:Key cache/buffer pool ,cache management:LRU,LFU

innodb 架构

innodb已经成为默认引擎,且与Group Replication/Innodb cluster高度绑定,只了解innodb即可

mysql架构与innodb内存模型-2

内存结构

共享内存

内存主要分片是bufferpool, log buffer,double write占用不多

Buffer Pool

Buffer Pool innodb_buffer_pool_size 缓存数据与索引
Change Buffer 应用二级索引变更 innodb_change_buffer_max_size

Adaptive Hash Index 自适应hash条件触发加锁热点页查询,仅限于hash查询

Log Buffer

innodb_log_buffer_size 缓存Redo/Undo数据,日志缓冲区满自动将其刷新到磁盘

innodb_doublewrite_pages

innodb_doublewrite_pages 保障写原子性partial page write

InnoDB页面大小* (doublewrite pages +(512 /缓冲池实例数))

线程独占内存

read_buffer_size :NLJOIN 结果,内存文件排序

read_rnd_buffer_size 用于二级索引范围扫描回表优化MRR,优化随机读为顺序读

sort_buffer_size 用于排序

join_buffer_size 用于连接join

binlog_cache_size 用于缓存binlog

thread_stack 线程堆栈,如存储过程递归调用需调大,8.0.27后默认1048576

max_allowed_packet mysql server和client传输数据包大小(也适用于主从)

net_buffer_length 控制网络缓冲区大小

总体内存占用计算:

innodb_buffer_pool_size

+key_buffer_size

+max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size)

+max_connections*2MB

通常未过度调整排序,连接buffer的,可以认为一个session占用1OM以内内存;所有对于数据库保持1000~2000连接数的要考虑一下额外占用多少内存,OOM风险

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论