sql >> Database >  >> RDS >> Mysql

Probleem met verbindingspool

Hier is de stroom van gebeurtenissen om te illustreren wat er gebeurt:

  1. Een verbinding wordt aangevraagd en gebruikt door de beller (applicatie of verbindingspool)
  2. De beller houdt er een verwijzing naar zodat de verbinding opnieuw kan worden gebruikt
  3. De beller gaat door een periode van inactiviteit (bijvoorbeeld een ontwikkelsysteem 's nachts of een QA-systeem in het weekend).
  4. Zodra die databaseverbinding niet in gebruik is, beschouwt de database de verbinding als inactief. Omdat het inactief is, sluit de database na een bepaalde tijd (MySQL-standaard is 8 uur) de verbinding.
  5. De beller heeft nog steeds een handvat voor de verbinding en wanneer de beller de verbinding opnieuw probeert te gebruiken, ontdekt hij onaangenaam dat de verbinding is verbroken.

De reden dat autoReconnect=true werkt, en dat de pool die de geldigheid van de verbinding test, werkt, is dat u het aanroepende systeem opdracht geeft de verbinding voor deze situatie te testen en het opnieuw te proberen als deze situatie zich voordoet.

Wat betreft de vraag of de validatiequery de prestaties beïnvloedt:in theorie gebruikt het een verbinding om iets te doen. In de praktijk is dat iets zo triviaal dat het effect ervan verwaarloosbaar is in de context van je hele systeem.

[BEWERKEN]

In dit geval is Apache DBCP de verbindingspool die aan de verbinding blijft hangen, maar u wilt NIET dat DBCP de verbinding na elke oproep verbreekt. Het punt van de verbindingspool is om een ​​verbinding gereed te houden voor de volgende oproep, omdat het maken van verbindingen duur is. De verbindingsobjecten die door de pool worden onderhouden, worden ondersteund door daadwerkelijke databaseverbindingen en de database is degene die die daadwerkelijke verbinding sluit na de time-outperiode voor inactiviteit. Houd er rekening mee dat de time-out voor het sluiten van inactieve verbindingen is geconfigureerd op de database, niet op de verbindingspool. Hierdoor kan DBCP niet weten of de verbinding is gesloten of niet, tenzij het daadwerkelijk probeert er verbinding mee te maken. Daarom heb je een validatieverzoek nodig.

Zie de configuratiepagina voor meer informatie over het configureren van DBCP. en de API-documenten .




  1. Equivalent van MySQL OP DUPLICATE KEY UPDATE in Sql Server

  2. Hoe een tagging-systeem vergelijkbaar met SO in php/mysql te implementeren?

  3. MySQL Connector C++ 64bit build van bron in Visual Studio 2012

  4. InnoDB mySQL kan ON DELETE SET DEFAULT niet instellen. Hoe instellen?