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