Як визначити запити MySQL на день?


15

Я досліджую великий перехід з MySQL на NoSQL DBaaS і зіткнувся з проблемою, намагаючись прогнозувати витрати. По суті, я не можу визначити, скільки запитів обробляє мій поточний сервер MySQL на день, щоб спробувати оцінити кількість запитів, які я буду використовувати з Cloudant , який стягує $ 0,015 за 100 PUT, POST та DELETE та 0,015 $ за 500 GET і ГОЛОВИ.

Я знайшов багато інформації про використання SHOW STATUS та SHOW GLOBAL STATUS, щоб отримати статистику, яку MySQL збирає на собі, але немає посилання на часові рамки.

Наприклад, SHOW GLOBAL STATUS повертає наступне:

Queries                           | 13576675

Що чудово, за винятком того, що я не маю уявлення про часові рамки, які визначають це число. 13 мільйонів запитів, коли? На місяць? Рік? З початку часу?

Документи MySQL насправді не надто розроблені:

Запити

Кількість операторів, виконаних сервером. Ця змінна включає висловлювання, що виконуються у збережених програмах, на відміну від змінної «Питання». Не враховує COM_PING або COM_STATISTICS команд. Ця змінна була додана в MySQL 5.0.76.

Заздалегідь дякую за будь-яку допомогу.


2
QueriesМінлива глобальний статус розраховує все , так як останній був запущений сервер ... який був SHOW STATUS LIKE 'Uptime';секунду назад. Багато змінних статусу очищено, FLUSH STATUS;але Queriesце не так, принаймні на тестових серверах я це підтвердив лише зараз, які були MySQL 5.5.19 і 5.6.14.
Michael - sqlbot

Відповіді:


15

Для SELECT:

show global status like "Com_select";

ОНОВЛЕННЯ:

show global status like "Com_update";

ВСТАВКИ:

show global status like "Com_insert";

ВИДАЛЕНО:

show global status like "Com_delete";

Значення ALl є "кумулятивними" з моменту останнього перезавантаження MySQL.

Отже, щоб отримати свої ВИБІРИ за одну годину:

О 21:00:

[21:00:00] [DEV\(none)] mysql> show global status like "Com_select";
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Com_select    | 671664 |
+---------------+--------+
1 row in set (0.00 sec)

О 22:00:

[22:00:00] [DEV\(none)] mysql> show global status like "Com_select";
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Com_select    | 672363 |
+---------------+--------+
1 row in set (0.00 sec)

Кількість SELECT за минулу годину: 672363 - 671664 = 699

З повагою


Дякую @mfouilleul, це корисно. Я збираюся поєднати це із змінною тривалістю та визначити обсяг запитів.
AJB

1
Просто для уточнення, show global status like 'Com_%';команди призначені для всього сервера, правда? Яка альтернатива була б у спільній обстановці - наприклад: оцінити, наскільки далеко ми max_questionsпотрапили до / максимум запитів за годину (QPH)
Fabien Snauwaert

9

Я використовую цей погляд, щоб стежити за кількістю запитів за секунду, хвилину, годину та день:

create or replace view _dba_query_stats as
select 
  SUBSTRING(VARIABLE_NAME, 5) as query_type, 
  VARIABLE_VALUE as total_count, 
  round(VARIABLE_VALUE / ( select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status'), 2) as per_second,
  round(VARIABLE_VALUE / ((select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status') / (60)))       as per_minute,
  round(VARIABLE_VALUE / ((select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status') / (60*60)))    as per_hour, 
  round(VARIABLE_VALUE / ((select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status') / (60*60*24))) as per_day,
  FROM_UNIXTIME(round(UNIX_TIMESTAMP(sysdate()) - (select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status'))) report_period_start,
  sysdate() as report_period_end,
  TIME_FORMAT(SEC_TO_TIME((select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status')),'%Hh %im') as report_period_duration
from 
  information_schema.GLOBAL_STATUS 
where 
  VARIABLE_NAME in ('Com_select', 'Com_delete', 'Com_update', 'Com_insert');

Вибірка зразка:

query_type total_count per_second per_minute per_hour per_day report_period_start report_period_end   report_period_duration
DELETE               0          0          0       0        0 2017-04-16 03:46    2017-04-20 22:14:56 114h 28m
INSERT           36595       0.09          5     320     7672 2017-04-16 03:46    2017-04-20 22:14:56 114h 28m
SELECT        14842019      36.02       2161  129656  3111738 2017-04-16 03:46    2017-04-20 22:14:56 114h 28m
UPDATE          189137       0.46         28    1652    39654 2017-04-16 03:46    2017-04-20 22:14:56 114h 28m
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.