jdb c DB2 queryTimeout не работает должным образом - PullRequest
0 голосов
/ 27 января 2020

Мы столкнулись с проблемой со свойством запроса времени ожидания на Db2, оно работает, когда мы запускаем приложение в WebSphere, затем мы перешли на Tomcat, эта проблема была недавно обнаружена очень длинным запросом, который зависает очень долго, пока Тайм-аут через 45 минут, некоторые части кода, которые мы имеем, как показано ниже, они не изменились с момента перехода на Tomcat:

    CallableStatement cs = statementFactory.createCallableStatement(getConnection(), source.getSQL(),
                statementConfig);
    cs.setQueryTimeout(10);
    boolean resultSetAvailable = cs.execute();
    if (resultSetAvailable) {
            resultSet = cs.getResultSet();
        } else {
            resultSet = CallableStatementParamsUtils.checkForOutResultSet(cs, storedProc);
        }

  • Я установил тайм-аут на 10 секунд , но это совсем не время ожидания, кто-нибудь знает почему?

  • Сложность в том, что драйвер Db2 не имеет открытого источника, не может его отладить. Как решить эту проблему с помощью Db2?

1 Ответ

0 голосов
/ 27 января 2020

В этом случае использование драйвера jdb c типа 4 помогло решить проблему.

Обратите внимание, что драйвер IBM db2 jdb c поддерживает трассировку для определения проблемы, как описано здесь .

При работе с проблемами jdb c с Db2 всегда полезно убедиться, что вы используете самую последнюю версию драйвера jdb c, доступную через эту страницу .

Из комментариев предыдущий драйвер jdb c был драйвером типа 2 (который поддерживает тайм-ауты запросов только в определенных c конфигурациях в качестве документов IBM в центре знаний Db2, примечания скопировано ниже).

Различные примечания IBM на этой странице , касающиеся поддержки queryTimeout в jdb c, являются обязательными для чтения, а именно:

  • Для DB2 for i этот метод (setQueryTimeout) поддерживается только для значения секунд 0.

  • Для IBM Data Server Driver для подключения JDB C и SQLJ типа 2 на Db2 для z / OS, Statement.setQuer yTimeout поддерживается только в том случае, если для свойства Connection или DataSource для свойства queryTimeoutInterruptProcessingMode установлено значение INTERRUPT_PROCESSING_MODE_CLOSE_SOCKET.

  • Для драйвера IBM Data Server для подключения JDB C и SQLJ типа 2 на Db2 на Linux, В системах 1052 * и Windows Statement.setQueryTimeout поддерживается, только если для свойства Connection или свойства DataSource queryTimeoutInterruptProcessingMode установлено значение INTERRUPT_PROCESSING_MODE_STATEMENT_CANCEL.

  • Для драйвера сервера данных IBM для JDB C SQLJ версии 4.0 и выше, Statement.setQueryTimeout поддерживается для следующих методов:

    Statement.execute Statement.executeUpdate Statement.executeQuery

  • Statement.setQueryTimeout поддерживается для Метод Statement.executeBatch, только если для свойства queryTimeoutInterruptProcessingMode установлено значение INTERRUPT_PROCESSING_MODE_CLOSE_SOCKET (2).

...