MySQL内核InnoDB存储引擎详解(6)

Buffer pool是内存中用来缓存数据和索引的存储区域,其是MySQL性能调优的重要一环。 
理想情况下,设置的size越大,则缓存到内存的数据越多, InnoDB就越像是内存数据库。

Buffer pool的底层是一个列表,通过LRU算法进行数据页的换进换出操作。当空间原因导致新页的加入需要换出一页时, InnoDB取出最近最少使用的页并将这个新的数据页加入到列表的中央。从方向上看,列表的头部是最常使用的数据页,而在尾部则是最少使用的数据页。 
Buffer pool中3/8的部分是保存最少使用的数据页,而中央部分其实是经常使用和最少使用的结合点。当在最少使用中保存的数据页被访问时,则数据页就会被移动到列表的头部变成最常使用的。

配置大小

InnoDB buffer pool的大小可以在启动时配置,也可以在启动之后配置。

增加和减少buffer pool的大小都是以大块的方式,块的大小由参数innodb_buffer_pool_chunk_size决定,默认为128M。

Innodb_buffer_pool_size的大小可以自行设定,但必须是 
innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances的整数倍,如果不是,则buffer pool会被调整成大于设定值且最接近的一个值 
如下列

mysql> show variables like '%innodb_buffer_pool%'
    -> ;
+-------------------------------------+----------------+
| Variable_name                      | Value          |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size      | 134217728      |
| innodb_buffer_pool_dump_at_shutdown | ON            |
| innodb_buffer_pool_dump_now        | OFF            |
| innodb_buffer_pool_dump_pct        | 25            |
| innodb_buffer_pool_filename        | ib_buffer_pool |
| innodb_buffer_pool_instances        | 1              |
| innodb_buffer_pool_load_abort      | OFF            |
| innodb_buffer_pool_load_at_startup  | ON            |
| innodb_buffer_pool_load_now        | OFF            |
| innodb_buffer_pool_size            | 134217728      |
+-------------------------------------+----------------+
mysql> select 134217728/1024/1024
    -> ;
+---------------------+
| 134217728/1024/1024 |
+---------------------+
|        128.00000000 |
+---------------------+
1 row in set (0.00 sec)
#动态修改一下InnoDB_buffer_size 给加大一个1 Bytes 看看是增加为134217729还是 134217728的整数倍
mysql> set global  innodb_buffer_pool_size=134217729;
Query OK, 0 rows affected, 1 warning (0.00 sec)
#是变成了整数陪
mysql> show variables like '%innodb_buffer_pool%'
    -> ;
+-------------------------------------+----------------+
| Variable_name                      | Value          |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size      | 134217728      |
| innodb_buffer_pool_dump_at_shutdown | ON            |
| innodb_buffer_pool_dump_now        | OFF            |
| innodb_buffer_pool_dump_pct        | 25            |
| innodb_buffer_pool_filename        | ib_buffer_pool |
| innodb_buffer_pool_instances        | 1              |
| innodb_buffer_pool_load_abort      | OFF            |
| innodb_buffer_pool_load_at_startup  | ON            |
| innodb_buffer_pool_load_now        | OFF            |
| innodb_buffer_pool_size            | 268435456      |
+-------------------------------------+----------------+
10 rows in set (0.00 sec)
mysql> select 268435456/1024/1024
    -> ;
+---------------------+
| 268435456/1024/1024 |
+---------------------+
|        256.00000000 |
+---------------------+
1 row in set (0.00 sec)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1fe1e788fe1712d1b3106819c6ce028f.html