Kann ich ausstehende Abfragen während einer InnoDB-Transaktion abrufen?

8

Ich starte eine Transaktion.

Dann muss ich es zurücksetzen.

Kann ich irgendwie eine Liste der Abfragen erhalten, die auf diese Weise "verworfen" werden?

(ps: natürlich Ich kann sie vorher einloggen; ich habe mich gefragt, ob das auf eine "natürlichere" Weise gemacht werden könnte)

    
o0'. 03.07.2010, 16:44
quelle

2 Antworten

2

Wenn Sie auf einem aktuellen MySQL 5.1 sind, sollte dies funktionieren:

SHOW ENGINE INNODB STATUS enthält eine Liste aktiver Transaktionen für die InnoDB-Engine. Jedem wird eine Transaktions-ID und eine Prozess-ID vorangestellt und sieht etwa so aus:

%Vor%

Die MySQL-Thread-ID entspricht der CONNECTION_ID () Ihrer Sitzung, die Sie von SHOW FULL PROCESSLIST oder information_schema.processlist abrufen können, damit Sie bestimmen können, welche Transaktion Ihre ist. Sie müssen den Text parsen und die Abfrage analysieren, falls sie vorhanden ist.

Wenn das nicht genug ist, können Sie etwas wie SET @ PROGRESS = @ PROGRESS + 1 vor jeder ROLLBACK-Anweisung und dann SELECT @PROGRESS von DUAL am Ende Ihrer Abfrage ausprobieren, um herauszufinden, wie weit die Transaktion ging, bevor sie auftrat ein Rollback.

    
Ryan M 14.07.2010 16:51
quelle
1

Wenn Sie InnoDB verwenden, werfen Sie einen Blick auf den InnoDB-Monitor und stderr. Ich denke, dass es am besten ist, sie in der Anwendung (Server) zu speichern, da sie nicht von der Plattform abhängig ist.

    
Marcus Adams 13.07.2010 15:12
quelle

Tags und Links