2016-10-23 3 views
1

Ich habe eine große MySQL-Datenbank, die große Mengen von Abfragen empfängt, dauert jede Abfrage etwa 5-10 Sekunden.Concurrent mysql Abfragen verursacht große Query Queue

Abfragen umfassen das Überprüfen von Datensätzen, das Aktualisieren von Datensätzen und das Hinzufügen von Datensätzen.

Ich habe einige erhebliche Engpässe in den Abfrageausführungen, was meiner Ansicht nach darauf zurückzuführen ist, dass eingehende Anfragen "in Warteschlange" gestellt werden, während aktuelle Abfragen Datensätze verwenden, auf die diese eingehenden Abfragen zugreifen müssen.

Gibt es einen Weg, neben der kompletten Neuformatierung meiner Datenbankstruktur und SQL-Abfragen, die gleichzeitige Verwendung von Datenbankeinträgen durch Abfragen zu ermöglichen?

Antwort

1

Ein INSERT-, UPDATE- oder DELETE-Vorgang sperrt die relevanten Tabellen - myISAM - oder Zeilen - InnoDB -, bis der Vorgang abgeschlossen ist. Seien Sie sicher, dass Ihre Abfrage dieser Art fastly verpflichtet sind .. und auch chechck für Sie den Teil transacation Isolierung mit relevanten suchen ..

Für MySQL interne Verriegelung siehe: https://dev.mysql.com/doc/refman/5.5/en/internal-locking.html

Auch remeber dass in MySQL gibt es differente Speicher Motor mit unterschiedlichen Eigenschaften, zB:

die Speicher-Engine MyISAM gleichzeitige Einsätze unterstützt Streit zwischen Leser und Schreiber für eine bestimmte Tabelle zu reduzieren: Wenn eine MyISAM Tabelle keine Löcher in der Datendatei (gelöschten Zeilen in der Mitte hat), ein INSERT-Anweisung kann ausgeführt werden, um Zeilen zum Ende der Tabelle hinzuzufügen, während SELECT-Anweisungen Zeilen aus der Tabelle lesen. https://dev.mysql.com/doc/refman/5.7/en/concurrent-inserts.html

nehmen schließlich einen Blick auf https://dev.mysql.com/doc/refman/5.7/en/optimization.html