Я могу получить незаконченные запросы во время транзакции InnoDB?

Я запускаю транзакцию.

Затем я должен откатывать его.

Я могу так или иначе получить список запросов, которые "отбрасываются" этот путь?

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

8
задан o0'. 13 July 2010 в 13:22
поделиться

2 ответа

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

1
ответ дан 6 December 2019 в 00:54
поделиться

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

SHOW ENGINE INNODB STATUS включает список активных транзакций для механизма 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, а затем SELECT @PROGRESS из DUAL в конце вашего запроса, чтобы узнать, как далеко зашла транзакция, прежде чем она достигла откат.

2
ответ дан 6 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: