¿Cómo deshacerse de los problemas de tipo Deadlocks y Lock time out?

17

Leí varios blogs, intenté buscar en Google, pero no encontré ninguna satisfacción con ninguna solución. Tengo los siguientes problemas:

PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: DELETE FROM {cache_field} WHERE (cid LIKE :db_condition_placeholder_0 ESCAPE '\\') ; Array ( [:db_condition_placeholder_0] => field\_info:% ) in cache_clear_all() (line 163 of \includes\cache.inc).

PDOException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction: SELECT 1 AS expression FROM {sessions} sessions WHERE ( (sid = :db_condition_placeholder_0) AND (ssid = :db_condition_placeholder_1) )

Traté de resolver esto aumentando innodb_pool_buffer_sizey wait_timeouten my.ini pero no funcionó.

Cambié el motor de mi tabla de caché de Innodb a MyIasm. El problema desapareció pero no es una solución perfecta. El motor de la tabla se cambiará después de una actualización de drupal. Este problema no afecta nada en el sitio, pero no quiero que esto ocurra.

¿Alguna solución chicos?

Sumit Madan
fuente
¿Estás ejecutando cron periódicamente? ¿Se está completando con éxito?
mpdonadio
Sí, cron se está ejecutando correctamente.
Sumit Madan
¿Qué te hace pensar que el motor de la tabla de caché cambiará al actualizar? Esta no ha sido mi experiencia.
keithm
Quiero decir que si actualizo el drupal, la tabla de caché cambiará de MyIasm a Innodb. ¿¿¿No???
Sumit Madan

Respuestas:

16

Lee y sigue esta publicación ; asume InnoDB.

En particular, vea la parte que dice agregar lo siguiente al archivo settings.php.

$databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");
mikeytown2
fuente
En el enlace de dar, solo está hablando del punto muerto de cache_field. Pero en mi sitio, el tiempo de espera de bloqueo y bloqueo está ocurriendo en todas las tablas de caché.
Sumit Madan
Hola Mike, gracias por el enlace. Revisé tu otra publicación y agregué esto a settings.php $databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");resolvió mi problema en mi servidor local. Todavía no lo revisé en el servidor en vivo. ¿Confirma que no dará ningún problema en el futuro si usted lo prueba? Estoy usando kickstart de comercio.
Sumit Madan
Utilizo todas las recomendaciones en vivo, escuché informes de que drupal.org utiliza lectura comprometida. También asegúrese de utilizar la última versión de d7, ya que también tiene una solución de punto muerto.
mikeytown2 01 de
1
Mikeytown2 Por lo que dices, ¿entendí que ahora las versiones de drupal 7 tienen esto resuelto? preguntándome ya que todavía tengo el mismo problema en la última versión.
Marko Blazekovic
1
@MarkoBlazekovic La mayoría de los principales problemas con el bloqueo se resuelven a medias en D7. Todavía hay algunos problemas de interbloqueo y bloqueo de metadatos con las tablas de caché de la base de datos. Estoy trabajando en un módulo para resolverlos: drupal.org/project/apdqc . APDQC de mis pruebas resuelve casi todos los problemas de bloqueo de la base de datos con respecto a las tablas de caché. Asegúrese de solucionar todos los problemas en el informe de estado una vez que se haya instalado. Tenga en cuenta que el módulo todavía está en desarrollo, ya que aún no he lanzado una versión no dev.
mikeytown2
4

La mejor manera de deshacerse de los errores de punto muerto de una vez por todas es mediante el módulo Asíncrono Prefetch Database Query Cache .

No puedo recomendarlo lo suficiente. Brillantemente escrito y grandes ganancias de rendimiento.

bmunslow
fuente