暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql架构与innodb内存模型

zhou 2024-03-15
132

MYSQL架构

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

MySQL Server
Storage Engines

MySQL architecture diagram showing connectors, interfaces, pluggable storage engines, the file system with files and logs.

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即可

InnoDB architecture diagram showing in-memory and on-disk structures. In-memory structures include the buffer pool, adaptive hash index, change buffer, and log buffer. On-disk structures include tablespaces, redo logs, and doublewrite buffer files.

内存结构

共享内存

内存主要分片是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风险

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论