2013-04-16 2 views
18

Ich habe meine Website auf Amazon EC2 (Region Singapur) veröffentlicht und ich habe MySQL RDS-Instanz für die Datenspeicherung verwendet. Alles funktioniert sehr gut außer der Leistung.Amazon RDS MySQL-Instanz führt sehr langsam

Ich scheint, dass meine alle Abfragen, besonders Select-Anweisung, ist sehr langsam. Wenn ich dieses Problem auf meinem lokalen PC überprüfe, funktioniert es sehr gut. Aber wenn ich versuche, Daten von der RDS-Instanz zu bekommen, ist das sehr langsam. Einige der SELECT-Anweisungen benötigen 2-3 Sekunden zum Abrufen von Daten.

Ich habe alle Tabellenindizes richtig angepasst und nach Bedarf normalisiert/de-normalisiert. Ich habe alle notwendigen Einstellungen an der RDS-eigenen Parametergruppe vorgenommen (z. B. max_connection, Puffer usw.). Ich weiß nicht, ob ich etwas verpasse, aber es hat nicht für mich funktioniert - Leistung hat nicht zugenommen.

Also, kann mir bitte jemand mit diesem Problem helfen?

+0

Nur zum Verständnis .. Welche Instanz verwenden Sie? –

+0

Ich habe das gleiche Problem. Ich habe versucht, RDS mit einem Digital Ocean einzurichten - die Seitenlast (auf DB angewiesen) ging von durchschnittlich 1,8 Sekunden auf 5,9 Sekunden. Also, das gesamte Setup in EC2 & RDS in derselben Region/demselben Cluster und derselben Zeitzone neu erstellt. Ich richte auch Caching ein. –

Antwort

2

RDS MySQL Leistung kann in folgender Weise erhöht werden, um das System unter der Annahme hat mehr lesen Verhältnis:

P1) Verwenden Größere Instanztypen, sie kommen mit einer besseren NW Bandbreite. Beispiel AWS Quadrapule EXL kommt mit 1000Mbps Bandbreite.

P2) Verwendung PIOPS Lagerung können Sie 12.500 IOPS von 16KB von MySQL DB extrahieren

P3) Wenn viele Lese ausgeführt wird, fügen Sie eine oder mehrere Read Replicas Leseleistung

P4) zu erhöhen Standard Nehmen Praktiken wie: Tune die Abfragen, wenden Sie die Indizes usw.

6

Es ist wichtig, Ihre RDS und EC2 Instanzen nicht in der gleichen Region, aber in der gleichen Verfügbarkeitszone, um die Latenz zu minimieren.

Ich hatte eine API in Irland gehostet auf EC2 und verschoben die Datenbank zu einem MySQL-Cluster in Virginia USA, die wir für ein anderes Projekt eingerichtet hatten und die Rundreise bei jeder SQL-Abfrage API unbrauchbar gemacht.

+5

Mit einem RDS und EC2 in der gleichen Verfügbarkeit Zone bedeutet, dass sie in der gleichen Region sind – dvdvck

+1

Sie gerade meinen Monat gemacht –

25

Es ist erwähnenswert, dass der MySQL-Query-Cache aus irgendeinem Grund in RDS standardmäßig deaktiviert ist. Das haben wir diese Woche selbst gelernt.

Dies wird nicht helfen, die Leistung Ihrer ersten Abfrage, aber es kann Dinge im Allgemeinen beschleunigen.

Um Abfrage-Cache wieder zu aktivieren:

  1. Melden Sie sich bei der RDS-Konsole
  2. Klicken Sie auf Ihren RDS-Instanz ist es Details
  3. Bearbeiten der Datenbank-Parametergruppe
  4. Achten Sie darauf, sehen einstellen beide query_cache_size und query_cache_type

(Disclaimer: ich bin kein DBA, so gibt es additio sein kann nal Dinge, die ich bin fehlt hier)

+1

Für InnoDB Tabellen sollten Sie es ausgeschaltet halten. Referenz: https://serverfault.com/questions/604315/is-enverling-mysql-query-cache-size-innodb-lock-safe –

2

Zuerst i

SHOW FULL PROCESS

mit über diese Fragen zu suchen sehr empfehlen Sie mehr darüber lesen auf SHOW FULL PROCESSLIST

Diese zeigt Ihnen die Zeit, die jede Abfrage benötigt.

Dann können Sie

ERKLÄREN

verwenden Sie können mehr darüber lesen auf EXPLAIN

Dies wird Ihnen zeigen, wenn Sie eine gewisse Verstärkung auf Ihre Fragen benötigen

0

I hatte genau das gleiche Problem. Ich denke, das Problem ist, dass MariaDB und MySQL standardmäßig auf InnoDB anstelle von MyISAM setzen! (InnoDB kann nichts ausstehen). Erste Tests zeigen eine 15-fache Verbesserung für meine Abfragen.

0

Sie können überprüfen, wo die Abfrage dauert, indem Sie Profiling verwenden. Verwenden Sie die folgenden Abfrage:

  1. Satz Profilierung = 1
  2. führen Sie Ihre Auswahlabfrage
  3. show profile

Diese werden Sie über den Status der Abfrage sagen und wo die Abfrage verbringt seine Zeit. Wenn die Summe aller von der Profilerstellung zurückgegebenen Zeitpunkte kürzer ist als die tatsächliche Ausführungszeit der Abfrage, können möglicherweise andere Faktoren wie Netzwerkbandbreite die Ursache dafür sein.

0

Für mich hatte das nichts mit MySQL zu tun, sondern mit dem Instanztyp Ich war auf t2.medium. Das Problem ist, dass ich keine CPU-Credits mehr habe, weil die Last auf die DB zu hoch war und das Gleichgewicht immer weiter nach unten ging, bis ich schließlich stündlich weniger Credits bekam, als nötig.

Hier ist, was ich in RDS Cloudwatch unter CPU Kredit Verbrauch sah:

enter image description here

Wenn Sie das gleiche Problem haben kann es an der Zeit zu einer anderen Instanz zu wechseln.Hier ist die Liste der Instanztypen:

https://aws.amazon.com/rds/instance-types/

Hoffnung, das hilft.