Ma a weboldal ismét beragadt, és sok alvás van
Az alvás okai:
1 Az ügyfélprogram nem hívta a mysql_close()-t a kilépés előtt.
2 Az ügyfél több mint wait_timeout vagy interactive_timeout másodpercig aludt, anélkül, hogy bármilyen kérést küldött volna a szervernek.
3 A kliens program hirtelen véget ért egy adatátvitel közepén
Ha az alvó folyamatok száma ugyanabban az időszakban túl magas, és más állapotokban lévő kapcsolatok száma meghaladja a max_connection értéket, akkor a MySQL már nem tud feldolgozni semmilyen kérést, csak a root felhasználót dolgozza fel, nem tud kapcsolatot teremteni semmilyen kéréssel, vagy közvetlenül lefagy
Megoldás:
1. Először ellenőrizze, hogy a programod használja a pconnect módszert, másodszor pedig ellenőrizd, hogy az mysql_close() időben hívódott-e az oldal végrehajtása előtt. Próbáld meg nem használni a pconnect módszert, azaz mysql_connect. Amikor a programot végrehajtják, a mysql_close kifejezetten be kell idézni
2. Adj hozzá wait_timeout és interactive_timeout a my.cnf-hez, állítsd kisebbre az értéket, alapértelmezés szerint a wait_timeout érték 8 óra, megváltoztathatod 1 órára vagy fél órára. Így a mysql gyorsabban megöli a halott kapcsolatokat. Megakadályozza, hogy a kapcsolatok összesített száma meghaladja a max_connection értéket.
wait_timeout túl nagy az idővel sok SLEEP folyamatot szabadít ki a MySQL-ben, ami lecsökkenti a rendszer teljesítményét, de ha túl kicsik a beállítások, olyan problémákba ütközhetsz, mint például: "MySQL eltűnt"
Állítsd fel a max_connection értéket magasabbra, de ez nyilvánvalóan nem megfelelő: minél több kapcsolatod van, annál nagyobb terhet ró a szerveredre. Valójában ezek a kapcsolatok feleslegesek, és a lehető leghamarabb megszüntetni őket a legjobb politika.
3. Elemezd lépésről lépésre a rendszer SQL lekérdezését, találd meg a túl lassú SQL-t, és optimalizáld
1)interactive_timeout: Paraméter jelentése: Hány másodperc vár egy tevékenységre, mielőtt kikapcsolná az interaktív kapcsolatot. Az interaktív klienst úgy definiáljuk, mint egy olyan kliens, amely CLIENT_INTERACTIVE opciót használ a mysql_real_connect(). Paraméter alapértelmezése: 28800 másodperc (8 óra)
(2)wait_timeout: Paraméter jelentése: Az a másodperc, amikor a szerver megvárja az aktivitást, mielőtt lezárja a nem interaktív kapcsolatot. Amikor a szál elindul, a session wait_timeout értéke inicializálódik a globális wait_timeout vagy a globális interactive_timeout érték alapján, az ügyféltípustól függően (CLIENT_INTERACTIVE mysql_real_connect()-i csatlakozási opcióktól). Paraméter alapértelmezése: 28800 másodperc (8 óra)
Van felső korlát a MySQL Server által támogatott maximális kapcsolatok számára, mivel minden kapcsolat létrejött és memóriát fogyaszt, így az ügyfelek elvárják, hogy a MySQL Serverhez való csatlakozás után megszakítsák a memóriát és felszabadítsák a foglalt memóriát a megfelelő művelet kezeléséhez. Ha a MySQL Serveredben sok tétlen kapcsolat van, nemcsak hogy hiába fogják elfogyasztani a memóriát, de ha a kapcsolatok folyamatosan felhalmozódnak és nyitódnak, végül elérik a MySQL Server maximális kapcsolatszámát, ami a 'túl sok kapcsolat' hibát jelenti. A wait_timeout értékbeállítását a rendszer működése alapján kell megítélni. Miután a rendszer egy ideig futott, ellenőrizheted a jelenlegi rendszer kapcsolati állapotát a show processlist parancs segítségével, ha sok összekapcsolt folyamatot találsz alvó állapotban, az azt jelenti, hogy a paraméterbeállítás túl nagy, és megfelelő beállításokat is el lehet végezni kisebb beállításokhoz.
SQL parancsnokság:
Ez a módosítási módszer aA mysql szolgáltatás újraindítása után érvénytelen lesz, ezért a legjobb, ha ezt a két tulajdonságot a MySQL konfigurációs fájlban konfigurálod.
Módosítsd a my.cnf fájlt Linux alatt:
|