Wie optimiere ich die Speichernutzung von MySQL?

9

MEIN SETUP ( Beispiel )

Ich verwende Linux auf einer Amazon High CPU Extra Large EC2-Instanz mit den folgenden Spezifikationen:

  • 7 GB Speicher
  • 20 EC2-Recheneinheiten (8 virtuelle Kerne mit jeweils 2,5 EC2-Recheneinheiten)
  • 1690 GB lokaler Instanzspeicher
  • 64-Bit-Plattform

Ich habe zwei große MySQL-Datenbanken, die auf der MyISAM-Speicher-Engine ausgeführt werden. Einer ist 2 GB und der andere ist 500 MB. Ich möchte sicherstellen, dass MySQL so viel RAM verwendet, wie es kann / muss, um die Abfragegeschwindigkeit zu maximieren. Ich weiß , dass es eine Reihe von MySQL Speicherkonfigurationsoptionen ist wie key_buffer_sizeund MyISAM_sort_buffer_size,aber ich bin nicht vertraut mit diesen zu optimieren.

FRAGEN

  1. Wie kann man überprüfen, welchen Speicher MySQL derzeit auf einem Linux-System verwendet?
  2. Wie maximiert / optimiert man die MySQL-Speichernutzung?
  3. Angenommen, meine Abfragen und mein Schema sind optimiert. Welche weiteren Änderungen sollte ich berücksichtigen?
T. Brian Jones
quelle
Sie können mit htop Programm überprüfen.
Neworld
Durch Maximieren der Speichernutzung wird nicht die gesamte Datenbank in den Speicher verschoben. Sie müssen RAM-basiertes Dateisystem haben ...
4
RAM-basiertes Dateisystem ist unsicher. Wenn der Server abstürzt, gehen alle Daten verloren
neworld

Antworten:

7

Dies ist ein schwieriges Thema. Kann hier nicht beantwortet werden, ganze Bücher wurden darüber geschrieben. Ich empfehle, Ihre innodb_buffer_pool_size groß genug zu machen. Wenn Sie Myisam-Tabellen verwenden, überprüfen Sie key_buffer_size. Auch table_cache und max_connections sollten berücksichtigt werden.

Hier ist etwas, das Ihnen helfen kann:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- Grundlagen der Leistungsoptimierung / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

BEARBEITEN:

Wie @ draw010 sagte, ist es wichtig, die Art der Verwendung der Datenbank zu berücksichtigen. Das Tunning für eine DB mit starkem Lesevorgang unterscheidet sich stark von einem DB mit starkem Lesevorgang. Sie können auch andere Strategien in Betracht ziehen. Wie Memcached, NOSQL-Datenbanken usw.

santiago.basulto
quelle
2
Einverstanden sind sie zu relativ kleine Datenbanken. Wenn Sie eine Menge Lesezugriff auf die Datenbank erwarten, können Sie eine Art Caching-System wie memcached in Betracht ziehen, mit dem Ihre Anwendung Werte aus der Datenbank speichern kann, um Treffer in der Datenbank zu reduzieren. Wenn Sie hauptsächlich Einfügungen vornehmen, wird die Festplatte ein sehr wichtiger Faktor sein. Bis zu einem gewissen Grad hängt die Frage von Ihren Anwendungsfällen ab. Wenn sich die Daten nicht wesentlich ändern, sollte der MySQL-Abfrage-Cache auch bei schnelleren Abfragen sehr hilfreich sein. Stellen Sie außerdem sicher, dass Ihre Indizes / Primärschlüssel gut sind.
zog010
+1 Du bist der richtige Bruder. Ich nahm an, dass er nach grundlegendem Tunning fragte, aber es ist wichtig, die Verwendung der DB und andere Dinge in Betracht zu ziehen. Auch hier kann ich nicht diskutieren, denke ich.
Santiago.basulto
1

Wenn Sie sicher sein müssen, dass MySQL den gesamten benötigten Speicher verwendet, müssen Sie zu InnoDB wechseln. Wenn Sie nicht die MySQL- FULLTEXTSuchfunktionen verwenden, treten keine ernsthaften Probleme auf.

Im Falle von MyISAM werden eine Reihe von Caches verwendet, einschließlich interner MySQL-Schlüsselpuffer und Systemcache. Wenn Sie die beste Leistung erzielen möchten, müssen Sie Platz für einen der Caches lassen. Ich empfehle MyISAM jedoch nicht für diesen Zweck, insbesondere wenn Ihre Datenbanken schreibintensiv sind: MyISAM sperrt die gesamte Tabelle beim Schreiben, während InnoDB nur betroffene Zeilen sperrt.

Selbst wenn Sie alle Ihre Datenbanken in den Speicher stellen, können Sie aufgrund unzureichender Indizes oder aus anderen Gründen langsam laufende Abfragen haben.

Sanmai
quelle