¿Cómo determinar las consultas MySQL por día?


15

Estoy investigando el gran cambio de MySQL a NoSQL DBaaS y me he encontrado con un problema al tratar de pronosticar los gastos. Esencialmente, no puedo calcular cuántas consultas maneja mi servidor MySQL actual por día para tratar de estimar la cantidad de solicitudes que usaré con Cloudant , que cobra $ 0.015 por 100 PUT, POST y DELETE y $ 0.015 por 500 GET y cabezas.

He encontrado mucha información sobre el uso de SHOW STATUS y SHOW GLOBAL STATUS para obtener las estadísticas que MySQL recopila sobre sí mismo, pero no hay una referencia temporal.

Por ejemplo, SHOW GLOBAL STATUS devuelve lo siguiente:

Queries                           | 13576675

Lo cual es genial, excepto que no tengo idea del plazo que envuelve ese número. 13 millones de consultas cuando? ¿Por mes? ¿Año? ¿Desde el principio de los tiempos?

Los documentos de MySQL realmente no elaboran demasiado:

Consultas

El número de declaraciones ejecutadas por el servidor. Esta variable incluye declaraciones ejecutadas dentro de programas almacenados, a diferencia de la variable Preguntas. No cuenta los comandos COM_PING o COM_STATISTICS. Esta variable se agregó en MySQL 5.0.76.

Gracias de antemano por cualquier ayuda.


2
La Queriesvariable de estado global cuenta todo desde la última vez que se inició el servidor ... que fue SHOW STATUS LIKE 'Uptime';hace unos segundos. Muchas variables de estado se borran con, FLUSH STATUS;pero Queriesno lo están, al menos en los servidores de prueba que lo confirmé en este momento, que eran MySQL 5.5.19 y 5.6.14.
Michael - sqlbot

Respuestas:


15

Para SELECCIONAR:

show global status like "Com_select";

ACTUALIZACIONES:

show global status like "Com_update";

INSERTOS:

show global status like "Com_insert";

DELETES:

show global status like "Com_delete";

Todos los valores son "acumulativos" desde el último reinicio de MySQL.

Entonces, para obtener sus SELECT en una hora:

A las 9 pm:

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

A las 10 pm:

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

El número de SELECT en la última hora: 672363 - 671664 = 699

Atentamente


Gracias @mfouilleul, esto es útil. Voy a combinar esto con la duración var y calcularé el volumen de consultas.
AJB

1
Solo para aclarar, los show global status like 'Com_%';comandos son para todo el servidor, ¿verdad? ¿Cuál sería una alternativa en un entorno compartido max_questions?
Fabien Snauwaert

9

Utilizo esta vista para controlar el número de consultas por segundo, minuto, hora y día:

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

Salida de muestra:

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.