Если кому-то будет интересно, то сообщаю, что использование PDOStatement::execute вместо PDO::commit в моем случае решило проблему.
На примере фреймворка yii2/
Было:
$transaction = \Yii::$app->db->beginTransaction();
try {
...
$transaction->commit();
} catch (\Exception $exception) {
$transaction->rollBack();
throw $exception;
}
Стало:
\Yii::$app->db->createCommand('BEGIN TRANSACTION')->execute();
try {
...
\Yii::$app->db->createCommand('COMMIT TRANSACTION')->execute();
} catch (\Exception $exception) {
\Yii::$app->db->createCommand('ROLLBACK TRANSACTION')->execute();
throw $exception;
}
Не совсем конечно красиво, и до конца не уверен, что это работает во всех случаях. Но все равно лучше чем искусственная задержка