Principy vlastností časového limitu v ovladači JDBC

Stáhnout ovladač JDBC

Nastavení časového limitu v ovladači JDBC lze použít k určení priority odezvy aplikace. Ve výchozím nastavení většina časových limitů řidiče určuje prioritu čekání na výsledek, aby se zajistila konzistence dat. Ujistěte se, že jste zvolili časové limity, které jsou vhodné pro potřeby vaší aplikace.

Při počátečním připojení se používá loginTimeout:

  • loginTimeout je doba, v sekundách, ovladač čeká na navázání připojení k serveru. Pokud se tato částka překročí, vrátí se chyba a nenaváže se žádné otevřené připojení. Nulová hodnota označuje, že časový limit je výchozí systémový časový limit, což je 30 sekund ve verzích 11.2 a vyšší. Pro verze 10.2 a novější je výchozí časový limit 15 sekund. Jakákoli nenulová hodnota udává počet sekund, po které by měl ovladač počkat před vypršením časového limitu neúspěšného připojení. Pokud máte neustále potíže s navazováním připojení k ovladači JDBC, možná budete muset tento časový limit prodloužit na 90 nebo dokonce 120 sekund.

Jakmile je připojení vytvořeno, queryTimeoutcancelQueryTimeouta lockTimeout jsou použity během provádění příkazů. socketTimeout se používá pro veškerou komunikaci ovladače se serverem.

  • queryTimeout je doba v sekundách, kdy ovladač po odeslání příkazu execute na server počká, aby přijal odpověď ze serveru s daty. Pokud se tento čas překročí, příkaz se zruší. Překročení tohoto časového limitu připojení nezavře. Výchozí hodnota je -1, což znamená nekonečný časový limit.
  • cancelQueryTimeout je doba v sekundách, kdy ovladač čeká na potvrzení queryTimeout zrušení ze serveru před vynuceným ukončením nebo zavřením připojení. To znamená, že ovladač čeká celkové množství cancelQueryTimeout plus queryTimeout sekund před uzavřením připojení. Nastavením tohoto časového limitu na nenulovou hodnotu zajistíte, aby aplikace zůstaly responzivní, pokud dojde k selhání sítě nebo komunikace se serverem, když vypršel časový limit dotazu. Výchozí hodnota této vlastnosti je -1, což je nekonečná doba čekání.
  • lockTimeout je doba čekání na uvolnění zámku v případech, kdy se spustí příkaz blokující zámek. Překročení tohoto časového limitu nemá za následek zavřené připojení. Výchozí hodnota této vlastnosti je -1, což je nekonečná doba čekání.
  • socketTimeout platí pro veškerou komunikaci soketů se serverem. Pokud server zastaví komunikaci s ovladačem, a to tím, že nepotvrzuje nebo neodpovídá na data, ovladač počká na hodnotu socketTimeout, než připojení uzavře. Nastavením tohoto časového limitu na nenulovou hodnotu zajistíte, aby aplikace zůstaly responzivní, pokud dojde k selhání sítě nebo komunikace se serverem. Výchozí hodnota je 0, což znamená nekonečný časový limit. Ujistěte se, že socketTimeout je větší než queryTimeout, aby vám nevypršel časový limit soketů během queryTimeout okna. Podobně se ujistěte, že socketTimeout je větší než cancelQueryTimeout, abyste zabránili výjimkám časového limitu soketů během okna cancelQueryTimeout.

Přiměřené hodnoty časového limitu pro vaši aplikaci závisí na prioritách aplikace. Nastavení nižších hodnot pro časové limity určuje prioritu odezvy aplikace oproti konzistenci dat. Po dosažení časových limitů musí aplikace rozhodnout o nejlepším průběhu akce. Toto rozhodnutí vychází z prováděné databázové akce. Například u SELECT příkazu může být rozhodnutí buď ohlásit uživateli chybu, nebo se znovu připojit a pokusit se spojení obnovit. U INSERT nebo UPDATE prohlášení se toto rozhodnutí může lišit.

Pro responzivní aplikaci loginTimeout a queryTimeout měla by být nastavená na relativně nízké hodnoty. Podobně by také měla být nastavena nízká hodnota cancelQueryTimeout, aby ovladač nečekal příliš dlouho na potvrzení zrušení dotazu serverem, když queryTimeout dojde k překročení. Nakonec by mělo být socketTimeout nastavováno, aby se zabránilo příliš dlouhému čekání ovladače v jakémkoli scénáři, kdy dojde k přerušení připojení k serveru (přerušení sítě, selhání serveru atd.).

Souhrn vlastností

Vlastnictví Description Výchozí Výsledek připojení
loginTimeout Počet sekund, po které by měl ovladač čekat před vypršením časového limitu neúspěšného připojení. 30 sekund [11,2+],
jinak 15 sekund
Uzavřené připojení
queryTimeout Počet sekund čekání před zrušením dotazu. -1 [Nekonečný časový limit] Otevřené připojení
cancelQueryTimeout Počet sekund čekání na potvrzení zrušení QueryTimeout. -1 [Nekonečný časový limit] Uzavřené připojení
lockTimeout Počet milisekund, které je třeba počkat, až databáze vrátí chybu časového vypršení uzamčení. -1 [Nekonečný časový limit] Otevřené připojení
socketTimeout Počet milisekund, které se mají čekat na čtení nebo zápis socketu. Nula [Nekonečný časový limit] Uzavřené připojení

Viz také

Nastavení vlastností připojení