MySQL学习笔记之为什么数据库会突然变慢(十二)

声明:本文章内容是根据极客时间中林晓斌的课程《MYSQL45讲》,经过学习,加以自己的理解形成的笔记。具体原文可以到官网进行阅读。如有侵权请,告知删除。

1.抖动

简单理解就是数据库,刚刚还好好的,突然就感觉整体性能都下降了,变的很慢呢。这就是所谓的抖动现象。

2.WAL

前面的笔记中介绍过,MYSQL数据在做UPDATE操作的时候,会先把更新的数据放在内存中,但是并不会立刻写磁盘,而且先记在redo log 中,等合适的时候再更新到磁盘上去。

当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。将脏页转变成干净页的这个过程称之为 flush;当有时候感觉数据库发生了抖动,可能就是在执行flush操作

3.什么时候发生 Flush

  • 前面我们说到 会先redo log,那么当redo log存满,需要覆盖一点 redo log的时候,在覆盖之前,肯定要这部分日志,对应在内存上的内容 flush到 磁盘上,不然可能会丢失。
  • 还有一种情况就是内存满了 ,也就是内存能装的 数据页已经到达极限,这个时候必须淘汰一部分数据页,如果淘汰的是“脏页”,那么就需要将脏页写到磁盘。
  • 最后一种就是等数据库压力相对小的时候,也就是他“空闲一点”,这时,会进行刷数据页的操作

谈一下第二种情况: 当内存不够用的时候,需要刷InnoDB 用缓冲池(buffer pool)里面的内存页;如果一个查询淘汰的脏页太多,会导致查询的时候变长。

4.InnoDB 刷脏页的控制策略

1.设置磁盘能力参数

innodb_io_capacity

2.关注脏页比例(Innodb_buffer_pool_pages_dirty/Innodb_buffer_pool_pages_total)

-- 脏页比例 Innodb_buffer_pool_pages_dirty/Innodb_buffer_pool_pages_total
elect VARIABLE_VALUE into @a from global_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_dirty';
select VARIABLE_VALUE into @b from global_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_total';
select @a/@b;

你可能感兴趣的:(数据库)