Могу ли я получить ожидающие запросы во время транзакции InnoDB? - PullRequest
8 голосов
/ 03 июля 2010

Я начинаю транзакцию.

Затем мне нужно откатить ее.

Можно ли как-нибудь получить список запросов, которые "отбрасываются" таким образом?

(ps: конечно Я могу записать их заранее; мне было интересно, можно ли это сделать более "естественным" способом)

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

Если вы используете последнюю версию MySQL 5.1, это должно работать:

ПОКАЗАТЬ ДВИГАТЕЛЬ СТАТУС INNODB содержит список активных транзакций для механизма InnoDB.Каждый имеет префикс с идентификатором транзакции и идентификатором процесса и выглядит примерно так:

---TRANSACTION 0 290328284, ACTIVE 0 sec, process no 3195, OS thread id
34831 rollback of SQL statement
MySQL thread id 18272
<query may be here>

Идентификатор потока MySQL будет соответствовать CONNECTION_ID () вашего сеанса, который вы можете получить из SHOW FULL PROCESSLISTили information_schema.processlist, чтобы вы могли определить, какая транзакция принадлежит вам.Вам придется проанализировать текст и разобрать запрос, если он присутствует.

Если этого недостаточно, вы можете попробовать что-то вроде SET @PROGRESS = @PROGRESS + 1 перед каждым оператором ROLLBACK,а затем ВЫБЕРИТЕ @PROGRESS из DUAL в конце вашего запроса, чтобы узнать, как далеко прошла транзакция, прежде чем она достигла отката.

1 голос
/ 13 июля 2010

Если вы используете InnoDB, взгляните на InnoDB monitor и stderr. Я думаю, что лучше всего хранить их в приложении (на сервере), так как это не будет зависеть от платформы.

...