Основные сведения о свойствах времени ожидания в драйвере JDBC

Скачать драйвер JDBC

Параметры времени ожидания в драйвере JDBC можно использовать для определения приоритета скорости реагирования приложения. По умолчанию большинство тайм-аутов драйвера уделяют приоритетное внимание ожиданию результата, чтобы обеспечить согласованность данных. Убедитесь, что выбрано время ожидания, соответствующее потребностям вашего приложения.

Для начального подключения loginTimeout используется:

  • loginTimeout — это время в секундах, в течение которого драйвер ожидает установления подключения к серверу. Если эта сумма превышена, возвращается ошибка и открытое подключение не устанавливается. Нулевое значение указывает, что время ожидания является системным временем ожидания по умолчанию, которое составляет 30 секунд в версиях 11.2 и более поздних. Для версий 10.2 и ниже время ожидания по умолчанию составляет 15 секунд. Любое ненулевое значение — это количество секунд, в течение которых драйвер должен ожидать, прежде чем истекло время ожидания при сбое подключения. Если у вас постоянно возникают проблемы с установкой подключения к драйверу JDBC, может потребоваться увеличить это время ожидания до 90 или даже 120 секунд.

После установки queryTimeoutподключения во время выполнения инструкций используются , cancelQueryTimeoutи lockTimeout . socketTimeout используется для любого взаимодействия драйвера с сервером.

  • queryTimeout — это время в секундах, когда драйвер после отправки команды выполнения на сервер будет ожидать получения ответа от сервера с данными. Если это время превышено, команда отменяется. Превышение этого времени ожидания не приводит к закрытию подключения. Значение по умолчанию — 1, что означает бесконечное время ожидания.
  • cancelQueryTimeout — это время в секундах, когда драйвер ожидает подтверждения queryTimeout отмены с сервера, прежде чем принудительно прекратить или закрыть подключение. То есть драйвер ожидает общее количество cancelQueryTimeout плюс queryTimeout секунд, прежде чем соединение будет закрыто. Если задать для этого времени ожидания ненулевое значение, приложения могут оставаться в состоянии реагирования в случае сбоя сети или связи с сервером, когда истекло время ожидания запроса. Значение по умолчанию для этого свойства равно -1, что является бесконечным временем ожидания.
  • lockTimeout — это время ожидания освобождения блокировки в случаях, когда выполняется оператор блокировки. Превышение этого времени ожидания не приводит к закрытию подключения. Значение по умолчанию для этого свойства равно -1, что является бесконечным временем ожидания.
  • socketTimeout применяется ко всем соединениям сокета с сервером. Если сервер прекращает взаимодействие с драйвером, не подтверждая данные или не отвечая на него, драйвер ожидает значения socketTimeout , прежде чем закрыть подключение. Если задать для этого времени ожидания ненулевое значение, приложения могут оставаться в состоянии реагирования в случае сбоя сети или связи с сервером. Значение по умолчанию — 0, что означает бесконечное время ожидания. Убедитесь, что socketTimeout значение больше, чем queryTimeout , чтобы избежать исключений времени ожидания сокета во queryTimeout время окна. Аналогичным образом убедитесь, что socketTimeout значение больше, чем cancelQueryTimeout , чтобы избежать исключений времени ожидания сокета во cancelQueryTimeout время окна.

Разумные значения времени ожидания для приложения зависят от приоритетов приложения. Установка более низких значений для времени ожидания придается приоритет скорости реагирования приложения, а не согласованности данных. По истечении времени ожидания приложения должны выбрать оптимальный вариант действий. Это решение основано на выполняемом действии базы данных. Например, для SELECT оператора может быть принято решение сообщить об ошибке пользователю или повторно подключиться и повторить попытку. Для INSERT операторов или UPDATE это решение может отличаться.

Для быстро реагирующих приложений loginTimeoutqueryTimeout и должны иметь относительно низкие значения. Аналогичным образом следует также задать низкое значение, cancelQueryTimeout чтобы драйвер не ждал слишком долго, пока сервер подтвердит отмену запроса при queryTimeout превышении значения . Наконец, socketTimeout следует настроить защиту от слишком долгого ожидания драйвера во время любого сценария, когда подключение к серверу нарушено (сетевое прерывание, сбой сервера и т. д.).

Сводка по свойствам

Свойство Описание По умолчанию Результат подключения
loginTimeout Время в секундах, по истечении которого драйвер инициирует превышение времени ожидания неудачного подключения. 30 секунд [11,2+],
в противном случае — 15 секунд
Закрытое подключение
queryTimeout Время ожидания в секундах перед отменой запроса. -1 [бесконечное время ожидания] Открыть подключение
cancelQueryTimeout Время ожидания подтверждения отмены QueryTimeout в секундах. -1 [бесконечное время ожидания] Закрытое подключение
lockTimeout Время ожидания в миллисекундах до того, как база данных вернет ошибку времени ожидания блокировки. -1 [бесконечное время ожидания] Открыть подключение
socketTimeout Количество миллисекундах, ожидающее чтения или записи сокета. Ноль [бесконечное время ожидания] Закрытое подключение

См. также

Настройка свойств подключения