Ich habe eine RDS-Instanz, die mich viel Geld kostet. Aus meiner Kontoaktivität bei Amazon geht hervor, dass die Instanz in den letzten 7 Tagen etwa 800.000.000 E / A-Anfragen hatte.
Um Ihnen eine kleine Perspektive zu geben, meine App erhält nur ungefähr 6.000 eindeutige Besuche pro Tag und stellt nicht so viele Datenbankverbindungen her.
Was genau ist eine E / A-Anfrage und warum sollte diese Zahl so unheimlich hoch sein? Ich bin bereit, alles in meiner App zu tun, um diese Kosten bei Bedarf zu senken, bin mir aber nicht sicher, was wirklich los ist.
Ich würde mich über Ihre Gedanken freuen.
mysql
io
amazon-rds
Abe
quelle
quelle
Antworten:
Ah, Amazon Web Services. Einer der größten verfügbaren Geldsenker. Sehr gut, aber nicht immer billig. Eigentlich fast nie billig und immer schwer abzuschätzen.
Eine E / A-Anforderung ist eine Plattenoperation. Sei es ein Lesen oder ein Schreiben, Sie werden im Grunde genommen damit belastet, wie viele Daten Sie von ihrem System erhalten. Es ist verrückt.
Sie können die von Ihnen gestellten E / A-Anforderungen anhand von iostat abschätzen.
800.000.000 IO-Anfragen in 7 Tagen. Das sind ~ = 1300 IOPS. Wow. Das ist eine böse Leistung.
Wenn Sie wirklich reduzieren möchten, was Sie dies kostet, ist es möglicherweise an der Zeit zu prüfen, ob RDS wirklich am besten zu Ihrer Anwendung und Ihrem Projektbudget passt.
Wenn Sie nur 6.000 Treffer pro Tag haben, können Sie Kosten und Leistung mit einem dedizierten Server verbessern (vorzugsweise 2 von ihnen, einer für DB, einer für Webdienste). Es ist tatsächlich etwas schwieriger, diesen Anruf zu tätigen, da Sie nicht zu viel mehr über Ihre Anwendung gesagt haben.
quelle
"Cloud-Dienste" bedeuten nicht, dass Dinge Sie ein paar Cent kosten werden. Grundsätzlich ist eine E / A-Anforderung alles (dh eine Datenbank oder eine Indexseite), das von der Festplatte abgerufen werden musste. Wenn Sie über eine große Datenbank und Abfragen mit vollständigen Tabellenscans verfügen, ist dies keineswegs überraschend. Sie können nach Abfragen suchen, bei denen nicht indizierte Spalten zum Filtern verwendet werden, indem Sie die Option aktivieren , die "nicht indizierten" Abfragen im langsamen MySQL-Protokoll zu protokollieren und Indizes für die entsprechenden Spalten hinzuzufügen. Da Sie die Konfigurationsdatei nicht direkt bearbeiten können, verwenden Sie die RDS-Parametergruppenkonfiguration , um
log-queries-not-using-indexes
diemysql.slow_log
Tabelle festzulegen und nach Protokolleinträgen abzufragen .Erwägen Sie außerdem, das MySQL-Tuning-Primer-Skript von Ihrer AWS-Instanz für die Datenbankinstanz für eine allgemeine Leistungsanalyse auszuführen, um festzustellen, ob eine größere Instanz aufgrund einer größeren Menge an Speicher, die für das Caching verfügbar ist, hilfreich ist, um die Belastung der Festplatte zu verringern. Das Skript wertet eine Reihe von Konfigurationsparametern und Leistungsindikatoren aus, um Informationen zu möglichen Engpässen und allgemeine Empfehlungen zu erhalten.
quelle
&
zu seinem Code hinzugefügt habe . Es ist klar, dass niemand jemals ein Profil erstellt hat.)