Solicitações de E / S do Amazon RDS - 1 consulta = 1 E / S faturável?

9

Eu tenho um banco de dados InnoDB que gostaria de migrar para o Amazon RDS.

Minha implementação atual, hospedada em meu próprio servidor, mostra aproximadamente 8 milhões de consultas por mês.

O site do RDS diz que a taxa de E / S é de US $ 0,10 por 1 milhão de solicitações

1 E / S = 1 consulta? ou seja, serei cobrado US $ 80 / mês por esse valor de uso + as taxas do RDS?

Todos
fonte

Respostas:

7

AVISO: Tenha muito cuidado com seus números e com o que você vê como uma Consulta !!!

Por que estou dando esse aviso ???

Em agosto de 2011, escrevi uma postagem no ServerFault explicando como é possível executar 1 bilhão de consultas em 24 dias .

Aqui está todo o post:

O MySQL solicitará consultas internamente. De fato, praticamente qualquer coisa que você faz no MySQL é uma consulta.

Se você ativar o log geral ou o log de consultas lentas, tudo o que o mysqld faz será registrado.

Se você tiver --log-queries-not-using-indexes ativado, tudo o que não envolve índices fica no log lento.

Digamos que você execute 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)

Sim, MOSTRAR BASES DE DADOS; é uma consulta. De fato, qual o equivalente information_schema ???

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)

A tabela information_schema.schemata possui um í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)

Não, não tem. Então, mostre bases de dados; aterrissaria em um log geral e no log lento (com --log-queries-not-using-indexes ativado)

Portanto, muitas operações que não acreditamos que constituam uma consulta podem ser apenas uma consulta, mas internas ao mysqld.

Se você estiver usando alguma ferramenta de monitoramento conectada ao mysqld, isso também aumentaria a contagem de consultas.

Exemplo:

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)

Apenas recuperar o tempo de atividade do mysqld é uma consulta. Internamente, como o MySQL conta as consultas que estão sendo executadas? Aqui estão duas variáveis ​​de status que podem lançar alguma luz:

  • Consultas : O número de instruções executadas pelo servidor. Essa variável inclui instruções executadas nos programas armazenados, diferentemente da variável Questions. Não conta os comandos COM_PING ou COM_STATISTICS.

  • Perguntas : O número de instruções executadas pelo servidor. Isso inclui apenas instruções enviadas ao servidor pelos clientes e não instruções executadas em programas armazenados, diferentemente da variável Queries. Essa variável não conta os comandos COM_PING, COM_STATISTICS, COM_STMT_PREPARE, COM_STMT_CLOSE ou COM_STMT_RESET.

Por favor, não se preocupe se o seu servidor MySQL estiver sendo monitorado porque o monitoramento que solicita variáveis ​​de status está executando consultas internamente para recuperar os dados solicitados.

1 bilhão em 24 dias é

  • 41,7 milhões de consultas por dia
  • 1.736 milhões de consultas por hora
  • 28.935 consultas por minuto
  • 482 consultas por segundo

Para uma instância do MySQL que está sendo monitorada, esses números não são exagerados.

Se você estiver usando o MySQL Workbench, o MySQL Administrator ou o phpMyAdmin, qualquer página que esses produtos gerem ou atualizem convocará essas pequenas consultas de status e aumentará os números rapidamente.

RESUMO

Se o seu site realmente faz 8 milhões de consultas, uma taxa de E / S de US $ 0,10 por 1 milhão de solicitações deve ser de US $ 0,80 (80 centavos) por mês. Se você executar 1 bilhão de consultas em um mês, esses US $ 100,00. Por favor, tenha certeza absoluta de que esses números se encaixam e entre em contato com seu CFO sentado ao seu lado !!!

UPDATE 2012-05-02 16:26 EDT

Como são 800 milhões de consultas / mês, isso significa US $ 80,00 / mês

RolandoMySQLDBA
fonte
11
Obrigado pela resposta ... eu pretendia digitar 800M, não 8M. Independentemente, você sabe se 1 consulta = 1 E / S?
Se você pudesse responder minha pergunta relacionada aqui, seria ótimo: dba.stackexchange.com/questions/49869/…
Click Upvote
6

Não, uma operação de E / S não é igual a uma consulta. Uma consulta pode resultar em 0 operações de E / S se for tratada pelo cache da consulta (e você tiver sorte) ou pode resultar em várias operações de E / S. Potencialmente, centenas e milhares, eu acho, dependendo das tabelas, índices, consultas e outros detalhes.

http://aws.amazon.com/ebs/ afirma o seguinte:

O armazenamento em volume para volumes padrão é cobrado pelo valor provisionado em GB por mês até a liberação. A E / S de volume para volumes padrão é cobrada pelo número de solicitações feitas ao seu volume. Programas como o IOSTAT podem ser usados ​​para medir o uso exato de E / S do seu sistema a qualquer momento. No entanto, aplicativos e sistemas operacionais geralmente executam níveis diferentes de armazenamento em cache; portanto, para volumes padrão, você provavelmente verá um número menor de solicitações de E / S em sua fatura do que é visto pelo seu aplicativo, a menos que sincronize todas as suas E / Ss no disco .

O iostat é um utilitário linux de baixo nível, que não sabe nada sobre consultas ao banco de dados. http://linux.die.net/man/1/iostat

A citação acima é para o serviço EBS, mas o RDS é baseado no EC2 e no EBS, por isso estou bastante confiante de que eles significam a mesma coisa no RDS.

Ivan Kurmanov
fonte