2016-10-25 2 views
0

ich mit Datenbanken NEWB, also was ich habe:MySql InnoDB mögliche Leistungsprobleme

  • Eine Tabelle ~ 75GB. (InnoDB)
  • 10 GB Indizes drin.
  • hohe Verkehr

Nach einem paar billigen Auswahlabfragen I INSERT-Abfrage und anderen ausgewählten der gegen diesen großen Tisch.

Frage: Bei jedem Einfügen wird es neu indiziert und es kann die Tabelle/oder Zeile sperren oder was? Wie wird es sich bei hohem Traffic auswirken, wenn mehrere Anfragen gleichzeitig sind?

Antwort

0

Indizes sind inkrementell aktualisiert. Es besteht keine Notwendigkeit, über diesen Prozess nachzudenken; es passiert im 'Hintergrund'. Die Indizes sind immer aktuell; Das heißt, ein SELECT wird in der Lage sein, eine frisch eingefügte Zeile so einfach wie eine alte Zeile zu finden.

Wenn Sie mehr als, sagen wir, 100 INSERTs pro Sekunde bekommen, schauen wir uns die Details an. (SHOW CREATE TABLE, tatsächliche INSERT, etc)

In der Zwischenzeit sollten tausend Punktabfragen kein Problem sein. (Das ist SELECT einer einzelnen Zeile, die indiziert wird.)

Hohe Traffic ... "Günstige Abfragen" sind oft so schnell, dass selten zwei gleichzeitig ausgeführt werden. Selbst tausend Abfragen pro Sekunde können selten mehr als ein paar gleichzeitig ausführen. Lange laufende Abfragen sind eine andere Sache.

Ein paar Dutzend aktiv laufende Verbindungen ist 'heavy' Verkehr. Lassen Sie uns an dieser Stelle die am längsten laufenden Abfragen betrachten und sehen, ob wir sie beschleunigen können.

Je nach RAM-Größe und innodb_buffer_pool_size und abhängig von den Zugriffsmustern kann Ihre große Tabelle oder nicht E/A-gebunden sein. UUID-/GUID-Indizes sind dafür bekannt, dass sie zu I/O-Trägheit führen. Ein "log" oder "news", bei denen Sie hauptsächlich "neuere" Zeilen betrachten, haben einen "Ort der Referenz", der zu sehr effizientem Caching führt - daher spielt die Tabellengröße gegenüber dem RAM keine Rolle.