Cambiar aislamiento de transacciones en Drupal (evitar warning READ COMMITTED)

jandira-sonnendeck-AcW1ZwD-qC0-unsplash.jpg
Solucionex
15
Jul 22

A partir de Drupal 9.5, se empezará a emitir una alerta en el informe de estado de que la base de datos debería estar usando "READ COMMITTED" como nivel de aislamiento de transacciones (por defecto, MySQL / MariaDB usan “REPEATABLE READ”).

Puede verse el change record aquí.

A continuación, se muestran un par de maneras de cambiar el nivel de manera permanente:

Arrancar la base de datos con el atributo "--transaction-isolation=READ-COMMITTED"

Esta es la manera más rápida de hacerlo si se usa docker. Ejemplo para docker-compose (archivo docker-compose.yml):

db:
    image: mysql:8
    command: --transaction-isolation=READ-COMMITTED
...

Nota: Puede usarse junto a otros atributos. Ejemplo:

db:
    image: mysql:8
    command: --default-authentication-plugin=mysql_native_password --transaction-isolation=READ-COMMITTED
...

Archivo de configuración

Puede añadirse un archivo de configuración con el siguiente contenido:

[mysqld]
transaction-isolation = READ-COMMITTED

Esta opción es la más sencilla para cuando se usa una bd en nativo o DDEV.

  • Ubicación del archivo en DDEV: .ddev/mysql/[NOMBRE].cnf
  • Ubicación del archivo en nativo (varias posibilidades): /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

Manera de comprobar el nivel de aislamiento actual

Una vez dentro de la consola de MySQL / MariaDB puede comprobarse con show variables like '%isolation%';

MySQL [db]> show variables like '%isolation%';
+-----------------------+----------------+
| Variable_name         | Value          |
+-----------------------+----------------+
| transaction_isolation | READ-COMMITTED |
+-----------------------+----------------+

Hostings

Algunos hostings no permiten cambiar el nivel de aislamiento personalmente. Una manera de salvar este escollo es añadiendo la declaración en el array de conexión a bd en el settings*.php:

'init_commands' => [
  'isolation_level' => 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
],

Eso sí, hay que tener en cuenta que eso es una llamada más a la bd en cada petición a la web.

Imagen de cabecera: Jandira Sonnendeck de Unsplash