sql >> Database teknologi >  >> RDS >> Mysql

Mistet forbindelsen til MySQL-serveren under forespørgsel på tilfældige simple forespørgsler

Forbindelsen til MySQL kan afbrydes på en række måder, men jeg vil anbefale at gense Mario Carrions svar, da det er et meget klogt svar.

Det virker sandsynligt, at forbindelsen er afbrudt, fordi den bliver delt med de andre processer, hvilket forårsager kommunikationsprotokolfejl...

...det kunne nemt ske, hvis forbindelsespuljen er procesbundet, hvilket jeg tror, ​​det er, i ActiveRecord, hvilket betyder, at den samme forbindelse kunne "tjekkes ud" et antal gange samtidigt i forskellige processer.

Løsningen er, at databaseforbindelser kun skal etableres EFTER fork sætning i applikationsserveren.

Jeg er ikke sikker på, hvilken server du bruger, men hvis du bruger en warmup funktion - lad være.

Hvis du kører nogen databasekald før den første netværksanmodning - lad være.

En af disse handlinger kunne potentielt initialisere forbindelsespuljen før fork opstår, hvilket medfører, at MySQL-forbindelsespuljen deles mellem processer, mens låsesystemet ikke er det.

Jeg siger ikke, at dette er den eneste mulige årsag til problemet, som angivet af @sloth-jr, der er andre muligheder... men de fleste af dem virker mindre sandsynlige ifølge din beskrivelse.

Sidenote:

Hver proces kan indeholde et antal forbindelser. I dit tilfælde har du muligvis op til 500X36 forbindelser . (se redigering)

Generelt kan antallet af forbindelser i puljen ofte være det samme som antallet af tråde i hver proces (det bør ikke være mindre end antallet af tråde, ellers vil striden bremse dig). Nogle gange er det godt at tilføje nogle flere afhængigt af din ansøgning.

EDIT:

Jeg undskylder for at ignorere det faktum, at procestællingen refererede til MySQL-dataene og ikke applikationsdataene.

Det procesantal, du viste, er MySQL-serverdataene, som synes at bruge en tråd pr. forbindelse IO-skema . "Process"-dataene tæller faktisk aktive forbindelser og ikke faktiske processer eller tråde (selvom det også burde oversættes til antallet af tråde).

Dette betyder, at ud af mulige 500 forbindelser pr. applikationsprocesser (dvs. hvis du bruger 8 processer til din applikation, vil det være 8X500=4.000 tilladte forbindelser) har din applikation kun åbnet 36 forbindelser indtil videre.



  1. Oracle (Gamle?) Joins - Et værktøj/script til konvertering?

  2. 3 måder at liste alle triggere for en given tabel i PostgreSQL

  3. Opgradering af din database til PostgreSQL version 10 - hvad du bør vide

  4. Sådan konfigureres klynge-til-klynge-replikering til PostgreSQL