Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 33231|Svar: 6

[Källa] MySQL analyserar hög CPU-användning i situationer med hög samtidighet

[Kopiera länk]
Publicerad på 2017-09-05 20:23:59 | | | |


Nyligen har antalet webbplatsbesök ökat kraftigt av vissa skäl, och utifrån siffran kan man se att antalet samtidiga anslutningar är mer än 1 200

Eftersom serverkonfigurationen är väldigt låg, 1 kärna och 2G-minne, och sedan är webbplatsen väldigt långsam att komma åt när det är många personer


Vi använder toppkommandot för att kolla, mysql tar upp mycket CPU och minne, och andra processer är php-fpm som tar upp CPU och minne, vilket inte är särskilt högt

Om mysql körs normalt är det så att vissa SQL-satser i PHP orsakar problem att upptäckas, och rotanvändaren går in i mysql-hantering
mysql -u root -p
Ange lösenordet, och sedan följande kommando




Med detta kommando kan vi se att databasen ständigt utför raderingsoperationer med where-villkor.



pre_k_spider denna tabell är en tabell som registrerar spindelåtkomster, förmodligen orsakade av ett installerat plugin

Vi kan se att pre_k_spider tabell har mer än 100 000 poster, och frågan tar 33 sekunder



Töm denna tabell bestämt, och gå sedan till hanteringsbakgrunden för att stänga relevanta tillägg i tabellen och återställa den till normalt!









Föregående:Alibaba Cloud Cloud Marketplace verifieringskodigenkänningstjänst
Nästa:MySQL 5.6.21 för att se konfigurationsfilen My.CNF
 Hyresvärd| Publicerad på 2017-09-06 09:32:56 |


Idag fastnar webbplatsen igen, och ett stort antal sömn finns

Orsaker till sömn:

1 Klientprogrammet anropade inte mysql_close() innan det avslutades.

2 Klienten hade sovit mer än wait_timeout eller interactive_timeout sekunder utan att skicka några förfrågningar till servern.

3 Klientprogrammet avslutades abrupt mitt under en dataöverföring

Om antalet viloprocesser under samma period är för högt, och det totala antalet anslutningar i andra tillstånd överstiger värdet max_connection, kan MySQL inte längre behandla några förfrågningar utom root-användaren, kan inte upprätta en anslutning med någon förfrågan eller hänger direkt

Lösning:

1. För det första, kontrollera om ditt program använder pconnect-metoden, och för det andra, kontrollera om mysql_close() anropas i tid innan sidan körs. Försök att inte använda pconnect-metoden, dvs. använd mysql_connect. När programmet körs ska mysql_close uttryckligen anropas

2. Lägg till wait_timeout och interactive_timeout i my.cnf, sätt värdet mindre, som standard är wait_timeout värdet 8 timmar, du kan ändra det till 1 timme eller en halvtimme. På så sätt dödar MySQL döda anslutningar snabbare. Förhindra att det totala antalet anslutningar överstiger max_connection-värdet.

wait_timeout för stor kommer att leda till att ett stort antal SLEEP-processer i MySQL släpps i tid, vilket drar ner systemets prestanda, men om inställningarna är för små kan du stöta på problem som "MySQL har försvunnit".

Sätt max_connection värdet till ett högre värde, men det är uppenbarligen inte lämpligt, ju fler anslutningar du har, desto mer stress lägger det på din server. Faktum är att dessa anslutningar är överflödiga, och att avsluta dem så snart som möjligt är den bästa policyn.

3. Analysera systemets SQL-sökningar steg för steg, hitta SQL som är för långsam och optimera den



1)interactive_timeout:
Parameterbetydelse: Antalet sekunder servern väntar på en aktivitet innan den stänger av den interaktiva anslutningen. En interaktiv klient definieras som en klient som använder CLIENT_INTERACTIVE alternativ i mysql_real_connect().
Standardparameter: 28800 sekunder (8 timmar)

(2)wait_timeout:
Parameterbetydelse: Antalet sekunder som servern väntar på aktivitet innan den stänger den icke-interaktiva anslutningen.
När tråden startar initieras sessionens värde wait_timeout baserat på det globala wait_timeout- eller globala interactive_timeout värdet, beroende på klienttyp (definierat CLIENT_INTERACTIVE anslutningsalternativen för mysql_real_connect()).
Standardparameter: 28800 sekunder (8 timmar)

Det finns en övre gräns för det maximala antalet anslutningar som MySQL Server kan stödja, eftersom varje anslutning etableras och förbrukar minne, så vi förväntar oss att klienterna kopplar bort och frigör det upptagna minnet efter att ha anslutit sig till MySQL Server för att hantera motsvarande operation. Om din MySQL Server har ett stort antal inaktiva anslutningar kommer de inte bara att förbruka minne förgäves, utan om anslutningarna fortsätter att samlas och öppnas kommer de så småningom att nå det maximala antalet anslutningar i MySQL Server, vilket rapporterar felet 'för många anslutningar'. Värdesättningen för wait_timeout bör bedömas utifrån systemets funktion. Efter att systemet har varit igång en tid kan du kontrollera anslutningsstatusen för det aktuella systemet via kommandot visa processlist, om du hittar ett stort antal anslutna processer i viloläge betyder det att parameterinställningen är för stor, och du kan göra lämpliga justeringar för att göra mindre justeringar.


SQL-kommando:



Denna modifieringsmetod finns iEfter att ha startat om MySQL-tjänsten kommer den att vara ogiltig, så det är bäst att konfigurera dessa två egenskaper i MySQL-konfigurationsfilen.

Modifiera my.cnf-filen under Linux:




Publicerad på 2017-09-06 11:15:15 |
Jag måste skaffa en master-slave-server
 Hyresvärd| Publicerad på 2017-09-06 11:15:49 |
Vrchary publicerade den 2017-9-6 11:15
Jag måste skaffa en master-slave-server

Serverkonfigurationsanledning Konfigurationen är låg   
 Hyresvärd| Publicerad på 2017-09-06 13:47:56 |
Löste problemet med "mysql-bin.000001" som tog upp mycket utrymme
http://www.itsvse.com/thread-2694-1-1.html
(Källa: Architect)

Efter att ha installerat MySQL med portar, upptäckte jag efter ett tag att /var-utrymmet var otillräckligt, jag kollade och upptäckte att mysql-bin.000001, mysql-bin.000002 och andra filer tog upp plats, så vad är dessa filer till för? Detta är databasens operationslogg, såsom UPPDATERA en tabell eller DELETE viss data, även om satsen inte matchar datan, kommer detta kommando att lagras i loggfilen, inklusive exekveringstiden för varje sats, som också kommer att registreras.

Detta görs huvudsakligen för följande två syften:
1: Dataåterställning
Om din databas har ett problem och du har en säkerhetskopia innan, kan du titta i loggfilen för att ta reda på vilket kommando som orsakade databasproblemet och hitta ett sätt att återställa förlusten.
2: Synkronisera data mellan master-slave-servrar
Alla operationer på primärservern registreras i en logg som slavservern kan använda för att säkerställa att båda är synkroniserade.

Stäng bara loggen


 Hyresvärd| Publicerad på 2017-10-09 14:33:30 |
mysqld är för CPU-upptagen i Windows nedanför



Lösning: Optimera SQL-satsen
Publicerad på 2021-12-30 23:15:36 |
Stöd det!!!!!!!!!!!!!!!!
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com