I dag sidder hjemmesiden fast igen, og der findes et stort antal søvn
Årsager til søvn:
1 Klientprogrammet kaldte ikke mysql_close() før afsluttingen.
2 Klienten havde sovet mere end wait_timeout eller interactive_timeout sekunder uden at sende nogen anmodninger til serveren.
3 Klientprogrammet sluttede brat midt i en dataoverførsel
Hvis antallet af søvnprocesser i samme periode er for højt, og det samlede antal forbindelser i andre tilstande overstiger max_connection-værdien, kan MySQL ikke længere behandle forespørgsler undtagen root-brugeren, kan ikke etablere forbindelse med nogen anmodning eller hænger direkte
Løsning:
1. For det første skal du tjekke, om dit program bruger pconnect-metoden, og for det andet tjekke om mysql_close() kaldes i tide før siden eksekveres. Prøv ikke at bruge pconnect-metoden, altså brug mysql_connect. Når programmet eksekveres, skal mysql_close eksplicit kaldes
2. Tilføj wait_timeout og interactive_timeout til my.cnf, sæt værdien mindre, som standard er wait_timeout værdi 8 timer, du kan ændre den til 1 time eller en halv time. På den måde vil MySQL dræbe døde forbindelser hurtigere. Forhindre, at det samlede antal forbindelser overstiger max_connection-værdien.
wait_timeout for stor vil medføre, at mange SLEEP-processer i MySQL frigives i tide, hvilket trækker systemets ydeevne ned, men hvis indstillingerne er for små, kan du støde på problemer som "MySQL er væk"
Sæt max_connection-værdien til en højere værdi, men det er selvfølgelig ikke passende, jo flere forbindelser du har, jo mere pres lægger det på din server. Faktisk er disse forbindelser overflødige, og det er den bedste politik at afbryde dem så hurtigt som muligt.
3. Analyser systemets SQL-forespørgsel trin for trin, find den SQL, der er for langsom, og optimer den
1)interactive_timeout: Parameterbetydning: Antallet af sekunder, hvor serveren venter på en aktivitet, før den slukker den interaktive forbindelse. En interaktiv klient defineres som en klient, der bruger CLIENT_INTERACTIVE mulighed i mysql_real_connect(). Standardparameter: 28800 sekunder (8 timer)
(2)wait_timeout: Parameterbetydning: Antallet af sekunder, hvor serveren venter på aktivitet, før den lukker den ikke-interaktive forbindelse. Når tråden starter, initialiseres sessionens værdi wait_timeout baseret på den globale wait_timeout eller globale interactive_timeout-værdi, afhængigt af klienttypen (defineret CLIENT_INTERACTIVE forbindelsesmulighederne mysql_real_connect()). Standardparameter: 28800 sekunder (8 timer)
Der er en øvre grænse for det maksimale antal forbindelser, som MySQL Server kan understøtte, da hver forbindelse etableres og bruger hukommelse, så vi forventer, at klienterne afbryder forbindelsen og frigør den optagede hukommelse efter forbindelse til MySQL Server for at håndtere den tilsvarende operation. Hvis din MySQL Server har et stort antal inaktive forbindelser, vil de ikke kun forbruge hukommelse forgæves, men hvis forbindelserne fortsætter med at akkumuleres og åbnes, vil de til sidst nå det maksimale antal forbindelser i MySQL Server, som vil rapportere fejlen 'for mange forbindelser'. Værdifastsættelsen af wait_timeout bør vurderes ud fra systemets funktion. Efter at systemet har kørt i en periode, kan du tjekke forbindelsesstatus for det nuværende system via kommandoen show processlist; hvis du finder et stort antal forbundne processer i dvaletilstand, betyder det, at parameterindstillingen er for stor, og du kan foretage passende justeringer for at lave mindre justeringer.
SQL-kommando:
Denne modifikationsmetode er iEfter genstart af MySQL-tjenesten vil den være ugyldig, så det er bedst at konfigurere disse to egenskaber i MySQL-konfigurationsfilen.
Ændr my.cnf-filen under Linux:
|