我最近尝试将innodb缓冲池大小增加到8GB,但在我的innodb状态下,池大小看起来像它配置的前一个值(在我的情况下为500MB)。
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 9576946034; in additional pool allocated 19271936
**Buffer pool size 524288**
Free buffers 2
Database pages 508873
Modified db pages 5
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages read 443350, created 76998, written 683297
0.00 reads/s, 0.00 creates/s, 0.37 writes/s
Buffer pool hit rate 1000 / 1000
但这就是innodb状态所显示的,
mysql> show variables like 'innodb_%';
+---------------------------------+------------------------+
| Variable_name | Value |
+---------------------------------+------------------------+
| innodb_additional_mem_pool_size | 52428800 |
| innodb_autoextend_increment | 8 |
| innodb_buffer_pool_awe_mem_mb | 0 |
| innodb_buffer_pool_size | 8589934592 |
有人可以让我知道导致这种差异的原因吗?
答案 0 :(得分:3)
你正在查看错误的数字。
使用分配的总内存9576946034
innodb_buffer_pool_size
设置
InnoDB为缓冲区和控制结构保留了额外的内存,因此总分配空间比指定大小大约10%。
Buffer pool size
是页面的数量。
答案 1 :(得分:1)
您应该与Total Memory allocated
输出
Show Engine InnoDB status;
值进行比较
可以使用SHOW GLOBAL STATUS LIKE'Innodb_buffer_pool_pages_%'命令测量InnoDB缓冲池的用法。数据,misc和空闲页面的总和相当于总页数。总页数乘以Innodb_page_size对应你的innodb_buffer_pool_size。
(Innodb_buffer_pool_pages_data
+ Innodb_buffer_pool_pages_misc
+ Innodb_buffer_pool_pages_free
)= Innodb_buffer_pool_pages_total
Innodb_buffer_pool_pages_total
* Innodb_page_size
= innodb_buffer_pool_size
来自Show Engine InnoDB Status
输出:
您可以看到Innodb分配的总内存(有时它高于您的预期),额外内存池中分配的内存量(因此您可以检查其大小是否正确),缓冲池中的总页数,数量页面空闲,数据库页面和脏页面分配的页面。从这些值中,您可以了解缓冲池的大小是否正常 - 如果您经常释放大量页面,则可能意味着您的活动数据库大小小于分配的缓冲池大小,因此您可以将其调低。即使空闲页面为零,因为在这种情况下,数据库页面将不等于缓冲池的总大小,因为缓冲池还存储锁定信息,自适应散列索引和一些其他系统结构。
http://www.fromdual.com/innodb-variables-and-status-explained
http://www.mysqlperformanceblog.com/2006/07/17/show-innodb-status-walk-through/