Ich führe gleichzeitig Postgres-Abfragen wie folgt aus:
UPDATE foo SET bar = bar + 1 WHERE baz = 1234
Jede Abfrage wirkt sich auf die feste K-Anzahl von Zeilen aus, und ich kann keine Möglichkeit finden, die Reihenfolge zu erzwingen, in der die Zeilen aktualisiert werden. Am Ende habe ich Deadlocks. Derzeit behebe ich das Problem, indem ich die Reihenfolge von Hand erzwinge. Dies bedeutet jedoch, dass ich viel mehr Abfragen ausführen muss als normalerweise, während gleichzeitig die Suchkomplexität von O (log N + K) auf O (K log N) erhöht wird.
Gibt es eine Möglichkeit, die Leistung zu verbessern, ohne anfällig für Deadlocks zu werden? Ich vermute, dass das Ersetzen des (baz)
Index durch den (baz, id)
Index funktionieren könnte, vorausgesetzt, Postgres aktualisiert die Zeilen in derselben Reihenfolge, in der sie gescannt wurden. Ist dies ein Ansatz, den es sich zu verfolgen lohnt?
CREATE TABLE
Code hinzu.