对于磁盘 I/O 来说却需要加载一页的信息,因为页是最小的存储单位。

数据库缓冲池

DBMS 会申请占用内存来作为数据缓冲池

缓存淘汰算法.

缓存在数据库中的结构和作用如下图所示:

image.png

当我们对数据库中的记录进行修改的时候,首先会修改缓冲池中页里面的记录信息,然后数据库会以一定的频率刷新到磁盘上。注意并不是每次发生更新操作,都会立刻进行磁盘回写。缓冲池会采用一种叫做 checkpoint 的机制将数据回写到磁盘上,这样做的好处就是提升了数据库的整体性能。

查看缓冲池的大小

  1. mysql > show variables like 'innodb_buffer_pool_size'

image.png

修改缓冲池大小:

  1. mysql > set global innodb_buffer_pool_size = 134217728;

image.png

查看缓冲池的个数,使用命令:

  1. mysql > show variables like 'innodb_buffer_pool_instances'

image.png

数据页加载的三种方式

如果缓冲池中没有该页数据,那么缓冲池有以下三种读取数据的方式,每种方式的读取效率都是不同的:

  • 内存读取

基本上执行时间在 1ms 左右.
image.png

  • 随机读取

整体时间预估在 10ms 左右.

image.png

  • 顺序读取

局部性原理.

通过 last_query_cost 统计 SQL 语句的查询成本

  1. 进行一个查询
  1. mysql> SELECT comment_id, product_id, comment_text, user_id FROM product_comment WHERE comment_id = 900001;
  1. 查询优化器的成本
  1. mysql> SHOW STATUS LIKE 'last_query_cost';

image.png

总结

image.png