sql >> Databasteknik >  >> RDS >> Mysql

Problem med anslutningspool

Här är flödet av händelser för att illustrera vad som händer:

  1. En anslutning begärs och används av den som ringer (applikation eller anslutningspool)
  2. Uppringaren behåller en referens till den så att anslutningen kan återanvändas
  3. Uppringaren går igenom en period av inaktivitet (till exempel ett utvecklarsystem över natten eller ett QA-system under helgen).
  4. När den databasanslutningen inte används, anser databasen att anslutningen är inaktiv. Eftersom den är inaktiv stänger databasen anslutningen efter en viss tid (MySQL standard är 8 timmar).
  5. Den som ringer har fortfarande ett handtag till anslutningen och när den som ringer försöker använda anslutningen igen upptäcker han obehagligt att anslutningen har stängts.

Anledningen till att autoReconnect=true fungerar, och att poolen som testar anslutningens giltighet fungerar, är att du instruerar det anropande systemet att testa anslutningen för denna situation och att försöka igen om denna situation inträffar.

När det gäller om valideringsfrågan kommer att påverka prestanda:I teorin är det att använda en anslutning för att göra något. I praktiken är något så trivialt att dess effekt är försumbar i hela ditt system.

[EDIT]

I det här fallet är Apache DBCP anslutningspoolen som hänger på anslutningen, men du vill INTE att DBCP ska stänga anslutningen efter varje samtal. Poängen med anslutningspoolen är att hålla en anslutning redo för nästa samtal eftersom det är dyrt att skapa anslutningar. Anslutningsobjekten som underhålls av poolen backas upp av faktiska databasanslutningar, och databasen är den som stänger den faktiska anslutningen efter den inaktiva timeoutperioden. Observera att tidsgränsen för att stänga inaktiva anslutningar är konfigurerad i databasen, inte i anslutningspoolen. På grund av detta har DBCP inget sätt att veta om anslutningen har stängts eller inte om den inte faktiskt försöker ansluta till den. Det är därför du behöver en valideringsfråga.

För mer information om att konfigurera DBCP, se konfigurationssidan och API-dokumenten .




  1. Fel #1241 - Operand bör innehålla 1 kolumn(er) i Mysql

  2. Ändra Django utvecklingsdatabas från standard SQLite till PostgreSQL

  3. Få avancerade anpassade fält repeaterfältvärde baserat på ett annat repeatervärde

  4. Använda Percona Audit Log Plugin för databassäkerhet