缓冲池使用率查询返回无效结果

时间:2019-05-03 19:44:03

标签: mysql buffer information-schema

我正在尝试计算数据库服务器上的缓冲池使用率,但是我过去使用的查询给出的结果不准确:

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)

有人可以提供修复建议吗?

1 个答案:

答案 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多台服务器,并发现了您提到的另一种异常情况。