Потоки, нависающие над запросами JDBC Teradata - PullRequest
0 голосов
/ 16 мая 2011

Я использую JDBC для запроса сервера Teradata. Существует до 100 одновременных запросов, каждый из которых использует новое соединение и закрывает его в конце. После нескольких часов работы некоторые потоки, выполняющие запросы, зависают на неопределенное время. В конце концов требуется перезагрузка системы. Из проверки стеков вызовов я вижу, что потоки находятся в состоянии чтения сокета, и это происходит, когда готовит оператор или когда закрывает соединение :

Дело 1:

java.lang.Thread.State: RUNNABLE
               at java.net.SocketInputStream.socketRead0(Native Method)
               at java.net.SocketInputStream.read(SocketInputStream.java:129)
               at com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF.read(TDNetworkIOIF.java:649)
               at com.teradata.jdbc.jdbc_4.io.TDPacketStream.readStream(TDPacketStream.java:818)
               at com.teradata.jdbc.jdbc_4.statemachine.StatementReceiveState.action(StatementReceiveState.java:125)
               at com.teradata.jdbc.jdbc_4.statemachine.StatementController.runBody(StatementController.java:112)
               at com.teradata.jdbc.jdbc_4.statemachine.StatementController.run(StatementController.java:103)
               at com.teradata.jdbc.jdbc_4.Statement.executeStatement(Statement.java:340)
               at com.teradata.jdbc.jdbc_4.Statement.prepareRequest(Statement.java:507)
               - locked <0x00002aab4f787518> (a com.teradata.jdbc.jdbc_4.PreparedStatement)
               at com.teradata.jdbc.jdbc_4.PreparedStatement.<init>(PreparedStatement.java:66)
               at com.teradata.jdbc.jdbc_4.TDSession.createPreparedStatement(TDSession.java:723)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalPreparedStatement.<init>(TeraLocalPreparedStatement.java:89)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalConnection.prepareStatement(TeraLocalConnection.java:333)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalConnection.prepareStatement(TeraLocalConnection.java:152)
...

Случай 2:

java.lang.Thread.State: RUNNABLE
               at java.net.SocketInputStream.socketRead0(Native Method)
               at java.net.SocketInputStream.read(SocketInputStream.java:129)
               at com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF.read(TDNetworkIOIF.java:649)
               at com.teradata.jdbc.jdbc_4.io.TDPacketStream.readStream(TDPacketStream.java:818)
               at com.teradata.jdbc.jdbc_4.io.TDPacketStream.readStream(TDPacketStream.java:794)
               at com.teradata.jdbc.jdbc.GenericLogOffRspState.action(GenericLogOffRspState.java:66)
               at com.teradata.jdbc.jdbc.GenericLogoffController.run(GenericLogoffController.java:43)
               - locked <..> (a com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF)
               at com.teradata.jdbc.jdbc_4.TDSession.close(TDSession.java:476)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalConnection.close(TeraLocalConnection.java:259)
...

Я использую драйвер JDBC Teradata версии 13.10.00.10.

Есть идеи, почему это происходит? Этот вопрос очень болезненный для нас, и мы будем благодарны за любую помощь.

Спасибо!

1 Ответ

2 голосов
/ 16 мая 2011

Вы пробовали обновить до последней версии патча драйвера JDBC?13.10.00.18 был выпущен 2011-04-12.Релиз 13.10.00.15 включал исправление для исправления проблемы с многопоточными параллельными попытками входа в систему, вызывающими GSSException: Ошибка во время вычисления MIC.

Если это не решит проблему, и ваш клиент / компания является клиентом Teradata, я бы посоветовал открыть инцидент в Центре глобальной поддержки Teradata.

...