Eine Sache, die berücksichtigt werden muss, ist, wie MySQL Puffer für seine wichtigsten Speicher-Engines verwendet: InnoDB und MyISAM .
Was im Speicher zwischengespeichert liegt, unterscheidet sich stark zwischen diesen Speicher-Engines.
InnoDB speichert sowohl Daten- als auch Indexseiten zwischen. Sie werden in den InnoDB- Pufferpool geladen, dessen Größe nach innodb_buffer_pool_size bemessen ist .
MyISAM speichert nur Indexseiten zwischen und sie werden in den Schlüsselcache (Schlüsselpuffer) geladen, der die Größe von key_buffer_size hat .
Sie müssen information_schema.tables verwenden , um die auf der Festplatte belegten Daten- und Indexgrößen abzurufen, damit der InnoDB-Pufferpool und der MyISAM-Schlüsselcache korrekt dimensioniert werden können .
Abhängig davon, wie viele Daten Sie haben und wie viel Zeit Sie einplanen, können Sie die Caches wie folgt erwärmen:
Für jede Tabelle TableT
- gehe zu jedem Index NDX
- für jeden Index NDX
- Führen Sie SELECT für jede Spalte in NDX aus, wobei mindestens eine Spalte in TableT von TableT nicht indiziert ist
Auf diese Weise stellen Sie sicher, dass jede Daten- und Indexseite mindestens einmal gelesen wird. Sie werden im Cache sitzen. Dieses Konzept wird teilweise und im Prinzip von Percona praktiziert . Percona baute dieses Konzept in mk-Slave-Prefetch ein . Was dieses Programm macht, ist
- Lesen Sie die Relay-Protokolle auf einem Slave, bevor der Slave das darin enthaltene SQL verarbeitet
- Nehmen Sie eine SQL-Anweisung aus dem Relay-Protokoll und konvertieren Sie sie in eine SELECT-Anweisung, wobei Sie die Klauseln WHERE, GROUP BY und ORDER BY als Leitfaden für die Auswahl von Indizes verwenden
- Führen Sie die SELECT-Anweisung aus, die aus konvertiertem SQL stammt
Dies zwingt den Slave dazu, 99,99% der Daten zu haben, die der Slave benötigt, um die SQL schnell zu verarbeiten. Dies macht den Slave auch für den Fall vorbereitet, dass Sie manuell ein Failover auf den Slave durchführen und ihn zu einem Master hochstufen, dessen Caches genau so sind wie der Master, von dem Sie versagt haben.
FAZIT
Es gibt nichts Schöneres, als Caches bereit, bereit und in der Lage zu haben, sie in einer Umgebung mit schweren INSERTS, UPDATEs und DELETEs zu verwenden.
Versuche es !!!
VORBEHALT
Mit der Geburt von Produkten wie memcached haben sich einige von der Notwendigkeit gelöst, MySQL ordnungsgemäß zu optimieren. Zugegeben, viele Websites profitieren von der Verbesserung des Datenabrufs durch die Steuerung des Caching-Verhaltens von Daten, wie Entwickler mit memcached schnell festgestellt haben. Viele andere Websites haben die gleichen Leistungsvorteile erzielt, indem sie lediglich die Speicher-Engines gewechselt oder MySQL korrekt konfiguriert haben. Machen Sie das Beste aus Ihrer Datenbank, bevor Sie die Datenbank aufgeben und sie ausschließlich als Repository verwenden. Befolgen Sie die Due Diligence und Sie werden angenehm überrascht sein, was MySQL für Sie tun wird.