SELECT
BufferPoolUsed BytesUsed,
(BufferPoolUsed / power(1024,1)) UsedKB,
(BufferPoolUsed / power(1024,2)) UsedMB,
(BufferPoolUsed / power(1024,3)) UsedGB,
BufferPoolReserved BytesReserved,
(BufferPoolReserved / power(1024,1)) ReservedKB,
(BufferPoolReserved / power(1024,2)) ReservedMB,
(BufferPoolReserved / power(1024,3)) ReservedGB
FROM
(
SELECT
(A.num * B.num) BufferPoolUsed,
(A.num * C.num) BufferPoolReserved
FROM
(SELECT variable_value num FROM information_schema.global_status
WHERE variable_name='Innodb_page_size') A,
(SELECT variable_value num FROM information_schema.global_status
WHERE variable_name='Innodb_buffer_pool_pages_data') B,
(SELECT variable_value num FROM information_schema.global_status
WHERE variable_name='Innodb_buffer_pool_pages_total') C
) AA
;
我在 MySQL 5.5.12 for Windows 中将其设置为 256M。这是我的输出:
mysql> SELECT
-> BufferPoolUsed BytesUsed,
-> (BufferPoolUsed / power(1024,1)) UsedKB,
-> (BufferPoolUsed / power(1024,2)) UsedMB,
-> (BufferPoolUsed / power(1024,3)) UsedGB,
-> BufferPoolReserved BytesReserved,
-> (BufferPoolReserved / power(1024,1)) ReservedKB,
-> (BufferPoolReserved / power(1024,2)) ReservedMB,
-> (BufferPoolReserved / power(1024,3)) ReservedGB
-> FROM
-> (
-> SELECT
-> (A.num * B.num) BufferPoolUsed,
-> (A.num * C.num) BufferPoolReserved
-> FROM
-> (SELECT variable_value num FROM information_schema.global_status
-> WHERE variable_name='Innodb_page_size') A,
-> (SELECT variable_value num FROM information_schema.global_status
-> WHERE variable_name='Innodb_buffer_pool_pages_data') B,
-> (SELECT variable_value num FROM information_schema.global_status
-> WHERE variable_name='Innodb_buffer_pool_pages_total') C
-> ) AA
-> ;
+-----------+--------+----------+--------------------+---------------+------------+------------+------------+
| BytesUsed | UsedKB | UsedMB | UsedGB | BytesReserved | ReservedKB | ReservedMB | ReservedGB |
+-----------+--------+----------+--------------------+---------------+------------+------------+------------+
| 6864896 | 6704 | 6.546875 | 0.0063934326171875 | 268435456 | 262144 | 256 | 0.25 |
+-----------+--------+----------+--------------------+---------------+------------+------------+------------+
1 row in set (0.00 sec)
mysql>
根据 MySQL 文档,InnoDB 缓冲池在 MySQL 5.5 中默认设置为 128MB。
您可以显示有多少 InnoDB 缓冲池正在使用和保留,如下所示:
我在 MySQL 5.5.12 for Windows 中将其设置为 256M。这是我的输出:
您可以在 MySQL 启动时设置此值。例如:
将其设置为使用 1G 的 RAM
将其设置为使用 256MB 的 RAM
在my.cnf中修改后,必须重启mysql才能生效。
MySQL 使用缓冲池在内存中缓存 InnoDB 数据和索引。这不是使用的总内存,而是您的 MySQL DB
如果您的 InnoDB 表很小,128MB 就足够了,并且实际上所有 InnoDB 表都将被视为内存表。128Mb 是缓冲区大小的限制,仅在需要时才填充。
你可以在这里阅读
MySQL 在启动时为缓冲池分配内存,但实际上只根据需要占用内存。这意味着如果 MySQL 无法获取 128M 的 RAM,它将不会启动,但您的服务器最初不会使用这 128M 的内存。在缓冲池被充分利用之前,RAM 将可供其他应用程序使用。
128 M 在历史上是很大的缓冲池大小。但它现在真的是历史 :) 考虑提供更大的池大小。许多模式说您必须或可能为 innodb 缓冲池提供服务器总内存的 70-80%。优化 InnoDB 缓冲池是 MySQL 优化阶段的常见做法。但请注意错误估计您的 RAM。您必须为其他任务保留足够的 RAM。例如 Apache。首先为您的服务器生成一个最佳的 my.cnf(配置文件)。您可以使用简单但很棒的 Percona 在线工具来做到这一点。这对您来说将是非常有用的起点: percona 在线工具
是的 - 最大!缓冲池的要点 - 是使用内存缓存,而不是任何其他 8-)