对于磁盘 I/O 来说却需要加载一页的信息,因为页是最小的存储单位。
数据库缓冲池
DBMS 会申请占用内存来作为数据缓冲池
缓存淘汰算法.
缓存在数据库中的结构和作用如下图所示:
当我们对数据库中的记录进行修改的时候,首先会修改缓冲池中页里面的记录信息,然后数据库会以一定的频率刷新到磁盘上。注意并不是每次发生更新操作,都会立刻进行磁盘回写。缓冲池会采用一种叫做 checkpoint 的机制将数据回写到磁盘上,这样做的好处就是提升了数据库的整体性能。
查看缓冲池的大小
mysql > show variables like 'innodb_buffer_pool_size'
修改缓冲池大小:
mysql > set global innodb_buffer_pool_size = 134217728;
查看缓冲池的个数,使用命令:
mysql > show variables like 'innodb_buffer_pool_instances'
数据页加载的三种方式
如果缓冲池中没有该页数据,那么缓冲池有以下三种读取数据的方式,每种方式的读取效率都是不同的:
- 内存读取
基本上执行时间在 1ms 左右.
- 随机读取
整体时间预估在 10ms 左右.
- 顺序读取
局部性原理.
通过 last_query_cost 统计 SQL 语句的查询成本
- 进行一个查询
mysql> SELECT comment_id, product_id, comment_text, user_id FROM product_comment WHERE comment_id = 900001;
- 查询优化器的成本
mysql> SHOW STATUS LIKE 'last_query_cost';