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
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:
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.
la source