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

Rodinys: 15232|Atsakyti: 3

[Šaltinis] MySQL procesorius 100% aukštas sprendimas

[Kopijuoti nuorodą]
Paskelbta 2018-10-11 11:20:31 | | | |
Atidarykite serverio užduočių tvarkyklę ir pastebėkite, kad procesoriaus procesas visada buvo 99%, o vaizdą užima mysql procesas, kuris buvo didelis.


Komandos processlist išvestis rodo, kurios gijos veikia, ir galite patikrinti dabartinę duomenų bazės veikimo būseną.

1. Eikite į mysql/bin katalogą ir įveskite mysqladmin processlist;
2. Paleiskite mysql ir įveskite rodyti procesų sąrašą.
Jei turite SUPER leidimą, galite matyti visas gijas, kitu atveju galite matyti tik savo paskyros gijas.





Kiekvieno stulpelio reikšmė ir paskirtis

id: identifikatorius
vartotojas: rodo dabartinį vartotoją, jei jis nėra root, ši komanda rodys SQL sakinius tik pagal jūsų teises.
host: rodo, iš kurio IP šis teiginys gaunamas iš kurio prievado
db: Rodo duomenų bazę, prie kurios šiuo metu prijungtas procesas.
command: rodo komandas, kurias vykdo dabartinis ryšys, paprastai miego, užklausos ir prisijungimo.
laikas: šios būsenos trukmė sekundėmis.
būsena: rodo sql sakinio, kuriame naudojamas dabartinis ryšys, būseną, tačiau buvo užklausta tik tam tikra būsena vykdant teiginį, sql sakinį, pavyzdžiui, gali tekti kopijuoti į tmp lentelę, rūšiavimo rezultatą, duomenų siuntimą ir kt
info: Rodo šį SQL sakinį, nes jo ilgis yra ribotas, todėl ilgas SQL sakinys nėra visiškai rodomas, tačiau tai yra svarbus pagrindas vertinant problemos teiginį.


Nustatyta, kad yra du SQL užklausos sakiniai, kurie užtrunka ilgiausiai ir nebuvo vykdomi ilgiau nei 1000 sekundžių, o SQL sakiniai, kuriuos nukopijavome iš informacijos lauko, yra bendra užklausa, kaip nurodyta toliau:

pasirinkite cast(count(*) as SIGNED) kaip col_0_0_ iš 'RatedPassenger' ratedpasse0_, 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ kur baseinfoco1_. CompanyId = ratedpasse0_. CompanyId ir ordermatch2_. OrderId = ratedpasse0_. Užsakymo ID

Mes nužudome šių dviejų užklausų teiginių procesą

Palaukęs 10 sekundžių, pastebėjau, kad procesorius labai sumažėjo, bet jis vis tiek buvo labai aukštas, ir toliau klausiu priežasties!



Sujungimo jungtinės užklausos sakiniui pridėkite indeksą į susietą lauką arba modifikuokite programos užklausos kodą.
Indekso SQL sakinio kūrimas

Pabaiga





Ankstesnis:C# prisijungti prie WordPress
Kitą:Modifikuoti dokų konteinerių prievadų susiejimo metodą
 Savininkas| Paskelbta 2018-10-11 13:03:02 |
Kritiškiausias šios komandos yra būsenos stulpelis, o mysql išvardytos būsenos daugiausia yra šios:

