Oracle SQL из Java с использованием Spring ничего не возвращает и не выдает исключение - PullRequest
2 голосов
/ 11 апреля 2011

У меня есть Java-код, который использует Spring для подключения и выполнения sql на БД Oracle. У меня есть запрос, который занимает много времени (20 минут, а иногда и больше). У меня есть Служба Исполнителя, и у нее есть Поток, который выполнит запрос и обработает результаты. Если я установлю таймаут для БД и Spring, система будет корректно истекать, но до этого ничего больше не вернется. Если я выполню запрос из SQL plus, он вернет значения. Время ожидания устанавливается в 3 раза больше, чем требуется для выполнения в SQL Developer.

Есть идеи!?

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

20 минут на запрос в Oracle? Держу пари, у вас нет соответствующих индексов для столбцов в предложении WHERE.

Мертвая распродажа - это РАЗЪЯСНИТЬ ПЛАН по запросу. Если вы видите TABLE SCAN, примите соответствующие меры.

Если вы можете выполнить тот же запрос в SQL * Plus и увидеть, что он возвращается в разумные сроки, тогда я ошибаюсь, и проблема связана с чем-то еще, что вы сделали в коде Java.

Не понимаю, зачем вам нужен отдельный поток для запроса. Я запускаю код прямо, без потока и смотрю, как он себя ведет. Если вы не проиндексированы должным образом, добавьте немного; если запрос возвращает слишком много данных, добавьте предложения WHERE, чтобы ограничить его. Вы приняли необычайные меры, не понимая, в чем причина.

1 голос
/ 11 апреля 2011

Предполагая, что ваш запрос Spring использует переменные связывания, используете ли вы переменные связывания при выполнении запроса в SQL * Plus / SQL Developer?Или вы используете литералы?

Какую версию Oracle вы используете?

Проверяли ли вы, отличаются ли планы запросов для двух сред?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...