Configurando MySQL transaction isolation level

MySQL transaction isolation level
Solucionex
20
Oct 23

En esta publicación, vamos a sumergirnos en un aspecto técnico esencial de la configuración de Drupal: el nivel de aislamiento de transacciones MySQL. Este elemento clave es vital para garantizar la integridad de los datos y la consistencia del sitio web.

En primer lugar, es importante comprender la importancia del nivel de aislamiento de transacciones en el contexto de Drupal. Este parámetro determina cómo las transacciones interactúan entre sí y con el resto del sistema. Asegurarse de que esté configurado correctamente puede ayudar a evitar problemas potenciales, como lecturas no repetibles, lecturas sucias y conflictos de escritura.

Drupal generará una advertencia en la página del informe de estado (admin/reports/status) cuando se utilice una base de datos MySQL, MariaDB o equivalente con el nivel de aislamiento de transacciones establecido en "REPEATABLE READ". Para evitar esto, debemos configurarlo correctamente en "READ COMMITTED". Existen diferentes formas de configurarlo:

NOTA: transaction_isolation se agregó en MySQL 5.7.20 como alias para tx_isolation, que ahora está en desuso y se eliminó en MySQL 8.0. Por lo tanto, si está utilizando MariaDB o MySQL 5.7.19 o una versión anterior, utilice tx_isolation pero si está utilizando MySQL 5.7.20 o superior utilice transaction_isolation.

 

  • La primera es ejecutar (con privilegios de superusuario) una consulta de base de datos que establece el nivel de aislamiento de transacciones para cada sesión en la base de datos. La consulta es: SET GLOBAL tx_isolation='READ-COMMITTED'; o SET GLOBAL transaction_isolation='READ-COMMITTED';
  • La segunda consulta (con privilegios de superusuario) que nos permite cambiar el nivel de aislamiento de transacciones es: SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
  • También es posible cambiarlo mediante el archivo de configuración MySQL en la sección [mysqld]: tx_isolation="READ-COMMITTED"
  • Otra forma es editando el archivo 'settings.php' que se encuentra en 'sites/default/settings.php'. En este archivo encontraremos un array como este:

    $databases['default']['default'] = array(
     'database' => 'databasename',
     'username' => 'sqlusername',
     'password' => 'sqlpassword',
     'host' => 'localhost',
     'driver' => 'mysql',
     'prefix' => '',
     'port' => '3306',
    ); 

    Deberemos añadir al final del array lo siguiente:

    'init_commands' => [
       'isolation_level' => 'SET SESSION tx_isolation=\'READ-COMMITTED\'',
     ],

    Aunque configurarlo con este método tiene la desventaja de que en cada solicitud de página se establece el nivel de aislamiento de transacciones, es decir, es una llamada adicional a la base de datos por cada solicitud de página.
     

Para confirmar que se ha configurado correctamente ejecutamos el siguiente comando de mysql: show variables WHERE Variable_name LIKE "%_isolation";

Debería de mostrar la siguiente salida:

mysql> show variables WHERE Variable_name LIKE "%isolation";
+-----------------+-----------------+
| Variable_name   | Value           |
+-----------------+-----------------+
| tx_isolation    | READ-COMMITTED  |
+-----------------+-----------------+
1 row in set (0.00 sec)

Recuerda que configurar el nivel de aislamiento de transacciones MySQL puede marcar la diferencia en el rendimiento y la estabilidad de su sitio web de Drupal. Aunque puede parecer una tarea técnica, comprender estos aspectos puede ayudar a evitar posibles problemas en el futuro y garantizar una experiencia de usuario óptima.

 

Fuente: https://www.drupal.org/docs/getting-started/system-requirements/setting…