Danes je spletna stran spet zataknjena in najde veliko spanja
Vzroki za spanje:
1 Odjemalski program ni poklical mysql_close() pred izhodom.
2 Odjemalec je spal več kot wait_timeout ali interactive_timeout sekund, ne da bi strežniku poslal kakršnekoli zahteve.
3 Odjemalski program se je nenadoma končal sredi prenosa podatkov
Če je število procesov spanja v istem obdobju preveliko in skupno število povezav v drugih stanjih presega vrednost max_connection, MySQL ne more več obdelovati nobenih zahtev razen root uporabnika, ne more vzpostaviti povezave z nobeno zahtevo ali se neposredno zatakne
Rešitev:
1. Najprej preverite, ali vaš program uporablja metodo pconnect, in drugič, ali je mysql_close() poklican pravočasno pred izvajanjem strani. Poskusi ne uporabljati metode pconnect, torej uporabi mysql_connect. Ko se program zažene, je treba mysql_close eksplicitno sprožiti
2. Dodajte wait_timeout in interactive_timeout v my.cnf, nastavite vrednost manjšo, privzeto je vrednost wait_timeout 8 ur, lahko jo spremenite na 1 uro ali pol ure. Na ta način bo mysql hitreje uničil mrtve povezave. Preprečite, da skupno število povezav preseže vrednost max_connection.
wait_timeout prevelik bo povzročil, da bo veliko število SLEEP procesov v MySQL pravočasno sproščenih, kar zmanjša delovanje sistema, vendar če so nastavitve premajhne, se lahko pojavijo težave, kot je "MySQL je izginil"
Nastavite vrednost max_connection na višjo vrednost, vendar to očitno ni primerno, več kot imate povezav, večji stres to povzroča vašemu strežniku. Pravzaprav so te povezave odvečne, zato je njihova prekinitev čim prej najboljša politika.
3. Analizirajte SQL poizvedbo sistema korak za korakom, poiščite prepočasen SQL in ga optimizirajte
1)interactive_timeout: Pomen parametra: Število sekund, ki jih strežnik počaka na aktivnost, preden izklopi interaktivno povezavo. Interaktivni odjemalec je definiran kot odjemalec, ki uporablja CLIENT_INTERACTIVE možnost v mysql_real_connect(). Privzeti parameter: 28800 sekund (8 ur)
(2)wait_timeout: Pomen parametra: Število sekund, ki jih strežnik počaka na aktivnost, preden zapre neinteraktivno povezavo. Ko se nit začne, se vrednost wait_timeout seje inicializira na podlagi globalne vrednosti wait_timeout ali globalne interactive_timeout, odvisno od vrste odjemalca (definirane CLIENT_INTERACTIVE možnostih povezave mysql_real_connect()). Privzeti parameter: 28800 sekund (8 ur)
Obstaja zgornja meja največjega števila povezav, ki jih lahko MySQL Server podpira, saj je vsaka povezava vzpostavljena in porabi pomnilnik, zato pričakujemo, da se bodo odjemalci po povezavi z MySQL Server odklopili in sprostili zasedeni pomnilnik za izvedbo ustrezne operacije. Če ima vaš MySQL Server veliko število neaktivnih povezav, ne le da bodo zaman porabile pomnilnik, ampak če se povezave še naprej kopičijo in odpirajo, bodo sčasoma dosegle največje število povezav v MySQL Serverju, ki bo poročal o napaki 'preveč povezav'. Nastavitev vrednosti wait_timeout je treba presojati glede na delovanje sistema. Ko sistem deluje določen čas, lahko s ukazom show processlist preverite status povezave trenutnega sistema; če najdete veliko povezanih procesov v stanju spanja, to pomeni, da je nastavitev parametrov prevelika in lahko naredite ustrezne prilagoditve za manjše spremembe.
SQL ukaz:
Ta metoda modifikacije je vPo ponovnem zagonu storitve mysql bo ta neveljavna, zato je najbolje, da ti dve lastnosti nastavite v konfiguracijski datoteki mysql.
Spremenite datoteko my.cnf pod Linuxom:
|