enterprise_refresh_index Connessione MySQL in sospensione


8

Ci sono volte in cui l'indicizzatore che viene eseguito da cron sembra rimanere bloccato su MySQL mentre si vedono connessioni Sleeping. L'indicizzatore funziona per diverse ore e questo in realtà non funziona affatto. Ho cercato questo, ma non sono riuscito a trovare alcun correlato. Chiunque possa far luce? Possibilmente configurazione del server o bug Magento?

Risposte:


0

Stai usando connessioni persistenti? Quante connessioni di sonno hai? Qual è la quantità massima di connessioni che il tuo DB Server è configurato per consentire?

Per verificare quante connessioni di sonno hai appena eseguito:

show full processlist;

Per vedere l'esecuzione di max_connections:

show variables like 'max_connections';

Penso che le connessioni in sospensione non siano il problema, mysqld eseguirà il timeout delle connessioni in sospensione in base a 2 valori:

interactive_timeout wait_timetout

Entrambi sono 28800 secondi (8 ore) per impostazione predefinita.

È possibile impostare queste opzioni in my.cnf (la posizione di questo file è diversa in diversi SO e DB, percona, mysql, ecc.)

Vedi anche questa risposta dagli amministratori del database: https://dba.stackexchange.com/a/1559 e se vuoi saperne di più su come eseguire il debug dell'origine delle connessioni in sospensione, consulta questo eccellente articolo: https: // www. percona.com/blog/2007/02/08/debugging-sleeping-connections-with-mysql/

"Se le tue connessioni sono persistenti (aperte tramite mysql_pconnect) puoi abbassare questi numeri a qualcosa di ragionevole come 600 (10 min) o anche 60 (1 min). Oppure, se la tua app funziona bene, puoi lasciare l'impostazione predefinita. Questo è sta a te."

Prova a eseguire l'indicizzatore dalla console per vedere se genera qualche errore:

php shell/indexer info # this will output the list of indexes then
php shell/indexer --reindex {index_name}

Sfortunatamente, stiamo ancora riscontrando questo problema. Ho eseguito il comando show full process e ha visualizzato istruzioni SQL molto lunghe con gli ID entità elencati.
user1240207,

0

configura il tuo server mysql impostando un timeout più breve su wait_timeouteinteractive_timeout

mysql> mostra variabili come "%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)

Impostare con:

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

(e anche impostato nel file di configurazione, per quando il server si riavvia)

Ma stai trattando i sintomi invece della causa sottostante - perché le connessioni sono aperte? Se lo script PHP è finito, non dovrebbero chiudersi? Assicurati che il tuo server web non stia utilizzando il pool di connessioni ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.