Spalte Sperren in innodb?
-
27-09-2019 - |
Frage
Ich weiß, das klingt seltsam, aber anscheinend eine meiner Spalten gesperrt ist.
select * from table where type_id = 1 and updated_at < '2010-03-14' limit 1;
select * from table where type_id = 3 and updated_at < '2010-03-14' limit 10;
Die erste wäre nicht zu Ende sogar in ein paar Stunden laufen, während der zweiten abgeschlossen ist glatt. der einzige Unterschied ist die type_id zwischen den zwei Abfragen.
ein wenig Hintergrund, geschraubt die erste Anweisung nach oben, vor dem ich manuell töten musste.
Vielen Dank im Voraus für Ihre Hilfe - ich habe einen dringendes Daten Job zu beenden, und dieses Problem mir treibt verrückt
Lösung
Es scheint, wie Sie haben keinen Index auf (type_id, updated_at) und dem Tisch ist ziemlich groß.
den Index erstellen sollte das Problem beheben:
CREATE INDEX type_updated_idx ON table (type_id, updated_at);
Angenommen, Sie haben genügend Berechtigungen für Datendefinitionsanweisungen zu machen.
Andere Tipps
Haben Sie versucht, eine ANALYZE TABLE
auf der betroffenen Tabelle ausgeführt wird?
Sie können die Umwandlung über zu MyISAM-Tabellen prüfen wollen, wie InnoDB-Tabellen Probleme und Einschränkungen.
Eine Spalte kann nicht gesperrt werden - aber ein Indexbereich kann. Show innodb status
wird in der Regel Ihnen sagt, nach der aktiven Transaktion Sie warten.