Dnes je stránka opäť zaseknutá a nachádza sa tam veľké množstvo spánku
Príčiny spánku:
1 Klientský program nezavolal mysql_close() pred ukončením.
2 Klient spal viac ako wait_timeout alebo interactive_timeout sekúnd bez toho, aby serveru poslal akékoľvek požiadavky.
3 Klientský program skončil náhle uprostred prenosu dát
Ak je počet spánkových procesov v rovnakom období príliš vysoký a celkový počet spojení v iných stavoch prevyšuje hodnotu max_connection, MySQL už nemôže spracovávať žiadne požiadavky okrem root používateľa, nemôže nadviazať spojenie s žiadnou požiadavkou alebo sa zasekne priamo
Riešenie:
1. Najprv skontrolujte, či váš program používa metódu pconnect, a po druhé, skontrolujte, či je mysql_close() volaný včas pred spustením stránky. Snažte sa nepoužívať metódu pconnect, teda používajte mysql_connect. Keď sa program spustí, mysql_close by mal byť explicitne vyvolaný
2. Pridajte wait_timeout a interactive_timeout do my.cnf, nastavte hodnotu menšiu, predvolene je hodnota wait_timeout 8 hodín, môžete ju zmeniť na 1 hodinu alebo pol hodiny. Takto MySQL rýchlejšie zničí mŕtve spojenia. Zabrániť tomu, aby celkový počet pripojení prekročil hodnotu max_connection.
wait_timeout príliš veľké spowoduje, že veľké množstvo SLEEP procesov v MySQL bude včas uvoľnených, čo zníži výkon systému, ale ak sú nastavenia príliš malé, môžete naraziť na problémy ako "MySQL zmizol"
Nastavte hodnotu max_connection na vyššiu hodnotu, ale to samozrejme nie je vhodné, čím viac spojení máte, tým viac to zaťažuje váš server. V skutočnosti sú tieto spojenia zbytočné a ich zrušenie čo najskôr je najlepšia politika.
3. Krok za krokom analyzovať SQL dotaz systému, nájsť príliš pomalé SQL a optimalizovať ho
1)interactive_timeout: Význam parametra: Počet sekúnd, počas ktorých server čaká na aktivitu pred vypnutím interaktívneho spojenia. Interaktívny klient je definovaný ako klient, ktorý používa CLIENT_INTERACTIVE možnosť v mysql_real_connect(). Predvolený parameter parametra: 28800 sekúnd (8 hodín)
(2)wait_timeout: Význam parametra: Počet sekúnd, počas ktorých server čaká na aktivitu pred uzavretím neinteraktívneho spojenia. Keď vlákno začne, hodnota relácie wait_timeout sa inicializuje na základe globálnej hodnoty wait_timeout alebo globálneho interactive_timeout, v závislosti od typu klienta (definovaného CLIENT_INTERACTIVE možnostiach pripojenia mysql_real_connect()). Predvolený parameter parametra: 28800 sekúnd (8 hodín)
Existuje horný limit maximálneho počtu pripojení, ktoré MySQL Server dokáže podporiť, pretože každé spojenie je nadviazané a spotrebúva pamäť, takže očakávame, že klienti sa po pripojení k MySQL Serveru odpojí a uvoľnia obsadenú pamäť na spracovanie zodpovedajúcej operácie. Ak má váš MySQL Server veľké množstvo nečinných pripojení, nielenže budú zbytočne spotrebovávať pamäť, ale ak sa pripojenia stále hromadia a otvárajú, nakoniec dosiahnu maximálny počet pripojení v MySQL Serveri, ktorý zobrazí chybu 'príliš veľa spojení'. Nastavenie hodnoty wait_timeout by sa malo posudzovať podľa fungovania systému. Po určitom čase spustenia systému môžete skontrolovať stav pripojenia aktuálneho systému pomocou príkazu show processlist; ak nájdete veľké množstvo pripojených procesov v spánku, znamená to, že nastavenie parametra je príliš veľké a môžete vykonať vhodné úpravy na menšie úpravy.
SQL príkaz:
Táto modifikačná metóda je vPo reštarte služby mysql bude neplatná, preto je najlepšie nastaviť tieto dve vlastnosti v konfiguračnom súbore MySQL.
Upravte súbor my.cnf v Linuxe:
|