Demandes d'E / S Amazon RDS - 1 requête = 1 E / S facturable?

9

J'ai une base de données InnoDB que j'aimerais migrer sur Amazon RDS.

Mon implémentation actuelle, hébergée sur mon propre serveur, affiche environ 8 millions de requêtes par mois.

Le site RDS indique que le taux d'E / S est de 0,10 $ pour 1 million de demandes

1 E / S = 1 requête? autrement dit, serai-je facturé 80 $ / mois pour ce montant d'utilisation + les frais RDS?

Allo
la source

Réponses:

7

AVERTISSEMENT: soyez très prudent avec vos numéros et ce que vous voyez comme une requête !!!

Pourquoi est-ce que je donne un tel avertissement ???

En août 2011, j'ai écrit un article dans ServerFault expliquant comment il était possible d'exécuter 1 milliard de requêtes en 24 jours .

Voici tout ce post:

MySQL appellera des requêtes en interne. En fait, à peu près tout ce que vous faites dans MySQL est une requête.

Si vous activez le journal général ou le journal des requêtes lentes, tout ce que mysqld fait est enregistré.

Si vous avez activé --log-queries-not-using-indexes , tout ce qui n'implique pas d'index se retrouve dans le journal lent.

Disons que vous exécutez cette requête:

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)

Oui, AFFICHER LES BASES DE DONNÉES; est une requête. En fait, qu'est-ce que l'équivalent 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)

La table information_schema.schemata a-t-elle un index ???

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)

Non. Alors, MONTREZ LES BASES DE DONNÉES; atterrirait dans un journal général et le journal lent (avec --log-queries-not-using-indexes activé)

Par conséquent, de nombreuses opérations qui, selon nous, ne constitueraient pas une requête peuvent être simplement une requête, mais internes à mysqld.

Si vous utilisez des outils de surveillance connectés à mysqld, cela augmenterait également le nombre de requêtes.

Exemple:

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)

La simple récupération de la disponibilité de mysqld est une requête. En interne, comment MySQL compte-t-il les requêtes en cours d'exécution? Voici deux variables d'état qui peuvent éclairer:

  • Requêtes : nombre d'instructions exécutées par le serveur. Cette variable comprend des instructions exécutées dans des programmes stockés, contrairement à la variable Questions. Il ne compte pas les commandes COM_PING ou COM_STATISTICS.

  • Questions : Le nombre d'instructions exécutées par le serveur. Cela inclut uniquement les instructions envoyées au serveur par les clients et non les instructions exécutées dans les programmes stockés, contrairement à la variable Queries. Cette variable ne compte pas les commandes COM_PING, COM_STATISTICS, COM_STMT_PREPARE, COM_STMT_CLOSE ou COM_STMT_RESET.

Ne vous inquiétez pas si votre serveur MySQL est surveillé car la surveillance qui appelle des variables d'état exécute des requêtes en interne pour récupérer les données demandées.

1 milliard en 24 jours est

  • 41,7 millions de requêtes par jour
  • 1,736 million de requêtes par heure
  • 28 935 requêtes par minute
  • 482 requêtes par seconde

Pour une instance MySQL qui est surveillée, ces chiffres ne sont pas farfelus du tout.

Si vous utilisez MySQL Workbench, MySQL Administrator ou phpMyAdmin, toute page générée ou mise à jour par ces produits appellera ces petites requêtes d'état et exécutera rapidement les nombres.

SOMMAIRE

Si votre site effectue effectivement 8 millions de requêtes, un taux d'E / S de 0,10 USD par million de demandes devrait être de 0,80 USD (80 cents) par mois. Si vous exécutez 1 milliard de requêtes en un mois, ces 100,00 $. S'il vous plaît assurez-vous absolument que ces chiffres jive et OBTENEZ-LE PAR ÉCRIT AVEC VOTRE CFO SITTING À CÔTÉ DE VOUS !!!

MISE À JOUR 2012-05-02 16:26 EDT

Puisqu'il s'agit de 800 millions de requêtes / mois, cela représente 80,00 $ / mois

RolandoMySQLDBA
la source
1
Merci pour la réponse ... Je voulais taper 800M, pas 8M. Quoi qu'il en soit, savez-vous si 1 requête = 1 E / S?
Si vous pouviez répondre à ma question connexe ici, ce serait formidable: dba.stackexchange.com/questions/49869/…
Cliquez sur Upvote
6

Non, une opération d'E / S ne correspond pas à une requête. Une requête peut entraîner 0 opérations d'E / S si elle est gérée par le cache de requêtes (et vous avez de la chance), ou elle peut entraîner plusieurs opérations d'E / S. Potentiellement, des centaines et des milliers, je suppose, en fonction des tables, des index, des requêtes et d'autres détails.

http://aws.amazon.com/ebs/ indique ce qui suit:

Le stockage de volume pour les volumes standard est facturé selon le montant que vous provisionnez en Go par mois jusqu'à ce que vous le libériez. Les E / S de volume pour les volumes standard sont facturées en fonction du nombre de demandes que vous effectuez sur votre volume. Des programmes comme IOSTAT peuvent être utilisés pour mesurer à tout moment l'utilisation exacte des E / S de votre système. Cependant, les applications et les systèmes d'exploitation effectuent souvent différents niveaux de mise en cache, donc pour les volumes standard, vous verrez probablement un nombre inférieur de demandes d'E / S sur votre facture que celui observé par votre application, sauf si vous synchronisez toutes vos E / S sur le disque .

iostat est un utilitaire Linux de bas niveau, qui ne sait rien des requêtes de base de données. http://linux.die.net/man/1/iostat

La citation ci-dessus concerne le service EBS, mais RDS est basé sur EC2 et EBS, donc je suis assez confiant qu'ils signifient la même chose dans RDS.

Ivan Kurmanov
la source