mysql Lock wait timeout exceeded; try restarting transaction ...
Зачем нужно перезапускать транзакцию?
Например.
select * from Foo for update
Это должен быть откат на уровне оператора. Транзакцию не следует откатывать, поскольку оператор ничего не сделал с транзакцией.