Solicitudes de E / S de Amazon RDS: 1 consulta = 1 E / S facturable

9

Tengo una base de datos InnoDB que me gustaría migrar a Amazon RDS.

Mi implementación actual, alojada en mi propio servidor, muestra aproximadamente 8 millones de consultas por mes.

El sitio RDS dice que la tasa de E / S es de $ 0.10 por 1 millón de solicitudes

¿1 E / S = 1 consulta? es decir, ¿se me facturarán $ 80 / mes por esta cantidad de uso + las tarifas de RDS?

Allo
fuente

Respuestas:

7

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

RolandoMySQLDBA
fuente
1
Gracias por la respuesta ... Quise escribir 800M, no 8M. De todos modos, ¿sabe si 1 consulta = 1 E / S?
Si pudiera responder mi pregunta relacionada aquí, sería genial: dba.stackexchange.com/questions/49869/…
Haga clic en Votar a favor el
6

No, una operación de E / S no equivale a una consulta. Una consulta puede resultar en 0 operaciones IO si es manejada por el caché de consultas (y tiene suerte), o puede resultar en múltiples operaciones IO. Potencialmente, cientos y miles, supongo, dependiendo de las tablas, índices, consultas y otros detalles.

http://aws.amazon.com/ebs/ establece lo siguiente:

El almacenamiento de volúmenes para volúmenes estándar se cobra por la cantidad que aprovisiona en GB por mes hasta que lo libera. El volumen de E / S para volúmenes estándar se cobra por la cantidad de solicitudes que realiza a su volumen. Programas como IOSTAT se pueden usar para medir el uso exacto de E / S de su sistema en cualquier momento. Sin embargo, las aplicaciones y los sistemas operativos a menudo realizan diferentes niveles de almacenamiento en caché, por lo que para los volúmenes estándar, es probable que vea un número menor de solicitudes de E / S en su factura de lo que ve su aplicación a menos que sincronice todas sus E / S en el disco .

iostat es una utilidad de bajo nivel de Linux, que no sabe nada acerca de las consultas de la base de datos. http://linux.die.net/man/1/iostat

La cita anterior es para el servicio EBS, pero RDS se basa en EC2 y EBS, por lo que estoy bastante seguro de que significan lo mismo en RDS.

Ivan Kurmanov
fuente