Att förstå timeout-egenskaper i JDBC-drivrutinen

Ladda ned JDBC-drivrutin

Tidsgränsinställningar i JDBC-drivrutinen kan användas för att prioritera programmets svarstider. Som standard prioriterar de flesta drivrutins timeouter att vänta på ett resultat för att säkerställa datakonsekvens. Se till att du väljer tidsgränser som är lämpliga för programmets behov.

För den första anslutningen loginTimeout används:

  • loginTimeout är antalet sekunder som drivrutinen väntar på att etablera en anslutning till servern. Om denna tid passerar ger drivrutinen ett felmeddelande och öppnar ingen anslutning. Ett nollvärde sätter timeouten till standard-systemets timeout, som är 30 sekunder i JDBC-drivrutin 11.2 och senare versioner. I JDBC-drivrutin 10.2 och tidigare versioner är standardtimeout 15 sekunder. Ett värde som inte är noll anger hur många sekunder drivrutinen väntar innan den ger upp ett misslyckat anslutningsförsök. Om du konsekvent har problem att etablera en anslutning med JDBC-drivrutinen kan du behöva öka denna timeout till 90 eller till och med 120 sekunder. loginTimeoutbegränsar också drivrutinens anslutningsförsök, inte bara ett enda försök, vilket är viktigt när du ansluter till en automatiskt pausad Azure SQL Database-serverlös databas. För mer information, se Koppla till en automatiskt pausad serverlös databas.

När anslutningen har upprättats används queryTimeout, cancelQueryTimeout och lockTimeout under exekveringar av instruktioner. socketTimeout används för all drivrutinskommunikation med servern.

  • queryTimeout är tiden, i sekunder, som drivrutinen kommer att vänta efter att ha skickat ett körningskommando till servern för att ta emot ett datasvar från servern. Om den här tiden överskrids avbryts kommandot. Om tidsgränsen överskrids stängs inte anslutningen. Standardvärdet är -1, vilket innebär oändlig timeout.
  • cancelQueryTimeout är tiden, i sekunder, som föraren väntar på ett erkännande av queryTimeout annulleringen från servern innan anslutningen tvångsavslutas/stängs. Det innebär att drivrutinen väntar den totala tiden cancelQueryTimeout plus queryTimeout sekunder innan anslutningen stängs. Om du anger den här tidsgränsen till ett icke-nollvärde ser du till att program kan förbli dynamiska om det uppstår nätverks- eller kommunikationsfel med servern när en fråga har överskriden tidsgräns. Standardvärdet för den här egenskapen är -1, vilket är en oändlig väntetid.
  • lockTimeout är tiden att vänta tills ett lås hunnit frigöras, i de fall där en låsblockering hindrar körningen. Om tidsgränsen överskrids resulterar det inte i en stängd anslutning. Standardvärdet för den här egenskapen är -1, vilket är en oändlig väntetid.
  • socketTimeout gäller för all socketkommunikation med servern. Om servern stoppar kommunikationen med drivrutinen, antingen genom att inte bekräfta eller svara på data, väntar drivrutinen på värdet socketTimeout före anslutningen stängs. Om du ställer in den här tidsgränsen på ett icke-nollvärde kan program förbli dynamiska om det uppstår nätverks- eller kommunikationsfel med servern. Standardvärdet är 0, vilket innebär en oändlig timeout. Se till att socketTimeout är större än queryTimeout för att undvika socket-timeout-undantag under fönstret queryTimeout. Se till att socketTimeout är större än cancelQueryTimeout för att undvika socket-timeout-undantag under cancelQueryTimeout-fönstret.

Rimliga tidsgränsvärden för ditt program beror på programmets prioriteringar. Om du anger lägre värden för timeouter prioriteras programmets svarstider framför datakonsekvens. När tidsgränser nås måste applikationerna bestämma den bästa handlingsplanen. Det beslutet baseras på den databasåtgärd som utförs. Till exempel, för en SELECT sats kan beslutet vara att rapportera ett fel till användaren, eller att återansluta och försöka igen. För INSERT eller UPDATE uttalanden kan det beslutet vara annorlunda.

För ett dynamiskt program loginTimeout och queryTimeout bör anges till relativt låga värden. cancelQueryTimeout På samma sätt bör detta också ställas in på ett lågt värde för att säkerställa att drivrutinen inte väntar för länge på att servern ska bekräfta avbrytandet av frågan när en queryTimeout överskrids. Slutligen bör socketTimeout ställas in för att förhindra att drivrutinen väntar för länge vid alla scenarier där anslutningen till servern bryts (nätverksavbrott, serverkrasch etc.).

Egenskapssammanfattning

Fastighet Description Förinställning Anslutningsresultat
loginTimeout Antalet sekunder som föraren ska vänta innan en misslyckad anslutning avbryts. 30 sekunder [11.2+],
annars 15 sekunder
Stängd anslutning
queryTimeout Antalet sekunder att vänta innan du avbryter en fråga. -1 [Oändlig timeout] Öppna anslutning
cancelQueryTimeout Antalet sekunder att vänta på en bekräftelse av annulleringen av QueryTimeout. -1 [Oändlig timeout] Stängd anslutning
lockTimeout Antalet millisekunder att vänta innan databasen returnerar ett låstidsgränsfel. -1 [Oändlig timeout] Öppna anslutning
socketTimeout Antalet millisekunder att vänta vid läsning eller skrivning på en socket. Noll [Oändlig timeout] Stängd anslutning