Come determinare le query MySQL al giorno?


15

Sto studiando il grande passaggio da MySQL a un DBaaS NoSQL e ho riscontrato un problema nel tentativo di prevedere le spese. Fondamentalmente, non riesco a capire quante query il mio attuale server MySQL gestisce al giorno per provare a stimare il numero di richieste che userò con Cloudant , che costa $ 0,015 per 100 PUT, POST e DELETE e $ 0,015 per 500 GET e TESTE.

Ho trovato molte informazioni sull'uso di SHOW STATUS e SHOW GLOBAL STATUS per ottenere le statistiche che MySQL raccoglie su se stesso, ma non ci sono riferimenti temporali.

Ad esempio, SHOW GLOBAL STATUS restituisce quanto segue:

Queries                           | 13576675

Il che è fantastico, tranne che non ho idea del lasso di tempo che avvolge quel numero. 13 milioni di domande quando? Al mese? Anno? Dall'inizio dei tempi?

I documenti MySQL non elaborano molto:

Interrogazioni

Il numero di istruzioni eseguite dal server. Questa variabile include istruzioni eseguite all'interno di programmi memorizzati, a differenza della variabile Domande. Non conta i comandi COM_PING o COM_STATISTICS. Questa variabile è stata aggiunta in MySQL 5.0.76.

Grazie in anticipo per qualsiasi aiuto.


2
La Queriesvariabile di stato globale conta tutto dall'ultimo avvio del server ...SHOW STATUS LIKE 'Uptime'; pochi secondi fa. Molte variabili di stato vengono cancellate FLUSH STATUS;ma Queriesnon lo sono, almeno nei server di test su cui l'ho confermato proprio ora, che erano MySQL 5.5.19 e 5.6.14.
Michael - sqlbot,

Risposte:


15

Per i SELEZIONATI:

show global status like "Com_select";

Aggiornamenti:

show global status like "Com_update";

Inserti:

show global status like "Com_insert";

DELETE:

show global status like "Com_delete";

I valori ALl sono "cumulativi" dall'ultimo riavvio di MySQL.

Quindi per ottenere i tuoi SELECT in un'ora:

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

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

Il numero di SELECT nell'ultima ora: 672363-671664 = 699

I migliori saluti


Grazie @mfouilleul, questo è utile. Ho intenzione di combinare questo con la durata var e capire il volume delle query.
AJB,

1
Giusto per chiarire, i show global status like 'Com_%';comandi sono per l'intero server, giusto? Quale sarebbe un'alternativa in un ambiente condiviso - ad esempio: stimare quanto siamo lontani da max_questions/ max Query all'ora (QPH) colpiti.
Fabien Snauwaert,

9

Uso questa vista per tenere d'occhio il numero di query al secondo, minuto, ora e giorno:

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

Uscita campione:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.