Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 33231|Antwoord: 6

[Bron] MySQL analyseert hoog CPU-gebruik in situaties met hoge gelijktijdigheid

[Link kopiëren]
Geplaatst op 05-09-2017 20:23:59 | | | |


Onlangs is het aantal websitebezoeken om bepaalde redenen sterk gestegen, en uit het cijfer blijkt dat het aantal gelijktijdige verbindingen meer dan 1.200 is

Omdat de serverconfiguratie erg laag is, 1 core en 2G geheugen, en de website dan erg traag te bereiken is als er veel mensen zijn


We gebruiken het topcommando om te controleren, mysql neemt veel CPU en geheugen in beslag, en andere processen zijn php-fpm die CPU en geheugen in beslag nemen, wat niet erg hoog is

Als mysql normaal draait, veroorzaakt het dat sommige SQL-instructies in PHP problemen ontdekken, en de root-gebruiker mysql-beheer binnengaat
MySQL -u root -p
Voer het wachtwoord in en voer dan het volgende commando in




Met dit commando zien we dat de database voortdurend verwijderingsoperaties uitvoert met where-voorwaarden.



pre_k_spider deze tabel is een tabel die spider-toegang registreert, vermoedelijk veroorzaakt door een geïnstalleerde plugin

We zien dat pre_k_spider tabel meer dan 100.000 records bevat, en de query duurt 33 seconden



Maak deze tabel definitief leeg en ga dan naar de beheerachtergrond om de relevante plug-ins van de tabel te sluiten en hem weer normaal te maken!









Vorig:Alibaba Cloud Cloud Marketplace Verificatiecode Herkenningsdienst
Volgend:MySQL 5.6.21 om het MY.CNF-configuratiebestand te bekijken
 Huisbaas| Geplaatst op 06-09-2017 09:32:56 |


Vandaag zit de website weer vast en wordt er veel slaap gevonden

Oorzaken van slaap:

1 Het clientprogramma riep mysql_close() niet aan voordat het werd afgesloten.

2 De client had meer dan wait_timeout of interactive_timeout seconden geslapen zonder verzoeken aan de server te richten.

3 Het clientprogramma eindigde abrupt midden in een datatransfer

Als het aantal slaapprocessen in dezelfde periode te hoog is, en het totale aantal verbindingen in andere toestanden de max_connection-waarde overschrijdt, kan MySQL geen verzoeken meer verwerken behalve de root-gebruiker, kan geen verbinding met een verzoek tot stand brengen of hangt direct

Oplossing:

1. Controleer eerst of je programma de pconnect-methode gebruikt, en ten tweede of de mysql_close() op tijd wordt aangeroepen voordat de pagina wordt uitgevoerd. Probeer de pconnect-methode niet te gebruiken, dus gebruik mysql_connect. Wanneer het programma wordt uitgevoerd, moet de mysql_close expliciet worden aangeroepen

2. Voeg wait_timeout en interactive_timeout toe aan my.cnf, stel de waarde kleiner, standaard is de wait_timeout waarde 8 uur, je kunt die veranderen naar 1 uur of een half uur. Op deze manier zal MySQL dode verbindingen sneller doden. Voorkom dat het totale aantal verbindingen de max_connection waarde overschrijdt.

wait_timeout te groot zal ervoor zorgen dat er een groot aantal SLEEP-processen in MySQL op tijd worden vrijgegeven, wat de systeemprestaties vermindert, maar als de instellingen te klein zijn, kun je problemen tegenkomen zoals "MySQL is verdwenen"

Stel de max_connection waarde hoger in, maar dat is natuurlijk niet geschikt; hoe meer verbindingen je hebt, hoe meer stress het op je server legt. Sterker nog, die verbindingen zijn overbodig, en het is het beste beleid om ze zo snel mogelijk te beëindigen.

3. Analyseer de SQL-query van het systeem stap voor stap, vind de SQL die te traag is, en optimaliseer deze



