Хранение данных в виде кэша в базе данных Oracle в течение определенного времени - PullRequest
1 голос
/ 02 апреля 2012

У меня запрос оракула, который занимает от 10 до 20 минут , но я хочу, чтобы пользователь немедленно увидел эти данные. Данные хранятся в течение определенного времени, а данные в реальном времени , и каждый час добавляются новые данные. Можно ли кэшировать эти данные, чтобы запрос занимал меньше времени или не занимал?

Note:I am using linked server

1 Ответ

2 голосов
/ 02 апреля 2012

Да, это одна из изящных новых функций 11g. Oracle строит в RESULT_CACHE_MODE. Этот режим позволяет нам кэшировать результирующие наборы запросов.

Есть три способа инициализации этого. 1. Установить как переменную sys (изменить систему) 2. переменная текущего сеанса (изменить сеанс) 3. используйте подсказку в вашем конкретном запросе

По умолчанию этот параметр установлен на РУЧНОЙ. Вы можете проверить, выполнив этот запрос в сеансе SQL.

SQL> SELECT value FROM v$parameter WHERE name = 'result_cache_mode';

Мое личное предпочтение - сохранить значение по умолчанию MANUAL и подсказывать запрос, который я хочу кэшировать, поскольку у меня есть только несколько из них, которые я хочу кэшировать. Таким образом, я могу выбрать, какой запрос кэшируется, и ни один не будет кэширован по умолчанию.

Для кеширования определенного запроса вам нужно установить подсказку / * + RESULT_CACHE * / в вашем запросе. Вот пример.

SELECT /*+ RESULT_CACHE */ foo,
       bar,
       lorem
FROM   dual
WHERE  foo > 10;

Надеюсь, это поможет вам!

EDIT:

Вы также должны проверить эти системные переменные, чтобы увидеть, является ли размер приемлемым, и вы также можете увидеть и установить срок действия в системной переменной result_cache_remote_expiration

SELECT name, value, isdefault
FROM   v$parameter
WHERE  name LIKE 'result_cache%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...