Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 33231|Válasz: 6

[Forrás] A MySQL magas CPU-használatot elemz magas egyidejű helyzetekben

[Linket másol]
Közzétéve 2017. 09. 05. 20:23:59 | | | |


Mostanában bizonyos okokból a weboldal-látogatások száma jelentősen megnőtt, és az ábrából látható, hogy az egyidejű kapcsolatok száma meghaladja az 1200-at

Mivel a szerver konfigurációja nagyon alacsony, 1 magos és 2G memória, és a weboldal nagyon lassú hozzáférés, ha sok ember van


A felső parancsot használjuk az ellenőrzéshez, a mysql sok CPU-t és memóriát foglal, míg más folyamatok php-fpm foglalnak el CPU-t és memóriát, ami nem túl magas

Ha a mysql normálisan fut, akkor néhány SQL utasítás a PHP-ben problémákat okoz, és a root felhasználó belép a mysql menedzsmentbe
MySQL -U root -p
Adja meg a jelszót, majd adja meg a következő parancsot




Ezzel a parancsgal láthatjuk, hogy az adatbázis folyamatosan végez törlési műveleteket a where feltételekkel.



pre_k_spider ez a tábla egy olyan táblázat, amely pókhozzáféréseket rögzít, amelyeket feltehetően egy telepített plugin okoz

Láthatjuk, hogy pre_k_spider táblázatban több mint 100 000 rekord van, és a lekérdezés 33 másodpercet vesz igénybe



Határozottan ürítsd ki ezt a táblázatot, majd menj a menedzsment háttérbe, hogy bezárd a tábla megfelelő bővítményeit, és állítsd vissza a normál állapotba!









Előző:Alibaba Cloud Cloud Marketplace Verifikációs Kód Felismerő Szolgáltatás
Következő:MySQL 5.6.21 a my.cnf konfigurációs fájl megtekintéséhez
 Háziúr| Közzétéve 2017. 09. 06. 9:32:56 |


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:




Közzétéve 2017. 09. 06. 11:15:15 |
Szereznem kell egy master-slave szervert
 Háziúr| Közzétéve 2017. 09. 06. 11:15:49 |
vrchary közzétéve: 2017-9-06, 11:15
Szereznem kell egy master-slave szervert

Szerver konfiguráció oka A konfiguráció alacsony   
 Háziúr| Közzétéve 2017. 09. 06. 13:47:56 |
Megoldotta a "mysql-bin.000001" problémáját, ami nagy helyet foglal el
http://www.itsvse.com/thread-2694-1-1.html
(Forrás: Architect)

Miután a MySQL portokkal telepítettem, egy idő után rájöttem, hogy a /var hely nem elég, megnéztem, és kiderült, hogy a mysql-bin.000001, mysql-bin.000002 és más fájlok foglalnak helyet, szóval mire valók ezek a fájlok? Ez az adatbázis műveleti naplója, például UPDATE egy tábla, vagy DELETE néhány adatot, még ha az utasítás nem is egyezik az adatokkal, ez a parancs a naplófájlban marad, beleértve az utasítások végrehajtási idejét is, amely szintén rögzítve lesz.

Ezt főként a következő két célra teszik:
1: Adatmentés
Ha az adatbázisodban probléma van, és előtte van biztonsági mentésed, megnézheted a naplófájlt, hogy kiderítsd, melyik parancs okozta az adatbázis problémáját, és megtaláld a módot a veszteség helyreállítására.
2: Adat szinkronizálása master-slave szerverek között
Az elsődleges szerveren minden művelet egy naplóba kerül, amelyet a szolga szerver használhat, hogy mindkét rendszer szinkronizálja.

Csak zárd be a naplót


 Háziúr| Közzétéve 2017. 10. 09. 14:33:30 |
A mysqld túl CPU-val tölti el a Windowst lentebb



Megoldás: Az SQL utasítás optimalizálása
Közzétéve 2021. 12. 30. 23:15:36 |
Támogassátok!!!!!!!!!!!!!!!!
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com