阅读mysql LRU文档
This commit is contained in:
@@ -95,5 +95,34 @@ show variables like 'innodb_buffer_pool_size'
|
||||
> ##### 将innodb_buffer_pool_size设置为9G
|
||||
> 由于9G不是2G的整数倍,那么innodb_buffer_pool_size将会被自动调整到10G,10G是2G的整数倍
|
||||
|
||||
### LRU List, Free List, Flush List
|
||||
缓冲池是一块由页构成的内存区域。
|
||||
|
||||
innodb中缓冲池通过LRU算法来进行管理,LRU中最频繁使用的页放在最前端,而较少使用的页放在最尾端。当缓冲池中内存已满,不能存放新读取到的页时,会释放LRU尾端较少使用的页。
|
||||
|
||||
|
||||
innodb中,`页大小默认为16KB`.
|
||||
|
||||
#### midpoint
|
||||
在LRU中,新读取的页,`并不放在LRU的首部,而是放在midpoint的位置,该算法被称为midpoint insertion strategy`。
|
||||
|
||||
默认情况下,midpoint位于`5/8`的位置,离首部5/8, 离尾部3/8。在innodb中,将`首部 -> midpoint`部分的页称之为new列表,`midpoint -> 尾部`部分称之为old列表。
|
||||
|
||||
midpoint位置可以通过`innodb_old_blocks_pct`来进行控制,默认情况下该值为`37`。
|
||||
|
||||
```sql
|
||||
show variables like 'innodb_old_blocks_pct'
|
||||
```
|
||||
结果为
|
||||
|
||||
|Variable_name|Value|
|
||||
|-------------|-----|
|
||||
|innodb_old_blocks_pct|37|
|
||||
|
||||
引入midpoint的原因是防止在进行数据扫描等操作时,热点数据被淘汰。
|
||||
|
||||
此外,innodb还引入了`innodb_old_blocks_time`变量来管理LRU列表,代表LRU列表在被读取到midpoint位置后,需要经过多久时间才能被加入到`LRU的new部分`。
|
||||
|
||||
默认情况下,`innodb_old_blocks_time`该值为1000(单位为ms),如果增加该值,会使新页面更快的从缓冲区中淘汰。
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user