Oracle: использование материализованного представления для избежания времени ожидания чтения сокета; - PullRequest
1 голос
/ 07 апреля 2020

У нас есть весеннее приложение. Как правило, мы должны выполнить несколько SQL запросов для представления, представленного нам Клиентом. В одном сценарии наши запросы работают нормально, но подсчет (*) по тем же запросам создает проблемы. Он возвращает org.springframework.dao.RecoverableDataAccessException - StatementCallback;

IO Error: Socket read timed out; nested exception is java.sql.SQLRecoverableException: IO Error: Socket read timed out]

Мы попросили клиента увеличить свойство oracle.jdbc.ReadTimeout.

Он вместо этого предложил предоставить материализованное представление.

Может ли материализованное представление помочь в подобных ситуациях (где запросы подсчета приводят к тайм-аутам.)

Как материализованные представления могут быть использованы для повышения производительности запросов

1 Ответ

1 голос
/ 08 апреля 2020

Материализованное представление - отличное решение вашей проблемы. Материализованные представления хранят результаты запросов в таблице и могут значительно повысить производительность. Похоже, ваш клиент оказывает вам огромную услугу, поскольку он будет отвечать за поддержку объектов, поддерживающих запрос.

Единственный потенциальный недостаток зависит от того, как они реализуют материализованное представление. Если они создадут sh материализованное представление с быстрой ссылкой, оно автоматически сохранит правильный результат после каждого изменения данных. Но есть много ограничений для быстрого обновления sh материализованных представлений, и, скорее всего, ваш клиент предоставит полный refre sh материализованных представлений, который должен иметь расписание. Если они предоставляют полное обновление sh материализованного представления, убедитесь, что приложение может работать со старыми данными.

(или, конечно, настройки тайм-аута базы данных все еще могут быть неподходящими. Это может быть плохой профиль, плохой профиль Параметр sq lnet .ora, неправильная настройка диспетчера ресурсов, ошибка ORA-600 и т. д. c. Возможно, вы захотите выяснить причину c, указавшую, почему ваш запрос истек. Не думаю, что клиент пытается скрыть что-то от вас: ужасный администратор базы данных просто сказал бы: «Не повезло, исправьте ваш глупый запрос». Тот факт, что вам предлагают материализованное представление, является хорошим признаком того, что они действительно пытаются решить проблему. .)

...