Mysql 内存使用

Mysql的内存使用

Mysql虽然将所有的数据持久化在磁盘上,但是不可能每次查询、更新都直接对磁盘操作,那样效率也太低了。Mysql在实际sql语句执行过程中会充分利用内存进行加速读、写、排序、连接等。

buffer pool

buffer pool是Innodb引擎的数据缓冲区。它主要有两个功能,一个是加速读,一个是加速写。当Innodb从磁盘上读取数据之后,会将数据存放在buffer pool中存储,之后下次查找直接从buffer pool中读取。当写入数据时,如果数据在buffer pool中已经存在就直接修改buffer pool中的数据,(同时也会写入binlog和redolog,防止buffer pool中的数据还没来得及持久化就宕机导致数据丢失),所以buffer pool中的数据永远是最新的。buffer pool中数据被修改后,数据页被标记为脏页,脏页会由后台线程定时写回磁盘。

changeBuffer

当数据在buffer pool中存在时,可以直接修改buffer pool从而加速写。但是当数据在buffer pool中不存在时呢?这种时候需要分两种情况讨论。

  1. 假如是需要修改唯一索引的字段,由于需要进行唯一性判断,因此必须访问磁盘查看数据是否存在。只要访问磁盘,读取到的数据就会被存放在buffer pool中,因此之后修改就可以直接修改buffer pool。
  2. 假如修改的是普通索引,则无需进行额外判断,因此也不必加载旧数据。此时mysql会直接将数据写入一块叫change buffer的区域中(change buffer是可以持久化的࿰
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值