ADVERTENCIA: ¡Ten mucho cuidado con tus números y lo que ves como una consulta!
¿Por qué estoy dando tal advertencia?
En agosto de 2011, escribí una publicación en ServerFault explicando cómo es posible ejecutar 1 mil millones de consultas en 24 días .
Aquí está toda la publicación:
MySQL solicitará consultas internamente. De hecho, casi todo lo que haces en MySQL es una consulta.
Si activa el registro general o el registro de consulta lenta, todo lo que hace mysqld se registra.
Si tiene --log-queries-not-using-indexes habilitado, todo lo que no involucre índices aterriza en el registro lento.
Digamos que ejecuta esta consulta:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| annarbor |
| dude |
| example |
| garbage |
| lovesh |
| mysql |
| performance_schema |
| replagdb |
| stuff |
| test |
| tostinni |
| wordpress |
| zipcodes |
+--------------------+
14 rows in set (0.06 sec)
Sí, MOSTRAR BASES DE DATOS; es una consulta De hecho, ¿cuál es el equivalente de información_esquema?
mysql> select schema_name "Database" from information_schema.schemata;
+--------------------+
| Database |
+--------------------+
| information_schema |
| annarbor |
| dude |
| example |
| garbage |
| lovesh |
| mysql |
| performance_schema |
| replagdb |
| stuff |
| test |
| tostinni |
| wordpress |
| zipcodes |
+--------------------+
14 rows in set (0.08 sec)
¿La tabla information_schema.schemata tiene un índice?
mysql> show create table information_schema.schemata\G
*************************** 1. row ***************************
Table: SCHEMATA
Create Table: CREATE TEMPORARY TABLE `SCHEMATA` (
`CATALOG_NAME` varchar(512) NOT NULL DEFAULT '',
`SCHEMA_NAME` varchar(64) NOT NULL DEFAULT '',
`DEFAULT_CHARACTER_SET_NAME` varchar(32) NOT NULL DEFAULT '',
`DEFAULT_COLLATION_NAME` varchar(32) NOT NULL DEFAULT '',
`SQL_PATH` varchar(512) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
No, no lo hace. Entonces, MOSTRAR BASES DE DATOS; aterrizaría en un registro general y el registro lento (con --log-queries-not-using-indexes habilitado)
Por lo tanto, muchas operaciones que no creemos que constituyan una consulta pueden ser solo una consulta, pero internas a mysqld.
Si está utilizando herramientas de monitoreo que están conectadas a mysqld, esto también aumentaría el conteo de consultas.
Ejemplo:
mysql> show global status like 'uptime'; select * from information_schema.global_status where variable_name='uptime';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime | 613 |
+---------------+-------+
1 row in set (0.00 sec)
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| UPTIME | 613 |
+---------------+----------------+
1 row in set (0.00 sec)
Solo recuperar el tiempo de actividad de mysqld es una consulta. Internamente, ¿cómo cuenta MySQL las consultas que se ejecutan? Aquí hay dos variables de estado que pueden arrojar algo de luz:
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.
Preguntas : El número de declaraciones ejecutadas por el servidor. Esto incluye solo las declaraciones enviadas al servidor por los clientes y no las declaraciones ejecutadas dentro de los programas almacenados, a diferencia de la variable Consultas. Esta variable no cuenta los comandos COM_PING, COM_STATISTICS, COM_STMT_PREPARE, COM_STMT_CLOSE o COM_STMT_RESET.
No se preocupe si su servidor MySQL está siendo monitoreado porque el monitoreo que requiere variables de estado está ejecutando consultas internamente para recuperar los datos solicitados.
Mil millones en 24 días es
- 41,7 millones de consultas por día
- 1.736 millones de consultas por hora
- 28,935 consultas por minuto
- 482 consultas por segundo
Para una instancia de MySQL que se está monitoreando, estos números no son descabellados en absoluto.
Si está utilizando MySQL Workbench, MySQL Administrator o phpMyAdmin, cualquier página que generen o actualicen estos productos convocará estas pequeñas consultas de estado y aumentará rápidamente los números.
RESUMEN
Si su sitio realmente realiza consultas de 8M, entonces una tasa de E / S de $ 0.10 por 1 millón de solicitudes debe ser de $ 0.80 (80 centavos) al mes. Si ejecuta 1 mil millones de consultas en un mes, eso $ 100.00. ¡Asegúrate por completo de que estos números coincidan y ESCRIBE CON TU CFO SENTÁNDOSE A TI!
ACTUALIZACIÓN 2012-05-02 16:26 EDT
Como son 800 millones de consultas / mes, eso es $ 80.00 / mes