Tikrinamoji lentelė  
  Duomenų lapo tikrinimas (tai vyksta automatiškai).  
  Uždarymo stalai  
  Lentelėje modifikuoti duomenys išvalomi į diską, o panaudota lentelė uždaroma. Tai greita operacija, jei ne, turėtumėte patikrinti, ar disko vieta pilna, ar diskas yra apkrautas.  
  Prisijungti  
  Replikacijos verginis serveris jungiasi prie pirminio serverio.  
  Kopijavimas į tmp lentelę diske  
  Kadangi laikinas rezultatų rinkinys yra didesnis nei tmp_table_size, laikinoji lentelė konvertuojama iš atminties į disko saugyklą, kad būtų taupoma atmintis.  
  Kuriama tmp lentelė  
  Kuriama laikina lentelė kai kuriems užklausos rezultatams laikyti.  
  Naikinimas iš pagrindinės lentelės  
  Serveris atlieka pirmąją kelių lentelių naikinimo dalį ir ką tik panaikino pirmąją lentelę.  
  Naikinimas iš nuorodų lentelių  
  Serveris atlieka antrąją kelių lentelių naikinimo dalį, t. y. ištrina įrašus iš kitų lentelių.  
  Skalavimo stalai  
  Atliekant FLUSH TABLES, laukiant, kol kitos gijos uždarys duomenų lentelę.  
  Nužudytas  
  Jei nužudymo užklausa siunčiama į giją, gija patikrins nužudymo vėliavėlę ir atsisakys kitos nužudymo užklausos. MySQL tikrina, ar kiekvienoje pagrindinėje kilpoje nėra nužudymo vėliavėlių, nors kai kuriais atvejais gija gali mirti trumpam laikui. Jei gija užrakinta kita gija, užmušimo užklausa įsigalios iš karto, kai užraktas bus atleistas.  
  Užrakinta  
  Užrakinta kitų užklausų.  
  Duomenų siuntimas  
  SELECT užklausos įrašas apdorojamas, kol rezultatai siunčiami klientui.  
  Rūšiavimas grupei  
  Rūšiavimas GROUP BY.  
  Rūšiavimas pagal užsakymą  
  Rūšiavimas atliekamas ORDER BY.  
  Atidaromi stalai  
  Šis procesas turėtų būti greitas, nebent trukdo kiti veiksniai. Pavyzdžiui, duomenų lentelės negali atidaryti kita gija, kol nebus įvykdytas sakinys ALTER TABLE arba LOCK TABLE. Bandoma atidaryti stalą.  
  Dublikatų šalinimas  
  Vykdoma užklausa SELECT DISTINCT, bet MySQL negali optimizuoti pasikartojančių įrašų ankstesniame etape. Todėl "MySQL" turi dar kartą pašalinti pasikartojančius įrašus prieš siunčiant rezultatus klientui.  
  Iš naujo atidaryti lentelę  
  Ant stalo gaunamas užraktas, tačiau jį reikia modifikuoti pakeitus stalo struktūrą. Jau atleido užraktą, uždarė duomenų lapą ir bando iš naujo atidaryti duomenų lentelę.  
  Remontas rūšiuojant  
  Taisymo instrukcija yra rūšiavimas, kad būtų sukurtas indeksas.  
  Remontas naudojant klavišų talpyklą  
  Taisymo direktyva naudoja indekso talpyklą, kad po vieną sukurtų naujus indeksus. Tai bus lėčiau nei Remontas rūšiuojant.  
  Ieškoma naujinimų eilučių  
  Tinkami įrašai nustatomi atnaujinimui. Tai turi būti padaryta prieš UPDATE modifikuojant atitinkamą įrašą.  
  Miegas  
  Laukiama, kol klientas atsiųs naują užklausą.  
  Sistemos užraktas  
  Laukiama, kol gausite išorinį sistemos užraktą. Jei tuo pačiu metu neveikia mysqld serveriai, prašantys tos pačios lentelės, išorinės sistemos užraktai gali būti uždrausti pridedant parametrą –skip-external-locking.  
  Atnaujinimo užraktas  
  INSERT DELAYED bando gauti užrakto lentelę naujam įrašui įterpti.  
  Atnaujinimas  
  Atitinkančių įrašų paieška ir jų modifikavimas.  
  Vartotojo užraktas  
  laukia GET_LOCK().  
  Laukiama staliukų  
  Gijai buvo pranešta, kad duomenų lapo struktūra buvo pakeista ir ją reikia atidaryti iš naujo, kad gautumėte naują struktūrą. Tada, norėdami iš naujo atidaryti duomenų lentelę, turite palaukti, kol visos kitos gijos uždarys lentelę. Šis pranešimas pateikiamas šiais atvejais: FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE arba OPTIMIZE TABLE.  
  Laukiama apdorojimo programos įterpimo  
  INSERT DELAYED apdorojo visus laukiančius įterpimus ir laukia naujos užklausos.  
  Dauguma būsenų atitinka greitas operacijas, kol gija kelias sekundes išlieka toje pačioje būsenoje, gali kilti problema, kurią reikia patikrinti.
 Savininkas| Paskelbta 2019-03-01 10:26:49 |
 Savininkas| Paskelbta 2019-03-01 10:34:13 |


Duomenų užklausa užtrunka 10 sekundžių.
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