概念
数据库:存储数据的文件集合,静态概念
实例:一个提供数据读写服务的进程
集群模式下数据和和实例是一对多的关系
conf文件
mysql --help
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
架构
- connection pool
- sql & cache
- engine
- filesystem
主键
物理存储是按照主键来顺序排列的,没有定义主键mysql就自动生成6字节的rowid当主键
后台线程
master thread
脏页刷新
合并插入缓冲
undo回收
io thread
aio 读写回调线程
purge thread
清理undo
page cleaner thread
脏页
innodb_buffer_pool
缓存数据
- 数据
- 索引
- undo(只存在与内存,不写到文件,undo记录历史数据,MVCC的一部分)
- redo
- 插入缓冲
- 自适应hash
lru
innodb_old_blocks_pct
buffer按照lru链表来组合,但是刚读入的页只会插入midpoint后的链表,避免扫描场景冲掉大部分缓存, midpoint之前的是按照活跃程度排的
innodb_old_blocks_time决定什么时候插入lru的前半部分
check point
- 缩短数据库恢复时间,只需要检查check point之后的redo log
- 缓冲池不够用时刷新缓冲池
- 重做日志太多时候刷到磁盘
change buffer(insert/delete/purge buffer)
对于非唯一的二级索引,不会立即更新,而是写到change buffer然后一次写入二级索引页
double write buffer
由于mysql缓存页是16k,并不能原子性的直接一下子刷到磁盘,所以mysql会把页先写到double write page,然后再真正的写物理磁盘,如果写物理磁盘失效,可以用double write 页的数据来恢复
hash索引
mysql观察到热点数据自动建立的hash索引