Запрос процента использования пула буферов, возвращающий неверные результаты - PullRequest
1 голос
/ 03 мая 2019

Я пытаюсь вычислить использование пула буферов на моем сервере базы данных, но запрос, который я использовал в прошлом, дает неточные результаты:

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 голосов
/ 14 мая 2019

Какую версию вы используете?

ROW_FORMAT = COMPRESSED участвует?

В логах написано

----- 2013-02-05 5.6.10 Общая доступность и 2013-02-05 5.5.30 - Функциональность добавлена ​​или изменена - InnoDB -----

Когда использовались сжатые таблицы, вычисление для вычисления использования памяти в пределах пула буферов было сложным, поскольку сжатые страницы могли быть меньше 16 КБ или указанного пользователем размера страницы . Хотя эту информацию можно извлечь из таблицы 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 Milestone для разработчиков - исправлены ошибки - InnoDB -----
----- 2010-05-06 5.1.47 - Исправлены ошибки - InnoDB -----

Значения innodb_buffer_pool_pages_total и innodb_buffer_pool_pages_misc в таблице information_schema.global_status могут быть вычислены неправильно. (Ошибка № 52983)

Есть вероятность, что ваши два SELECTs на самом деле не были сделаны с одинаковыми данными. может безопаснее начать с

SELECT  variable_value TotalPages
        FROM  information_schema.global_status
        WHERE  variable_name LIKE 'Innodb_buffer_pool_pages%'

Я проверил более 150 серверов и обнаружил еще один случай упомянутой вами аномалии.

...