Šiandien svetainė vėl įstrigo ir rasta daug miego
Miego priežastys:
1 Prieš išeidama kliento programa neiškvietė mysql_close().
2 Klientas miegojo ilgiau nei wait_timeout ar interactive_timeout sekundes ir nepateikė jokių užklausų serveriui.
3 Kliento programa staiga baigėsi duomenų perdavimo viduryje
Jei miego procesų skaičius per tą patį laikotarpį yra per didelis, o bendras ryšių skaičius kitose būsenose viršija max_connection reikšmę, tada MySQL nebegali apdoroti jokių užklausų, išskyrus root vartotoją, negali užmegzti ryšio su jokia užklausa arba pakimba tiesiogiai
Sprendimas:
1. Pirmiausia patikrinkite, ar jūsų programa naudoja pconnect metodą, ir, antra, patikrinkite, ar mysql_close() iškviečiamas laiku prieš puslapio vykdymą. Stenkitės nenaudoti pconnect metodo, t.y. naudokite mysql_connect. Kai programa vykdoma, mysql_close turi būti aiškiai iškviesta
2. Pridėkite wait_timeout ir interactive_timeout prie my.cnf, nustatykite mažesnę reikšmę, pagal numatytuosius nustatymus wait_timeout reikšmė yra 8 valandos, galite ją pakeisti į 1 valandą arba pusvalandį. Tokiu būdu mysql greičiau nužudys negyvus ryšius. Neleiskite, kad bendras jungčių skaičius viršytų max_connection vertę.
wait_timeout per didelis, laiku bus išleista daugybė "MySQL" SLEEP procesų, o tai sumažins sistemos našumą, tačiau jei nustatymai yra per maži, galite susidurti su tokiomis problemomis kaip "MySQL išnyko"
Nustatykite max_connection reikšmę į didesnę vertę, tačiau tai akivaizdžiai netinka, kuo daugiau ryšių turite, tuo daugiau streso tai kelia jūsų serveriui. Tiesą sakant, šie ryšiai yra nereikalingi, ir juos kuo greičiau nužudyti yra geriausia politika.
3. Žingsnis po žingsnio išanalizuokite sistemos SQL užklausą, raskite per lėtą SQL ir optimizuokite jį
1)interactive_timeout: Parametro reikšmė: sekundžių skaičius, per kurį serveris laukia veiklos prieš išjungdamas interaktyvų ryšį. Interaktyvus klientas apibrėžiamas kaip klientas, kuris naudoja CLIENT_INTERACTIVE parinktį mysql_real_connect(). Numatytasis parametras: 28800 sekundžių (8 valandos)
(2)wait_timeout: Parametro reikšmė: sekundžių skaičius, per kurį serveris laukia veiklos prieš uždarydamas neinteraktyvų ryšį. Prasidėjus gijai, seanso wait_timeout reikšmė inicijuojama pagal visuotinį wait_timeout arba visuotinį interactive_timeout reikšmę, atsižvelgiant į kliento tipą (apibrėžtą CLIENT_INTERACTIVE mysql_real_connect()) ryšio parinktis). Numatytasis parametras: 28800 sekundžių (8 valandos)
Yra viršutinė maksimalaus ryšių, kuriuos gali palaikyti "MySQL Server", skaičiaus riba, nes kiekvienas ryšys yra užmegztas ir eikvoja atmintį, todėl tikimės, kad prisijungę prie "MySQL Server" klientai atsijungs ir atlaisvins užimtą atmintį, kad galėtų atlikti atitinkamą operaciją. Jei jūsų "MySQL Server" turi daug neveikiančių ryšių, jie ne tik veltui sunaudos atmintį, bet ir jei ryšiai nuolat kaupsis ir atsidarys, galiausiai pasieks maksimalų "MySQL Server" ryšių skaičių, kuris praneš apie klaidą "per daug ryšių". wait_timeout vertės nustatymas turėtų būti vertinamas pagal sistemos veikimą. Po to, kai sistema veikia tam tikrą laiką, galite patikrinti dabartinės sistemos ryšio būseną naudodami komandą rodyti procesų sąrašą, jei miego būsenoje radote daug prijungtų procesų, tai reiškia, kad parametrų nustatymas yra per didelis, ir galite atlikti atitinkamus pakeitimus, kad atliktumėte mažesnius pakeitimus.
SQL komanda:
Šis modifikavimo metodas yraIš naujo paleidus mysql paslaugą, ji bus negaliojanti, todėl geriausia sukonfigūruoti šias dvi ypatybes mySQL konfigūracijos faile.
Pakeiskite failą my.cnf sistemoje "Linux":
|