我正在尝试计算数据库服务器上的缓冲池使用率,但是我过去使用的查询给出的结果不准确:
mysql> SELECT CONCAT(FORMAT(DataPages*100.0/TotalPages,2),' %')
BufferPoolDataPercentage
FROM ( SELECT variable_value DataPages
FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data'
) A,
( SELECT variable_value TotalPages
FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total'
) B;
+--------------------------+
| BufferPoolDataPercentage |
+--------------------------+
| 145.55 % |
+--------------------------+
1 row in set (0.01 sec)
有人可以提供修复建议吗?
答案 0 :(得分:0)
您使用的是什么版本?
涉及ROW_FORMAT = COMPRESSED
吗?
变更日志说
----- 2013-02-05 5.6.10常规可用性&2013-02-05 5.5.30-添加或更改了功能-InnoDB -----
使用压缩表时,在buffer pool中计算内存使用量的计算很复杂,因为压缩页可能小于16KB或用户指定的page size。尽管可以从INFORMATION_SCHEMA.INNODB_BUFFER_PAGE表中检索此信息,但是该操作非常昂贵。以下新的状态变量有助于简化涉及缓冲池内存使用情况的计算:
[Innodb_buffer_pool_bytes_data](http://dev.mysql.comhttps://dev.mysql.com/doc/refman/5.6/en/server-status-variables.html#statvar_Innodb_buffer_pool_bytes_data), to supplement [Innodb_buffer_pool_pages_data](http://dev.mysql.comhttps://dev.mysql.com/doc/refman/5.6/en/server-status-variables.html#statvar_Innodb_buffer_pool_pages_data).
[Innodb_buffer_pool_bytes_dirty](http://dev.mysql.comhttps://dev.mysql.com/doc/refman/5.6/en/server-status-variables.html#statvar_Innodb_buffer_pool_bytes_dirty), to supplement [Innodb_buffer_pool_pages_dirty](http://dev.mysql.comhttps://dev.mysql.com/doc/refman/5.6/en/server-status-variables.html#statvar_Innodb_buffer_pool_pages_dirty).
(错误#15842637)
----- 2010-07-06 5.5.5开发人员里程碑-已修复的错误-InnoDB -----
----- 2010-05-06 5.1.47-修复了错误-InnoDB -----
信息_schema.global_status表中的innodb_buffer_pool_pages_total和innodb_buffer_pool_pages_misc的值可能计算不正确。 (缺陷号52983)
您的两个SELECTs
可能没有真正使用相同的数据。 可能更安全
SELECT variable_value TotalPages
FROM information_schema.global_status
WHERE variable_name LIKE 'Innodb_buffer_pool_pages%'
我检查了150多台服务器,并发现了您提到的另一种异常情况。