Dnes je web opět zaseknutý a najde se tam velké množství spánku
Příčiny spánku:
1 Klientský program nezavolal mysql_close() před ukončením.
2 Klient spal více než wait_timeout nebo interactive_timeout sekund, aniž by serveru vydal jakékoli požadavky.
3 Klientský program náhle skončil uprostřed přenosu dat
Pokud je počet spánkových procesů ve stejném období příliš vysoký a celkový počet spojení v jiných stavech překročí hodnotu max_connection, MySQL již nemůže zpracovávat žádné požadavky kromě root uživatele, nemůže navázat spojení s žádným požadavkem nebo se zasekne přímo
Řešení:
1. Nejprve zkontrolujte, zda váš program používá metodu pconnect, a za druhé, zda je mysql_close() volán včas před vykonáním stránky. Snažte se nepoužívat metodu pconnect, tedy používejte mysql_connect. Když je program vykonán, mysql_close by měl být explicitně vyvolán
2. Přidejte wait_timeout a interactive_timeout do my.cnf, nastavte hodnotu menší, výchozí hodnota wait_timeout je 8 hodin, můžete ji změnit na 1 hodinu nebo půl hodiny. Tímto způsobem mysql rychleji ukončí mrtvá spojení. Zabránit tomu, aby celkový počet spojení překročil hodnotu max_connection.
wait_timeout příliš velké množství způsobí, že se v MySQL včas uvolní velké množství procesů SLEEP, což sníží výkon systému, ale pokud jsou nastavení příliš malá, můžete narazit na problémy jako "MySQL zmizel"
Nastavte hodnotu max_connection na vyšší hodnotu, ale to samozřejmě není vhodné, čím více připojení máte, tím větší stres to klade na váš server. Ve skutečnosti jsou tyto vazby zbytečné a nejlepší je co nejdříve je zlikvidovat.
3. Krok za krokem analyzovat SQL dotaz systému, najít příliš pomalé SQL a optimalizovat ho
1)interactive_timeout: Význam parametru: Počet sekund, které server čeká na aktivitu, než vypne interaktivní připojení. Interaktivní klient je definován jako klient, který používá CLIENT_INTERACTIVE možnost v mysql_real_connect(). Výchozí parametr: 28800 sekund (8 hodin)
(2)wait_timeout: Význam parametru: Počet sekund, které server čeká na aktivitu, než uzavře neinteraktivní spojení. Když vlákno začne, hodnota wait_timeout relace je inicializována na základě globální hodnoty wait_timeout nebo globální interactive_timeout, v závislosti na typu klienta (definovaném CLIENT_INTERACTIVE možnostech spojení mysql_real_connect()). Výchozí parametr: 28800 sekund (8 hodin)
Existuje horní limit maximálního počtu spojení, které MySQL Server může podporovat, protože každé spojení je navázáno a spotřebovává paměť, takže očekáváme, že klienti po připojení k MySQL Serveru odpojí a uvolní obsazenou paměť pro zpracování odpovídající operace. Pokud má váš MySQL Server velké množství nečinných připojení, nejenže budou zbytečně spotřebovávat paměť, ale pokud se spojení stále hromadí a otevírají, nakonec dosáhnou maximálního počtu spojení v MySQL Serveru, který hlásí chybu 'příliš mnoho připojení'. Nastavení hodnoty wait_timeout by mělo být posuzováno podle fungování systému. Po určité době běhu systému můžete zkontrolovat stav připojení aktuálního systému příkazem show processlist, pokud najdete velké množství propojených procesů ve stavu spánku, znamená to, že nastavení parametrů je příliš velké a můžete provést vhodné úpravy pro menší úpravy.
SQL příkaz:
Tato metoda úpravy je vPo restartu služby mysql bude neplatná, proto je nejlepší tyto dvě vlastnosti nastavit v konfiguračním souboru MySQL.
Upravte soubor my.cnf v Linuxu:
|