sql >> Database >  >> RDS >> Mysql

Verbinding met MySQL-server verbroken tijdens zoekopdracht op willekeurige eenvoudige zoekopdrachten

De verbinding met MySQL kan op verschillende manieren worden verbroken, maar ik zou aanraden het antwoord van Mario Carrion opnieuw te bekijken, omdat het een heel wijs antwoord is.

Het lijkt waarschijnlijk dat de verbinding wordt onderbroken omdat deze wordt gedeeld met de andere processen, waardoor communicatieprotocolfouten worden veroorzaakt...

... dit zou gemakkelijk kunnen gebeuren als de verbindingspool procesgebonden is, wat volgens mij het geval is, in ActiveRecord, wat betekent dat dezelfde verbinding een aantal keren tegelijk kan worden "uitgecheckt" in verschillende processen.

De oplossing is dat databaseverbindingen pas tot stand gebracht mogen worden NA de fork statement in de applicatieserver.

Ik weet niet zeker welke server je gebruikt, maar als je een warmup gebruikt functie - niet doen.

Als u database-aanroepen uitvoert vóór het eerste netwerkverzoek, niet doen.

Elk van deze acties kan mogelijk de verbindingspool initialiseren vóór fork gebeurt, waardoor de MySQL-verbindingspool wordt gedeeld tussen processen terwijl het sluitsysteem dat niet is.

Ik zeg niet dat dit de enige mogelijke reden voor het probleem is, zoals aangegeven door @sloth-jr, er zijn andere opties... maar de meeste lijken minder waarschijnlijk volgens uw beschrijving.

Kanttekening:

Elk proces kan een aantal verbindingen bevatten. In jouw geval heb je mogelijk tot 500X36 verbindingen . (zie bewerking)

Over het algemeen kan het aantal verbindingen in de pool vaak hetzelfde zijn als het aantal threads in elk proces (het mag niet minder zijn dan het aantal threads, anders vertraagt ​​het conflict). Soms is het goed om er nog een paar toe te voegen, afhankelijk van je toepassing.

BEWERKEN:

Mijn excuses voor het negeren van het feit dat de procestelling verwees naar de MySQL-gegevens en niet naar de toepassingsgegevens.

Het aantal processen dat u liet zien, zijn de MySQL-servergegevens, die lijkt een thread per verbinding IO-schema te gebruiken . De "Proces"-gegevens tellen daadwerkelijk actieve verbindingen en niet daadwerkelijke processen of threads (hoewel dit ook zou moeten vertalen naar het aantal threads).

Dit betekent dat van de mogelijke 500 verbindingen per toepassingsprocessen (d.w.z. als u 8 processen voor uw toepassing gebruikt, dat 8X500 =4.000 toegestane verbindingen zou zijn), uw toepassing tot nu toe slechts 36 verbindingen heeft geopend.



  1. Deel 1 – SuiteCRM installeren en de database reverse engineeren?

  2. Chart.js v2.6:Pijlen toevoegen aan uitvoerwaarden van cirkeldiagrammen

  3. Vreemde sleutel naar niet-primaire sleutel

  4. TO_SECONDS() Voorbeelden – MySQL