Ich habe eine MySQL m2.2xlarge Instanz auf AWS. Das MySQL-Datenverzeichnis befindet sich im Root-EBS /. Es ist ein einzelnes EBS nicht RAID. Wir haben drei Haupttabellen. Einer von ihnen Table C
, der größte Inhalt, wird nur die letzten Tage der Daten verwendet. Die Insert-Rate in diesen Tabellen beträgt ungefähr 80.000 Zeilen A DAY. Die 3 Tabellen haben rund 42 Millionen Zeilen. Die innodb_buffer_pool_size hat ~ 30 GB des Instanz-RAM.MySQL auf EC2/EBS. Zu langsam?
Table A
das wichtigste ist, ist die Datenlänge ~ 33GB und Index ~ 11GB Table B
Datenlänge ~ 8 GB und Index ~ 5GB
Auf unserer Website die beiden Hauptanfragen (Latenz weise) hat, sind dies wie: unter < 50 ms jeweils
SELECT * FROM TableA WHERE id in (.....)
SELECT * FROM TableB JOIN .... WHERE id in (.....)
In den meisten Seiten der (...) werden einige ~ 50 letzten ids mit diesen Abfragen sein. Aber auf einigen anderen Seiten treffen wir auf ältere IDs und die Latenz für diese Abfragen steigt auf 500ms, 800ms, bis zu 1,5 Sekunden.
Ich habe einen Test gemacht, wo ich nach einem Mysql-Neustart eine SELECT id FROM TableB
gemacht habe, um den Index in den Cache/Speicher zu zwingen. Die Abfrage wäre immer noch langsam. Dann habe ich eine SELECT * FROM TableB
gemacht. Und jetzt, mit der ganzen Tabelle im Cache/Speicher, werden die Abfragen sehr schnell (< 50ms).
Meine Frage:> 500 ms,> 1000ms ist eine angemessene Latenz für eine Abfrage, die Zeilen nur durch PRIMARY KEY abruft? Sogar in einer 42M-Tabelle? Selbst wenn alle Zeilen auf der Festplatte liegen? Es scheint zu viel für mich.
Würde das Verschieben von MySQL-Daten in ephemeren Speicher (/ mnt) dies verbessern? Wäre die Verwendung von Provisioned IOPS hilfreich?
Sind Sie mit einem einzigen EBS-Datenträger oder ein RAID war gesetzt? Die Verwendung von/mnt kann ohne solide Replikation etwas riskant sein. Sie können Provisioned IOPS ohne so viel Kosten für Sie testen. – datasage
Einzelnes EBS. Ich denke, ich kann nicht zu bereitgestellten IOPS wechseln, ohne den gesamten Datensatz auf ein neues EBS-Volume zu legen. Also möchte ich zuerst ein wenig wissen, ob sich die Arbeit des Umzugs lohnt. –
Ich denke, Sie können Ihr Volumen snapshop und erstellen Sie eine neue aus dem Snapshop mit bereitgestellten IO. Dann an eine neue Instanz anhängen, um es zu testen. Das Schöne an ec2 ist die Flexibilität, neue Instanzen bereitzustellen, um Leistungsänderungen zu testen, ohne sich dazu verpflichten zu müssen. – datasage