У меня есть 400 запросов SQL строки, которые бросают скручивание жгутов исключения 30 секунд
РТЫ 03113: конец файла на канале передачи
Ниже вещи отметить:
Беспокоящееся условие похоже на это:
AND UPPER (someMultiJoin.someColumn) LIKE UPPER ('%90936%')
Таким образом, мое предположение - то, что запрос становится завершенным от стороны сервера, по-видимому, потому что его идентифицированный как пожиратель ресурсов.
Действительно ли мое предположение является соответствующим? Как я должен пойти собирающийся решить эту проблему?
Править: Я пытался получить объяснить план дефектного запроса, но объяснить запрос плана также дает мне РТЫ 03 113 ошибок. Я понимаю, что мой запрос не очень производителен, но почему это должно быть причиной РТОВ 03 113 ошибок. Я пытаюсь выполнить запрос от жабы и нет никакого журнала предупреждений или не прослеживает сгенерированный, моей версией дб является выпуск 9.2.0.7.0 Oracle9i Enterprise Edition - Производство
Это означает, что вас отключили. Вряд ли это из-за того, что вы тратите много ресурсов.
Я видел, когда соединение с БД выполняется через NAT, и из-за отсутствия трафика он закрывает туннель и, таким образом, разрывает соединение. Обычно, если вы используете пул соединений, вы этого не получите.
Как сказал @Daniel, сетевое соединение с сервером прерывается. Вы можете взглянуть на Конец файла на канале связи , чтобы узнать, есть ли в нем какие-либо полезные предложения.
Делитесь и наслаждайтесь.
Один из возможных Причина этой ошибки - сбой потока на стороне сервера. Проверьте, создал ли сервер Oracle какие-либо файлы трассировки или зарегистрировал ли какие-либо ошибки в своем журнале предупреждений.
Вы говорите, что удаление одного условия из запроса устраняет проблему. Как долго выполняется запрос без этого условия? Проверяли ли вы планы выполнения для обеих версий запроса, чтобы увидеть, не приводит ли добавление этого условия к выбору неэффективного плана?
Судя по имеющейся информации, это похоже на внутренний сбой, как предположил Дэйв Коста некоторое время назад. Удалось ли вам проверить журналы сервера?
Можете ли вы получить план с , установив автоматическую трассировку только с объяснением
? Это происходит из SQL * Plus локально или только при удаленном подключении? Конечно, похоже, что виновником может быть ORA-600 на сервере, особенно если он находится во время синтаксического анализа. Кажется, что успешный запуск занимает больше времени, чем неудачный, что исключает проблему с сетью. Я подозреваю, что это происходит довольно быстро, но клиенту требуется до 30 секунд, чтобы отказаться от неработающего соединения, или сервер так долго записывает файлы трассировки и файлы ядра.
Что, вероятно, оставляет вам возможность внести исправления (если вы можете найти соответствующее исправление для конкретного ORA-600 на Metalink) или обновить БД; или переписав запрос, чтобы этого избежать. Вы можете получить некоторые идеи о том, как это сделать, в Metalink, если это известная ошибка. Если вам повезет, это может быть просто подсказка, если дополнительное условие оказывает неожиданное влияние на план. Является ли someMultiJoin.someColumn
частью индекса, который используется в успешной версии? Возможно, ВЕРХНИЙ
сбивает его с толку, и вы могли бы убедить его вернуться к успешному плану, намекнув ему все равно использовать индекс, но это, очевидно, довольно спекулятивно.
Часто это ошибка оптимизатора на основе затрат со сложными запросами.
Что вы можете сделать, так это изменить план выполнения. Например. используйте WITH , чтобы извлечь некоторые подзапросы. Или используйте подсказку SELECT / * + RULE * /, чтобы запретить Oracle использовать CBO. Также помогает сброс статистики, потому что затем Oracle использует другой план выполнения.
Если вы можете обновить базу данных, выполните тестовую установку 9.2.0.8 и посмотрите, исчезла ли там ошибка.
Иногда помогает сделать дамп схемы, отбросить все в нем и снова импортировать дамп.
У меня были похожие проблемы с разрывом соединения с некоторыми вариантами запроса. В моем случае при определенных обстоятельствах при использовании rownum соединения прерывались. Оказалось, что это ошибка, которую можно было исправить, изменив определенный параметр конфигурации Oracle Database. Мы нашли обходной путь, пока не удалось установить патч. Хотел бы я вспомнить больше подробностей или найти старый адрес электронной почты по этому поводу, но я не знаю, помогут ли подробности решить вашу проблему. Я публикую это просто, чтобы сказать, что вы, вероятно, столкнулись с ошибкой, и если у вас есть доступ к сайту поддержки Oracle (support.oracle.com), вы, вероятно, обнаружите, что другие сообщили об этом.
Изменить: Я быстро ознакомился с поддержкой Oracle. Существует более 1000 ошибок, связанных с ORA-03113, но я нашел одну, которая может быть применима:
Ошибка 5015257: ОТКАЗ ЗАПРОСА С ORA-3113 И COREDUMP, КОГДА QUERY_REWRITE_ENABLED = 'TRUE'
Подводя итог:
Другая возможность:
Ошибка 3659827: ORA-3113 ОТ ДЛИННОГО ЗАПУСКА
Вы можете безопасно удалить «ВЕРХНИЙ» в обеих частях, если вы используете например с числами (без учета регистра), это может сократить время запроса на проверку аналогичного предложения
AND UPPER (someMultiJoin.someColumn) LIKE UPPER ('%90936%')
Равно:
AND someMultiJoin.someColumn LIKE '%90936%'
ВЕРХНИЙ не влияет на числа (а% не зависит от регистра символов).