Begrip van timeout-eigenschappen in het JDBC-stuurprogramma

JDBC-stuurprogramma downloaden

Time-outinstellingen in het JDBC-stuurprogramma kunnen worden gebruikt om de reactiesnelheid van toepassingen te prioriteren. De meeste time-outs van het stuurprogramma geven standaard prioriteit aan het wachten op een resultaat om gegevensconsistentie te garanderen. Zorg ervoor dat u time-outs kiest die geschikt zijn voor de behoeften van uw toepassing.

Voor de eerste verbinding wordt loginTimeout gebruikt.

  • loginTimeout is het aantal seconden dat de driver wacht om een verbinding met de server tot stand te brengen. Als deze tijd verstrijkt, geeft de driver een foutmelding en opent geen verbinding. Een nulwaarde zet de timeout op de standaard systeemtimeout, die 30 seconden is in JDBC-driver 11.2 en latere versies. In JDBC-driver 10.2 en eerdere versies is de standaard timeout 15 seconden. Elke waarde ongelijk aan nul bepaalt het aantal seconden dat de driver wacht voordat een mislukte verbinding een time-out veroorzaakt. Als je consequent moeite hebt om verbinding te maken met de JDBC-driver, moet je deze time-out mogelijk verhogen naar 90 of zelfs 120 seconden. loginTimeout Hiermee begrens je ook het aantal verbindingspogingen van het stuurprogramma, niet alleen één enkele poging, wat belangrijk is wanneer je verbinding maakt met een automatisch gepauzeerde Azure SQL Database serverless-database. Voor meer informatie, zie Verbind met een automatisch gepauzeerde serverloze database.

Zodra de verbinding tot stand is gebracht, worden queryTimeout, cancelQueryTimeout, en lockTimeout gebruikt tijdens het uitvoeren van instructies. socketTimeout wordt gebruikt voor communicatie tussen stuurprogramma's en de server.

  • queryTimeout is de tijd in seconden dat het stuurprogramma wacht, na het verzenden van een uitvoeropdracht naar de server, om een antwoord met gegevens van de server te ontvangen. Als deze tijd wordt overschreden, wordt de opdracht geannuleerd. Als u deze time-out overschrijdt, wordt de verbinding niet gesloten. De standaardwaarde is -1, wat een oneindige time-out betekent.
  • cancelQueryTimeout is de tijd, in seconden, die de driver wacht op een bevestiging van de queryTimeout annulering door de server, voordat de verbinding geforceerd wordt beëindigd of gesloten. Dat wil gezegd: het stuurprogramma wacht de totale hoeveelheid cancelQueryTimeout plus queryTimeout seconden voordat de verbinding wordt gesloten. Als u deze time-out instelt op een niet-nulwaarde, zorgt u ervoor dat toepassingen responsief kunnen blijven als er sprake is van een netwerk- of communicatiefout met de server wanneer er een time-out optreedt voor een query. De standaardwaarde voor deze eigenschap is -1. Dit is een oneindige wachttijd.
  • lockTimeout is de hoeveelheid tijd die moet worden gewacht totdat een vergrendeling wordt vrijgemaakt, in gevallen waar er een blokkering van de uitvoering van de verklaring is. Het overschrijden van deze time-out resulteert niet in een gesloten verbinding. De standaardwaarde voor deze eigenschap is -1. Dit is een oneindige wachttijd.
  • socketTimeout is van toepassing op alle socketcommunicatie met de server. Als de server de communicatie met het stuurprogramma stopt door gegevens niet te bevestigen of te beantwoorden, wacht het stuurprogramma op de waarde van socketTimeout voordat de verbinding wordt gesloten. Als u deze time-out instelt op een niet-nulwaarde, kunnen toepassingen responsief blijven als er sprake is van een netwerk- of communicatiefout met de server. De standaardwaarde is 0. Dit betekent een oneindige time-out. Zorg ervoor dat socketTimeout groter is dan queryTimeout om sockets-time-outherroepingen tijdens het queryTimeout-venster te voorkomen. Zorg er ook voor dat deze socketTimeout groter is dan cancelQueryTimeout om socket-time-outuitzonderingen tijdens de cancelQueryTimeout venster te voorkomen.

Redelijke time-outwaarden voor uw toepassing zijn afhankelijk van de prioriteiten van de toepassing. Het instellen van lagere waarden voor time-outs geeft prioriteit aan de reactiesnelheid van toepassingen ten opzichte van gegevensconsistentie. Wanneer time-outs zijn bereikt, moeten toepassingen beslissen wat de beste actie is. Deze beslissing is gebaseerd op de databaseactie die wordt uitgevoerd. Bijvoorbeeld, voor een SELECT statement kan de beslissing zijn om een fout aan de gebruiker te rapporteren, of het kan zijn om opnieuw verbinding te maken en het opnieuw te proberen. Voor INSERT of UPDATE verklaringen kan die beslissing anders zijn.

Voor een responsieve toepassing moeten loginTimeout en queryTimeout worden ingesteld op relatief lage waarden. Op dezelfde manier cancelQueryTimeout moet ook worden ingesteld op een lage waarde om ervoor te zorgen dat het stuurprogramma niet te lang wacht totdat de server de annulering van de query bevestigt, wanneer een queryTimeout wordt overschreden. Ten slotte socketTimeout moet worden ingesteld om te voorkomen dat het stuurprogramma te lang wacht tijdens elk scenario waarin de verbinding met de server is verbroken (netwerkonderbreking, servercrash, enzovoort).

Samenvatting van eigenschappen

Vastgoed Description Verstek Verbindingsresultaat
loginTimeout Het aantal seconden dat de driver moet wachten voordat er een time-out optreedt voor een mislukte verbinding. 30 seconden [11,2+],
anders 15 seconden
Gesloten verbinding
queryTimeout Het aantal seconden dat moet worden gewacht voordat een query wordt geannuleerd. -1 [Oneindige timeout] Verbinding openen
cancelQueryTimeout Het aantal seconden dat moet worden gewacht op een bevestiging van de annulering van QueryTimeout. -1 [Oneindige timeout] Gesloten verbinding
lockTimeout Het aantal milliseconden dat moet worden gewacht totdat de database een vergrendelings-time-out fout retourneert. -1 [Oneindige timeout] Verbinding openen
socketTimeout Het aantal milliseconden dat moet worden gewacht voor een socket-lees- of -schrijfoperatie. Nul [oneindige time-out] Gesloten verbinding