Amazon RDS-E / A-Anforderungen - 1 Abfrage = 1 abrechnungsfähige E / A?

9

Ich habe eine InnoDB-Datenbank, die ich auf Amazon RDS migrieren möchte.

Meine aktuelle Implementierung, die auf meinem eigenen Server gehostet wird, zeigt ungefähr 8 Millionen Abfragen pro Monat.

Die RDS-Site gibt an , dass die E / A-Rate 0,10 USD pro 1 Million Anfragen beträgt

Ist 1 E / A = 1 Abfrage? dh werden mir 80 USD / Monat für diesen Nutzungsbetrag + die RDS-Gebühren in Rechnung gestellt?

Allo
quelle

Antworten:

7

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

RolandoMySQLDBA
quelle
1
Danke für die Antwort ... Ich wollte 800M eingeben, nicht 8M. Wissen Sie unabhängig davon, ob 1 Abfrage = 1 E / A ist?
Wenn Sie meine verwandte Frage hier beantworten könnten, wäre es großartig: dba.stackexchange.com/questions/49869/…
Klicken Sie auf Upvote
6

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:

Der Volumenspeicher für Standard-Volumes wird mit dem Betrag berechnet, den Sie in GB pro Monat bereitstellen, bis Sie ihn freigeben. Volume I / O für Standard-Volumes wird anhand der Anzahl der Anforderungen berechnet, die Sie an Ihr Volume stellen. Programme wie IOSTAT können jederzeit verwendet werden, um die genaue E / A-Nutzung Ihres Systems zu messen. Anwendungen und Betriebssysteme führen jedoch häufig unterschiedliche Caching-Ebenen aus. Bei Standardvolumes wird daher wahrscheinlich eine geringere Anzahl von E / A-Anforderungen auf Ihrer Rechnung angezeigt als von Ihrer Anwendung, es sei denn, Sie synchronisieren alle Ihre E / A mit der Festplatte .

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.

Ivan Kurmanov
quelle