WARNUNG: Seien Sie sehr vorsichtig mit Ihren Zahlen und dem, was Sie als Abfrage ansehen !!!
Warum warne ich so ???
Bereits im August 2011 schrieb ich einen Beitrag in ServerFault, in dem erklärt wurde, wie 1 Milliarde Abfragen in 24 Tagen ausgeführt werden können .
Hier ist der ganze Beitrag:
MySQL fordert intern Abfragen an. Tatsächlich ist fast alles, was Sie in MySQL tun, eine Abfrage.
Wenn Sie das allgemeine Protokoll oder das langsame Abfrageprotokoll aktivieren, wird alles aufgezeichnet, was mysqld tut.
Wenn Sie --log-queries-not-using-indexes aktiviert haben, wird alles, was keine Indizes enthält, im langsamen Protokoll gespeichert .
Angenommen, Sie führen diese Abfrage aus:
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)
Ja, DATENBANKEN ANZEIGEN; ist eine Abfrage. In der Tat, was ist das information_schema äquivalent ???
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)
Hat die Tabelle information_schema.schemata einen 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)
Nein, tut es nicht. Also, zeigen Sie Datenbanken; würde in einem allgemeinen Protokoll und dem langsamen Protokoll landen (mit aktivierten --log-Abfragen, die keine Indizes verwenden)
Daher sind viele Operationen, von denen wir nicht glauben, dass sie eine Abfrage darstellen, möglicherweise nur eine Abfrage, aber intern in mysqld.
Wenn Sie Überwachungstools verwenden, die mit mysqld verbunden sind, wird dadurch auch die Anzahl der Abfragen erhöht.
Beispiel:
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)
Nur die Verfügbarkeit von mysqld abzurufen, ist eine Abfrage. Wie zählt MySQL intern die ausgeführten Abfragen? Hier sind zwei Statusvariablen, die Aufschluss geben können:
Abfragen : Die Anzahl der vom Server ausgeführten Anweisungen. Diese Variable enthält Anweisungen, die im Gegensatz zur Variablen Questions in gespeicherten Programmen ausgeführt werden. COM_PING- oder COM_STATISTICS-Befehle werden nicht gezählt.
Fragen : Die Anzahl der vom Server ausgeführten Anweisungen. Dies umfasst im Gegensatz zur Variablen "Abfragen" nur Anweisungen, die von Clients an den Server gesendet werden, und keine Anweisungen, die in gespeicherten Programmen ausgeführt werden. Diese Variable zählt nicht die Befehle COM_PING, COM_STATISTICS, COM_STMT_PREPARE, COM_STMT_CLOSE oder COM_STMT_RESET.
Seien Sie bitte nicht so besorgt, wenn Ihr MySQL Server überwacht wird, da bei der Überwachung, die Statusvariablen aufruft, intern Abfragen ausgeführt werden, um angeforderte Daten abzurufen.
1 Milliarde in 24 Tagen ist
- 41,7 Millionen Anfragen pro Tag
- 1,736 Millionen Anfragen pro Stunde
- 28.935 Anfragen pro Minute
- 482 Abfragen pro Sekunde
Für eine MySQL-Instanz, die überwacht wird, werden diese Nummern überhaupt nicht weit hergeholt.
Wenn Sie MySQL Workbench, MySQL Administrator oder phpMyAdmin verwenden, ruft jede Seite, die diese Produkte generieren oder aktualisieren, diese kleinen Statusabfragen auf und führt schnell Zahlen aus.
ZUSAMMENFASSUNG
Wenn Ihre Site tatsächlich 8 Millionen Anfragen stellt, sollte eine E / A-Rate von 0,10 USD pro 1 Million Anfragen 0,80 USD (80 Cent) pro Monat betragen. Wenn Sie in einem Monat 1 Milliarde Abfragen ausführen, sind dies 100,00 USD. Bitte vergewissern Sie sich unbedingt, dass diese Zahlen stimmen und schreiben Sie mit Ihrem CFO, der neben Ihnen sitzt !!!
UPDATE 2012-05-02 16:26 EDT
Da es sich um 800 Millionen Anfragen / Monat handelt, sind das 80,00 USD / Monat
Nein, eine E / A-Operation entspricht nicht einer Abfrage. Eine Abfrage kann zu 0 E / A-Vorgängen führen, wenn sie vom Abfragecache verarbeitet wird (und Sie haben Glück), oder sie kann zu mehreren E / A-Vorgängen führen. Möglicherweise Hunderte und Tausende, abhängig von den Tabellen, Indizes, Abfragen und anderen Details.
http://aws.amazon.com/ebs/ gibt Folgendes an:
iostat ist ein Linux-Dienstprogramm auf niedriger Ebene, das nichts über Datenbankabfragen weiß. http://linux.die.net/man/1/iostat
Das obige Zitat bezieht sich auf den EBS-Dienst, aber RDS basiert auf EC2 und EBS, daher bin ich ziemlich sicher, dass sie in RDS dasselbe bedeuten.
quelle