MYSQL架构
mysql支持可插拔存储引擎,架构实现分二层:server,存储引擎
MySQL Server
Storage Engines
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即可
内存结构
共享内存
内存主要分片是bufferpool, log buffer,double write占用不多
Buffer Pool
Buffer Pool innodb_buffer_pool_size 缓存数据与索引
Change Buffer 应用二级索引变更 innodb_change_buffer_max_sizeAdaptive 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风险