sql >> Databasteknik >  >> RDS >> Mysql

Förlorade anslutningen till MySQL-servern under förfrågan på slumpmässiga enkla frågor

Anslutningen till MySQL kan störas på ett antal sätt, men jag skulle rekommendera att du återvänder till Mario Carrions svar eftersom det är ett mycket klokt svar.

Det verkar troligt att anslutningen är avbruten eftersom den delas med andra processer, vilket orsakar kommunikationsprotokollfel...

...detta kan lätt hända om anslutningspoolen är processbunden, vilket jag tror att den är i ActiveRecord, vilket betyder att samma anslutning kan "checkas ut" ett antal gånger samtidigt i olika processer.

Lösningen är att databasanslutningar endast måste upprättas EFTER fork uttalande i applikationsservern.

Jag är inte säker på vilken server du använder, men om du använder en warmup funktion - gör det inte.

Om du kör några databasanrop före den första nätverksbegäran - gör det inte.

Båda dessa åtgärder kan potentiellt initiera anslutningspoolen före fork uppstår, vilket gör att MySQL-anslutningspoolen delas mellan processer medan låssystemet inte är det.

Jag säger inte att detta är den enda möjliga orsaken till problemet, som påstått av @sloth-jr, det finns andra alternativ... men de flesta av dem verkar mindre troliga enligt din beskrivning.

Sidenote:

Varje process kan innehålla ett antal kopplingar. I ditt fall kan du ha upp till 500X36 anslutningar . (se redigera)

Generellt sett kan antalet anslutningar i poolen ofta vara detsamma som antalet trådar i varje process (det bör inte vara mindre än antalet trådar, annars kommer påståenden att sakta ner dig). Ibland är det bra att lägga till några till beroende på din applikation.

EDIT:

Jag ber om ursäkt för att jag ignorerar det faktum att processräkningen refererade till MySQL-data och inte applikationsdata.

Processantalet du visade är MySQL-serverdata, som verkar använda en tråd per anslutning IO-schema . Processdatan räknar faktiskt aktiva anslutningar och inte faktiska processer eller trådar (även om det också borde översättas till antalet trådar).

Detta innebär att av möjliga 500 anslutningar per applikationsprocess (dvs. om du använder 8 processer för din applikation, skulle det vara 8X500=4 000 tillåtna anslutningar) har din applikation bara öppnat 36 anslutningar hittills.



  1. Hur skriver man med BCP till en fjärransluten SQL-server?

  2. INFOGA I eller UPPDATERA med två villkor

  3. hur man lägger till timmar och minuter i curdate mysql

  4. Växla från SQLite till MySQL med Flask SQLAlchemy