Как определить запросы 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 не слишком детализированы:

Запросы

Количество операторов, выполняемых сервером. Эта переменная включает в себя операторы, выполняемые в хранимых программах, в отличие от переменной Questions. Он не учитывает команды COM_PING или COM_STATISTICS. Эта переменная была добавлена ​​в MySQL 5.0.76.

Заранее благодарю за любую помощь.

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

Ответы:

15

Для ВЫБОРОВ:

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.

Итак, чтобы получить ваш выбор в течение одного часа:

В 9 вечера:

[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)

В 10 вечера:

[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, это полезно. Я собираюсь объединить это с длительностью var и выяснить объем запросов.
AJB
1
Просто чтобы уточнить, show global status like 'Com_%';команды для всего сервера, верно? Какой альтернативой может быть общая среда - например, чтобы оценить, насколько далеко мы находимся от max_questions/ max количества запросов в час (QPH).
Фабьен Снауварт,
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
Мэтти
источник