Jak określać zapytania MySQL dziennie?

15

Badam dużą zmianę z MySQL na NoSQL DBaaS i napotkałem problem z prognozowaniem wydatków. Zasadniczo nie jestem w stanie ustalić, ile zapytań obsługuje mój obecny serwer MySQL dziennie, aby spróbować oszacować liczbę żądań, których będę używać z Cloudant , który pobiera 0,015 USD za 100 PUT, POST i DELETE oraz 0,015 USD za 500 GET i HEAD.

Znalazłem wiele informacji na temat używania SHOW STATUS i SHOW GLOBAL STATUS, aby uzyskać statystyki, które MySQL zbiera na sobie, ale nie ma odniesienia do ram czasowych.

Na przykład SHOW GLOBAL STATUS zwraca następujące informacje:

Queries                           | 13576675

Co jest świetne, z tym wyjątkiem, że nie mam pojęcia o czasie, w którym ta liczba jest zawijana. 13 milionów zapytań kiedy? Na miesiąc? Rok? Od początku czasu?

Dokumenty MySQL tak naprawdę nie rozwijają zbyt wiele:

Zapytania

Liczba instrukcji wykonanych przez serwer. Ta zmienna obejmuje instrukcje wykonywane w przechowywanych programach, w przeciwieństwie do zmiennej Pytania. Nie liczy poleceń COM_PING ani COM_STATISTICS. Ta zmienna została dodana w MySQL 5.0.76.

Z góry dziękuję za wszelką pomoc.

AJB
źródło
2
QueriesZmienny stan globalny liczy wszystko, ponieważ serwer był ostatnio zaczęło ... który był SHOW STATUS LIKE 'Uptime';sekund temu. Wiele zmiennych statusu jest czyszczonych za pomocą, FLUSH STATUS;ale Queriesnie jest, przynajmniej na serwerach testowych, które właśnie to potwierdziłem, którymi były MySQL 5.5.19 i 5.6.14.
Michael - sqlbot

Odpowiedzi:

15

W przypadku WYBORÓW:

show global status like "Com_select";

AKTUALIZACJE:

show global status like "Com_update";

WKŁADKI:

show global status like "Com_insert";

USUŃ:

show global status like "Com_delete";

Wartości ALI są „kumulatywne” od ostatniego restartu MySQL.

Aby otrzymać SELECT w ciągu godziny:

O 9 wieczorem:

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

O 10 po południu:

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

Liczba WYBORÓW w ciągu ostatniej godziny: 672363 - 671664 = 699

Z poważaniem

Maxime Fouilleul
źródło
Dzięki @mfouilleul, to jest pomocne. Połączę to z czasem trwania var i ustalę liczbę zapytań.
AJB
1
Żeby wyjaśnić, show global status like 'Com_%';polecenia dotyczą całego serwera, prawda? Jaka byłaby alternatywa we wspólnym środowisku - np. Aby oszacować, jak daleko jesteśmy od max_questions/ max liczby zapytań na godzinę (QPH).
Fabien Snauwaert
9

Korzystam z tego widoku, aby kontrolować liczbę zapytań na sekundę, minutę, godzinę i dzień:

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');

Przykładowe dane wyjściowe:

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
Matty
źródło