mysql - remove - ¿Cómo rastrear un error de Drupal max_allowed_packet?
drupal cache tables (2)
Uno de mis sitios de ensayo ha comenzado a arrojar enormes errores en cada página de administrador a lo largo de las líneas de:
User warning: Got a packet bigger than ''max_allowed_packet'' bytes query: UPDATE cache_update SET data = ''
... '', created = 1298434692, expire = 1298438292, serialized = 1 WHERE cid = ''update_project_data'' in _db_query() (line 141 of /var/www/vhosts/mysite/mypath/includes/database.mysqli.inc).
(donde "..." tiene aproximadamente 1,5 millones de caracteres en datos serializados)
¿Cómo debo ir a buscar dónde se origina el error? Sería bueno agregar código de depuración a _db_query, ya que se llama mucho?
No hay necesidad de rastrear esto porque no puedes arreglarlo, creo.
Esta es la memoria caché de update.module, que contiene información sobre qué módulos tienen versiones actualizadas, etc. Así que esto proviene de una de las llamadas "_update_cache_set ()" en ese módulo.
Basándome en una suposición descabellada, diría que es la que está en esta función: http://api.drupal.org/api/drupal/modules--update--update.fetch.inc/function/_update_refresh/6
Básicamente está construyendo una gran variedad de información sobre todos los proyectos en su sitio e intenta almacenarla como un valor único y serializado.
¿Cuántos módulos tienes instalados en este sitio?
Puedo pensar en tres formas de "corregir" este error:
- Aumente el tamaño de max_allowed_packet. (configuración de max_allowed_packet en my.conf)
- Deshabilite update.module (De todos modos, no es tan útil en un sitio de producción / producción, cuando necesita actualizar primero en un sitio de desarrollo)
- Deshabilitar algunos módulos;)
Tuve un error similar y di vueltas y vueltas durante aproximadamente una hora.
Aumentó el límite de memoria a 512m
y todavía tenía el problema. Y pensé que eso era suficiente. Entonces fui a buscar a otro lado.
Limpié los cachés con drush, aún el error, y luego miré las tablas de la base de datos.
Me di cuenta de que todas las tablas de caché se habían borrado, excepto cache_update. Trunqué esta tabla y bam, todo funcionaba normalmente.
Antes de obtener el error de límite de memoria, recibí un error de max_input_vars
ya que estoy en PHP5.4
. Pero esta pregunta y respuesta me llevaron a esta solución. No estoy seguro de cómo o por qué funcionó, pero lo hizo.