mysql学习笔记

不定时更新,我的mysql学习笔记

memeory引擎

  1. mysql默认使用memory存储引擎存储查询的中间结果,如果中间结果的大小大于了memory引擎的表容量,或者中间结果存在blob、text类型字段的时候,就会使用myisam存储引擎,将表放在磁盘中,性能会降低

archive引擎

archive引擎只支持insert和select操作,从mysql5.1开始支持索引。使用zlib算法压缩数据,比例达到10:1,所以很适合存储归档数据,如日志等

Innodb引擎

Innodb引擎是一个多线程的引擎,其中master线程是核心的后台线程。

master线程

主要负责将缓冲池的数据异步刷新到磁盘,保证数据一致性,包括脏页的刷新、合并和插入缓冲、ubdo页的回收。(和下面冲突,暂且这么记着,接着看书,然后更新)

IOthread

处理线程的回调

Purge Thread

用来回事务提交之后的undo日志,可以不止一个线程

page clear thread

将脏页的刷新放入单独的线程操作,减轻master线程的工作及对用户线程的阻塞

缓冲池

缓冲池缓冲的数据页类型有:索引页、数据页、undo页、插入缓冲、自适应哈希索引、innodb存储的索引新、数据字典信息。
一个数据库实例可以有多个缓冲池,减少内部资源竞争。

LRU LIST、Free List、Flush List

缓冲池使用LRU算法管理;数据库启动时,LRU列表是空的,数据页都在Free列表管理;LRU + Free的和可能不是数据库缓冲池的大小,因为缓冲池中海油自适应哈希索引和锁等页。

mysql LRU算法优化

mysql使用的LRU算法引入了midpoint的概念,新读取的页不会像朴素LRU算法一样放在LRU List的首部,而是放在LRU List的minpoint处,默认配置下,是LRU List的5/8处。minpoint之前是new列表,热端;之后是old列表。

为什么不使用朴素的LRU算法?
因为mysql中的某些操作可能会将缓冲池中的数据全部刷处缓冲区,如全表扫描。这种操作可能会将热点数据从LRU List中删除。
解决方法
引入innodb_old_blocks_time,表示页读取到mid位置后要等待多久才能到LRU的热端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值