sql >> Databasteknik >  >> RDS >> Mysql

Konfigurera GlassFish JDBC-anslutningspool för att hantera Amazon RDS Multi-AZ-failover

Som jag kommenterade tidigare beror det på att uttagen som är öppna och anslutna till databasen inte inser att anslutningen har förlorats, så de förblev anslutna tills OS-socket timeout utlöses, vilket jag läser vanligtvis kan vara inom cirka 30 minuter .

För att lösa problemet måste du åsidosätta socket Timeout i din JDBC Connection String eller i JDNI Connection Configuration/Properties för att definiera socketTimeout param till en mindre tid.

Tänk på att alla anslutningar som är längre än det definierade värdet kommer att dödas, även om den används (jag har inte kunnat bekräfta detta, är vad jag läste).

De andra två parametrarna jag nämner i min kommentar är connectTimeout och autoReconnect .

Här är min JDBC-anslutningssträng:

jdbc:(...)&connectTimeout=15000&socketTimeout=60000&autoReconnect=true 

Jag inaktiverade också Javas DNS-cache genom att göra

 java.security.Security.setProperty("networkaddress.cache.ttl" , "0"); 
 java.security.Security.setProperty("networkaddress.cache.negative.ttl" , "0"); 

Jag gör detta för att Java inte respekterar TTL:erna, och när failover äger rum är DNS densamma men IP:n ändras.

Eftersom du använder en applikationsserver måste parametrarna för att inaktivera DNS-cache skickas till JVM när du startar glassfishen med -Dnet och inte själva applikationen.




  1. sql-fråga som grupperar olika objekt i hinkar

  2. Skapa en lagrad procedur:inställning av teckenuppsättning och sortering

  3. hur man beräknar likhet mellan två strängar i MYSQL

  4. Ska jag använda backticks eller inte när jag undslipper sökord i MySQL?