1)interactive_timeout:
Parameterbetekenis: Het aantal seconden dat de server wacht op een activiteit voordat de interactieve verbinding wordt uitgeschakeld. Een interactieve client wordt gedefinieerd als een client die CLIENT_INTERACTIVE optie in mysql_real_connect() gebruikt.
Standaard parameter: 28800 seconden (8 uur)

(2)wait_timeout:
Parameterbetekenis: Het aantal seconden dat de server wacht op activiteit voordat de niet-interactieve verbinding wordt gesloten.
Wanneer de thread begint, wordt de sessiewaarde wait_timeout geïnitialiseerd op basis van de globale wait_timeout of globale interactive_timeout-waarde, afhankelijk van het clienttype (gedefinieerd CLIENT_INTERACTIVE de verbindingsopties van mysql_real_connect()).
Standaard parameter: 28800 seconden (8 uur)

Er is een bovengrens aan het maximale aantal verbindingen dat MySQL Server kan ondersteunen, omdat elke verbinding wordt opgezet en geheugen verbruikt, dus verwachten we dat clients na het verbinden met MySQL Server loskoppelen en het bezette geheugen vrijmaken om de bijbehorende bewerking uit te voeren. Als je MySQL Server een groot aantal idle verbindingen heeft, verbruiken die niet alleen tevergeefs geheugen, maar als de verbindingen zich blijven opstapelen en openen, zullen ze uiteindelijk het maximale aantal verbindingen in MySQL Server bereiken, wat de foutmelding 'te veel verbindingen' zal rapporteren. De waardestelling van de wait_timeout moet worden beoordeeld op basis van de werking van het systeem. Nadat het systeem een tijdlang heeft gedraaid, kun je de verbindingsstatus van het huidige systeem controleren via het show processlist-commando; als je een groot aantal verbonden processen in slaapstand vindt, betekent dat dat de parameterinstelling te groot is, en kun je passende aanpassingen doen om kleinere aanpassingen te maken.


SQL-commando:



Deze modificatiemethode is inNa het herstarten van de Mysql-service is deze ongeldig, dus het is het beste om deze twee eigenschappen te configureren in het MySQL-configuratiebestand.

Pas het my.cnf-bestand aan onder Linux:




Geplaatst op 06-09-2017 11:15:15 |
Ik moet een master-slave server aanschaffen
 Huisbaas| Geplaatst op 06-09-2017 11:15:49 |
Vrchary geplaatst op 6-9-2017 11:15
Ik moet een master-slave server aanschaffen

Serverconfiguratie reden De configuratie is laag   
 Huisbaas| Geplaatst op 06-09-2017 13:47:56 |
Het probleem van "mysql-bin.000001" opgelost die veel ruimte inneemt
http://www.itsvse.com/thread-2694-1-1.html
(Bron: Architect)

Na het installeren van MySQL met poorten, ontdekte ik na een tijdje dat de /var-ruimte onvoldoende was, ik controleerde en zag dat mysql-bin.000001, mysql-bin.000002 en andere bestanden ruimte innamen, dus waar zijn deze bestanden eigenlijk voor? Dit is het operatielogboek van de database, zoals UPDATE een tabel, of DELETE bepaalde gegevens; zelfs als de instructie niet overeenkomt met de gegevens, wordt dit commando opgeslagen in het logbestand, inclusief de uitvoeringstijd van elke instructie, die ook wordt geregistreerd.

Dit wordt voornamelijk gedaan voor de volgende twee doeleinden:
1: Dataherstel
Als je database een probleem heeft en je hebt eerder een back-up, kun je het logbestand bekijken om te achterhalen welk commando je databaseprobleem heeft veroorzaakt en een manier vinden om het verlies te herstellen.
2: Synchroniseer data tussen master-slave servers
Alle bewerkingen op de primaire server worden vastgelegd in een logboek dat de slaveserver kan gebruiken om te zorgen dat beide gesynchroniseerd zijn.

Sluit gewoon het logboek


 Huisbaas| Geplaatst op 09-10-2017 14:33:30 |
mysqld is te veel CPU die Windows hieronder bezet



Oplossing: Optimaliseer de SQL-instructie
Geplaatst op 30-12-2021 23:15:36 |
Steun het!!!!!!!!!!!!!!!!
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com