Tänään sivusto on taas jumissa, ja siellä on paljon unta
Unen syyt:
1 Asiakasohjelma ei kutsunut mysql_close() ennen poistumista.
2 Asiakas oli nukkunut yli wait_timeout tai interactive_timeout sekuntia ilman pyyntöjä palvelimelle.
3 Asiakasohjelma päättyi äkillisesti kesken tiedonsiirron
Jos saman ajanjakson lepoprosessien määrä on liian suuri ja muiden tilojen yhteyksien kokonaismäärä ylittää max_connection-arvon, MySQL ei enää voi käsitellä pyyntöjä paitsi juurikäyttäjä, ei voi muodostaa yhteyttä mihinkään pyyntöön tai jumittuu suoraan
Ratkaisu:
1. Tarkista ensin, käyttääkö ohjelmasi pconnect-menetelmää, ja toiseksi tarkista, kutsutaanko mysql_close() ajoissa ennen sivun suorittamista. Yritä olla käyttämättä plink-menetelmää, eli käytä mysql_connect. Kun ohjelma suoritetaan, mysql_close tulisi kutsua eksplisiittisesti
2. Lisää wait_timeout ja interactive_timeout my.cnf:ään, aseta arvo pienemmäksi, oletuksena wait_timeout arvo on 8 tuntia, voit muuttaa sen 1 tunniksi tai puoleksi tunniksi. Näin mysql tappaa kuolleet yhteydet nopeammin. Estä yhteyksien kokonaismäärän ylittämästä max_connection arvoa.
wait_timeout liian suuri johtaa siihen, että suuri määrä SLEEP-prosesseja MySQL:ssä vapautuu ajoissa, mikä laskee järjestelmän suorituskykyä, mutta jos asetukset ovat liian pieniä, saatat kohdata ongelmia kuten "MySQL on kadonnut"
Aseta max_connection arvo korkeammaksi, mutta tämä ei tietenkään ole sopivaa, mitä enemmän yhteyksiä sinulla on, sitä enemmän se aiheuttaa stressiä palvelimellesi. Itse asiassa nuo yhteydet ovat tarpeettomia, ja niiden lopettaminen mahdollisimman pian on paras käytäntö.
3. Analysoi järjestelmän SQL-kysely vaihe vaiheelta, etsi liian hidas SQL ja optimoi se
1)interactive_timeout: Parametrin merkitys: Sekuntien määrä, jonka palvelin odottaa toimintaa ennen interaktiivisen yhteyden sulkemista. Interaktiivinen asiakas määritellään asiakkaaksi, joka käyttää CLIENT_INTERACTIVE vaihtoehtoa mysql_real_connect(). Parametrin oletus: 28800 sekuntia (8 tuntia)
(2)wait_timeout: Parametrin merkitys: Sekuntien määrä, jonka palvelin odottaa toimintaa ennen ei-interaktiivisen yhteyden sulkemista. Kun säie alkaa, session wait_timeout arvo alustetaan globaalin wait_timeout- tai globaalin interactive_timeout-arvon perusteella, riippuen asiakastyypistä (määritelty CLIENT_INTERACTIVE mysql_real_connect()) yhteysvaihtoehdoista). Parametrin oletus: 28800 sekuntia (8 tuntia)
MySQL Serverin tukemien yhteyksien enimmäismäärälle on yläraja, koska jokainen yhteys on muodostettu ja kuluttaa muistia, joten odotamme asiakkaiden katkaisevan yhteyden ja vapauttavan varatun muistin MySQL Serveriin yhdistämisen jälkeen vastaavaa operaatiota varten. Jos MySQL Serverissäsi on suuri määrä käyttämättömiä yhteyksiä, ne eivät ainoastaan kuluta muistia turhaan, vaan jos yhteydet jatkuvat kertyvät ja avautuvat, ne lopulta saavuttavat MySQL Serverin maksimimäärän yhteyksiä, mikä ilmoittaa virheen 'liikaa yhteyksiä'. wait_timeout arvonasetus tulisi arvioida järjestelmän toiminnan perusteella. Kun järjestelmä on ollut käynnissä jonkin aikaa, voit tarkistaa nykyisen järjestelmän yhteyden tilan näytä-prosessilista-komennolla; jos löydät suuren määrän yhdistettyjä prosesseja lepotilassa, se tarkoittaa, että parametrien asetus on liian suuri, ja voit tehdä sopivia säätöjä pienemmille säädöille.
SQL-komento:
Tämä muokkausmenetelmä onMysql-palvelun uudelleenkäynnistyksen jälkeen se on virheellinen, joten on parasta konfiguroida nämä kaksi ominaisuutta mySQL-konfiguraatiotiedostossa.
Muokkaa my.cnf-tiedostoa Linuxissa:
|