Основные сведения о свойствах времени ожидания в драйвере 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
это решение может отличаться.
Для быстро реагирующих приложений loginTimeout
queryTimeout
и должны иметь относительно низкие значения. Аналогичным образом следует также задать низкое значение, cancelQueryTimeout
чтобы драйвер не ждал слишком долго, пока сервер подтвердит отмену запроса при queryTimeout
превышении значения . Наконец, socketTimeout
следует настроить защиту от слишком долгого ожидания драйвера во время любого сценария, когда подключение к серверу нарушено (сетевое прерывание, сбой сервера и т. д.).
Сводка по свойствам
Свойство | Описание | По умолчанию | Результат подключения |
---|---|---|---|
loginTimeout |
Время в секундах, по истечении которого драйвер инициирует превышение времени ожидания неудачного подключения. | 30 секунд [11,2+], в противном случае — 15 секунд |
Закрытое подключение |
queryTimeout |
Время ожидания в секундах перед отменой запроса. | -1 [бесконечное время ожидания] | Открыть подключение |
cancelQueryTimeout |
Время ожидания подтверждения отмены QueryTimeout в секундах. | -1 [бесконечное время ожидания] | Закрытое подключение |
lockTimeout |
Время ожидания в миллисекундах до того, как база данных вернет ошибку времени ожидания блокировки. | -1 [бесконечное время ожидания] | Открыть подключение |
socketTimeout |
Количество миллисекундах, ожидающее чтения или записи сокета. | Ноль [бесконечное время ожидания] | Закрытое подключение |
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по