Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 33231|Atsakyti: 6

[Šaltinis] MySQL analizuoja didelį procesoriaus naudojimą didelio sutapimo situacijose

[Kopijuoti nuorodą]
Paskelbta 2017-09-05 20:23:59 | | | |


Pastaruoju metu dėl tam tikrų priežasčių apsilankymų svetainėje skaičius smarkiai išaugo, o iš skaičiaus matyti, kad vienu metu veikiančių ryšių skaičius yra daugiau nei 1 200

Kadangi serverio konfigūracija yra labai maža, 1 branduolys ir 2G atmintis, o tada svetainė yra labai lėtai pasiekiama, kai yra daug žmonių


Mes naudojame viršutinę komandą, kad patikrintume, mysql užima daug procesoriaus ir atminties, o kiti procesai yra php-fpm užima procesorių ir atmintį, o tai nėra labai didelis

Jei mysql veikia normaliai, tai yra tai, kad kai kurie SQL teiginiai PHP sukelia problemų aptikti, ir root vartotojas įeina į mysql valdymą
mysql -u šaknis -p
Įveskite slaptažodį, tada įveskite šią komandą




Naudodami šią komandą matome, kad duomenų bazė nuolat vykdo ištrynimo operacijas su kur sąlygomis.



pre_k_spider ši lentelė yra lentelė, kurioje įrašomos vorų prieigos, tikriausiai sukeltos įdiegto papildinio

Matome, kad pre_k_spider lentelėje yra daugiau nei 100 000 įrašų, o užklausa trunka 33 sekundes



Ryžtingai ištuštinkite šią lentelę, tada eikite į valdymo foną, kad uždarytumėte atitinkamus lentelės papildinius ir atkurtumėte normalią padėtį!









Ankstesnis:"Alibaba Cloud Cloud Marketplace" patvirtinimo kodo atpažinimo paslauga
Kitą:mysql 5.6.21, kad peržiūrėtumėte my.cnf konfigūracijos failą
 Savininkas| Paskelbta 2017-09-06 09:32:56 |


Š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":




Paskelbta 2017-09-06 11:15:15 |
Turiu gauti pagrindinį-pavaldų serverį
 Savininkas| Paskelbta 2017-09-06 11:15:49 |
Vrchary Parašė 2017-9-6 11:15
Turiu gauti pagrindinį-pavaldų serverį

Serverio konfigūracijos priežastis Konfigūracija žema   
 Savininkas| Paskelbta 2017-09-06 13:47:56 |
Išspręsta "mysql-bin.000001" problema, užimanti daug vietos
http://www.itsvse.com/thread-2694-1-1.html
(Šaltinis: Architektas)

Įdiegęs MySQL su prievadais, po kurio laiko pastebėjau, kad /var vietos nepakanka, patikrinau ir radau, kad mysql-bin.000001, mysql-bin.000002 ir kiti failai užima vietą, taigi kam skirti šie failai? Tai yra duomenų bazės operacijų žurnalas, pvz., ATNAUJINTI lentelę arba IŠTRINTI kai kuriuos duomenis, net jei sakinys neatitinka duomenų, ši komanda bus saugoma žurnalo faile, įskaitant kiekvieno teiginio vykdymo laiką, kuris taip pat bus įrašytas.

Tai daugiausia daroma šiais dviem tikslais:
1: Duomenų atkūrimas
Jei jūsų duomenų bazėje yra problemų ir anksčiau turite atsarginę kopiją, galite peržiūrėti žurnalo failą, kad sužinotumėte, kuri komanda sukėlė duomenų bazės problemą, ir rastumėte būdą, kaip atkurti nuostolius.
2: Sinchronizuokite duomenis tarp pagrindinių-pavergtų serverių
Visos pirminio serverio operacijos įrašomos į žurnalą, kurį pagalbinis serveris gali naudoti, kad užtikrintų, kad abi būtų sinchronizuotos.

Tiesiog uždarykite žurnalą


 Savininkas| Paskelbta 2017-10-09 14:33:30 |
mysqld yra per daug procesorius užima Windows žemiau



Sprendimas: SQL sakinio optimizavimas
Paskelbta 2021-12-30 23:15:36 |
Palaikykite jį!!!!!!!!!!!!!!!!
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com