sql >> Database >  >> RDS >> Mysql

Configureer GlassFish JDBC-verbindingspool om Amazon RDS Multi-AZ-failover af te handelen

Zoals ik al eerder opmerkte, is het omdat de sockets die open zijn en verbonden zijn met de database zich niet realiseren dat de verbinding is verbroken, dus bleven ze verbonden totdat de time-out van de OS-socket werd geactiveerd, wat volgens mij meestal in ongeveer 30 minuten kan zijn .

Om het probleem op te lossen, moet u de sockettime-out in uw JDBC Connection String of in de JDNI CONnection Configuration/Properties overschrijven om de socketTimeout te definiëren param naar een kleinere tijd.

Houd er rekening mee dat elke verbinding die langer is dan de gedefinieerde waarde, wordt verbroken, zelfs als deze wordt gebruikt (ik heb dit niet kunnen bevestigen, lees ik).

De andere twee parameters die ik in mijn opmerking noem zijn connectTimeout en autoReconnect .

Dit is mijn JDBC-verbindingsreeks:

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

Ik heb ook Java's DNS-cache uitgeschakeld door te doen

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

Ik doe dit omdat Java de TTL's niet respecteert, en wanneer de failover plaatsvindt, is de DNS hetzelfde, maar het IP-adres verandert.

Aangezien u een toepassingsserver gebruikt, moeten de parameters om de DNS-cache uit te schakelen, worden doorgegeven aan de JVM bij het starten van de glassfish met -Dnet en niet aan de toepassing zelf.




  1. primaire indexen versus secundaire indexen:prestatieverschillen

  2. Hoe javascript in de mysql-database in te voegen?

  3. “Is het geheim? Is het veilig?" Omgaan met gevoelige gegevens in uw gegevensmodellering

  4. Waarom levert een geparametriseerde query een veel langzamer queryplan op dan een niet-geparametriseerde query?