enterprise_refresh_index Sleeping MySQL Connection

8

Hay momentos en que el indexador que ejecuta cron parece atascarse en MySQL, ya que se pueden ver conexiones inactivas. Indexer funciona durante varias horas y esto en realidad no se ejecuta en absoluto. He buscado esto pero no pude encontrar ninguno relacionado. ¿Alguien que pueda arrojar una luz? Posiblemente configuración del servidor o error de Magento?

usuario1240207
fuente

Respuestas:

0

¿Estás usando conexiones persistentes? ¿Cuántas conexiones para dormir tienes? ¿Cuál es la cantidad máxima de conexiones que su servidor DB está configurado para permitir?

Para verificar cuántas conexiones inactivas acaba de ejecutar:

show full processlist;

Para ver la ejecución de max_ connections:

show variables like 'max_connections';

Creo que las conexiones inactivas no son el problema, mysqld agotarán las conexiones inactivas basadas en 2 valores:

interactive_timeout wait_timetout

Ambos son 28800 segundos (8 horas) por defecto.

Puede configurar estas opciones en my.cnf (la ubicación de este archivo es diferente en diferentes sistemas operativos y bases de datos, percona, mysql, etc.)

Consulte también esta respuesta de los administradores de bases de datos: https://dba.stackexchange.com/a/1559 y si desea obtener más información sobre cómo depurar el origen de las conexiones inactivas, consulte este excelente artículo: https: // www. percona.com/blog/2007/02/08/debugging-sleeping-connections-with-mysql/

"Si sus conexiones son persistentes (abiertas a través de mysql_pconnect), puede reducir estos números a algo razonable como 600 (10 min) o incluso 60 (1 min). O, si su aplicación funciona bien, puede dejar el valor predeterminado. Esto es Depende de usted."

Intente ejecutar el indexador desde la consola para ver si genera algún error:

php shell/indexer info # this will output the list of indexes then
php shell/indexer --reindex {index_name}
lloiacono
fuente
Desafortunadamente, todavía tenemos este problema. Ejecuté el comando show full process y mostró unas declaraciones SQL muy largas con ID de entidades enumeradas.
user1240207
0

configure su servidor mysql configurando un tiempo de espera más corto wait_timeoutyinteractive_timeout

mysql> muestra variables como "%timeout%";

+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| connect_timeout          | 5     |
| delayed_insert_timeout   | 300   |
| innodb_lock_wait_timeout | 50    |
| interactive_timeout      | 28800 |
| net_read_timeout         | 30    |
| net_write_timeout        | 60    |
| slave_net_timeout        | 3600  |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 28800 |
+--------------------------+-------+
9 rows in set (0.00 sec)

Colocado con:

set global wait_timeout=3;
set global interactive_timeout=3;

(y también establecido en su archivo de configuración, para cuando su servidor se reinicie)

Pero está tratando los síntomas en lugar de la causa subyacente: ¿por qué están abiertas las conexiones? Si el script PHP terminó, ¿no deberían cerrarse? Asegúrese de que su servidor web no esté utilizando la agrupación de conexiones ...

Charlie
fuente