Hallo,
ich habe hier das Problem, dass ich mehr oder weniger viele Deadlocks bekomme, wobei immer wieder ein bestimmtes Statement beteiligt ist. Dieses Statement steht in einer Procedure, die relativ häufig aufgerufen wird und ein paar Statusvariablen usw. ermittelt. Dabei ist es aber eigentlich relativ egal, ob die nun absolut exakt sind und konsistent, weil nach wenigen Augenblicken wird die ja wieder aufgerufen. Diese Werte ändern sich also ohnehin permanent, und es wäre sogar ok, wenn die Werte eben mal gar nicht ermittelt werden, wenn es Probleme gibt. Das andere beteiligte Statement ist da schon wichtiger (Ein UPDATE in table2). Blöderweise wird nur immer dieses dann zurückgesetzt.
Das weniger wichtige Statement ist eines der Art
UPDATE table1 LEFT JOIN (SELECT * FROM table2) tab2 ON table1.field = tab2.field SET ...
Es steht in keiner Transaktion bzw. in keiner, die mehrere Statements umfasst.
Der Lock ist immer auf dem PK von table2. Ich habe jetzt schon ein SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED vor dem Aufruf dieses UPDATEs gesetzt, aber da die Deadlocks nach wie vor auftreten, nehme ich an, dass das gar nicht wirkt bei einem SELECT, wenn das doch Teil eines UPDATEs ist.
Gibt es irgendeine Möglichkeit, diese Werte zu ermitteln und dem Server dabei zu sagen, dass er keine Locks oder Sperren setzen soll oder dass meinetwegen superaktuelle oder konsistente Zahlen an der Stelle gar nicht so wichtig sind?
Würde mich über ein paar Tips freuen, Dankeschön ...
Dave
ich habe hier das Problem, dass ich mehr oder weniger viele Deadlocks bekomme, wobei immer wieder ein bestimmtes Statement beteiligt ist. Dieses Statement steht in einer Procedure, die relativ häufig aufgerufen wird und ein paar Statusvariablen usw. ermittelt. Dabei ist es aber eigentlich relativ egal, ob die nun absolut exakt sind und konsistent, weil nach wenigen Augenblicken wird die ja wieder aufgerufen. Diese Werte ändern sich also ohnehin permanent, und es wäre sogar ok, wenn die Werte eben mal gar nicht ermittelt werden, wenn es Probleme gibt. Das andere beteiligte Statement ist da schon wichtiger (Ein UPDATE in table2). Blöderweise wird nur immer dieses dann zurückgesetzt.
Das weniger wichtige Statement ist eines der Art
UPDATE table1 LEFT JOIN (SELECT * FROM table2) tab2 ON table1.field = tab2.field SET ...
Es steht in keiner Transaktion bzw. in keiner, die mehrere Statements umfasst.
Der Lock ist immer auf dem PK von table2. Ich habe jetzt schon ein SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED vor dem Aufruf dieses UPDATEs gesetzt, aber da die Deadlocks nach wie vor auftreten, nehme ich an, dass das gar nicht wirkt bei einem SELECT, wenn das doch Teil eines UPDATEs ist.
Gibt es irgendeine Möglichkeit, diese Werte zu ermitteln und dem Server dabei zu sagen, dass er keine Locks oder Sperren setzen soll oder dass meinetwegen superaktuelle oder konsistente Zahlen an der Stelle gar nicht so wichtig sind?
Würde mich über ein paar Tips freuen, Dankeschön ...
Dave
Comment