Доктрина, изменяющая уровень изоляции транзакций

Я хотел бы изменить уровень изоляции транзакций для всех запросов/обновлений базы данных mysql на Read Committed. Поскольку мы используем базу данных приложения Google, мы не можем изменить ее в конфигурации mysql и, следовательно, должны изменить ее в соединении с базой данных.

Мы используем Doctrine и Symfony3, и я изо всех сил пытаюсь понять, как этого можно добиться, кроме выдачи такой команды, как

 $this->getEntityManager()->getConnection()->prepare('SET TRANSACTION ISOLATION LEVEL READ COMMITTED')->execute();

Я почти уверен, что есть некоторая поддержка для изменения изоляции транзакций, но я не могу понять, как этого добиться.


person Xrender    schedule 14.01.2020    source источник


Ответы (1)


https://www.doctrine-project.org/projects/doctrine-dbal/en/2.10/reference/transactions.html документы:

Doctrine\DBAL\Connection также имеет методы для управления уровнем изоляции транзакций, поддерживаемым базовой базой данных. Для этой цели можно использовать Connection#setTransactionIsolation($level) и Connection#getTransactionIsolation(). Возможные уровни изоляции представлены следующими константами:

См. в документации список констант для уровней изоляции.

Таким образом, вы можете запускать это при каждом соединении:

$this->getEntityManager()->getConnection()->setTransactionIsolation($level);

Если вы хотите, чтобы это было значение по умолчанию, чтобы вам не нужно было устанавливать его при каждом подключении, вам нужно будет установить его в файле my.cnf сервера MySQL. См. https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_transaction_isolation

Если вы не можете изменить my.cnf глобально, вам придется установить его самостоятельно для каждого соединения, используя строку кода, как показано выше.

person Bill Karwin    schedule 14.01.2020
comment
Спасибо, Билл - в Symfony файл доктрины.yaml используется для настройки соединения, возможно, я неправильно понимаю, но неясно, как я могу настроить приложение, чтобы всегда устанавливать изоляцию транзакций при соединении. - person Xrender; 14.01.2020