Каков ваш опыт использования функции кэширования результатов Oracle? [закрыто]

Недавно мы обновились до Oracle 11g, и наш администратор БД предложил использовать кэширование результатов для повышения производительности некоторых наших запросов. Быстрый поиск Google показывает, что есть некоторая критика этой функции и того, как она масштабируется. Как и в любой схеме кэширования, будут ситуации, в которых он выигрывает большое время, и другие ситуации, когда он терпит неудачу с треском. Наш паттерн использования (многократный запрос базы данных на один и тот же бит информации, который редко изменяется), кажется, хорошо подходит для кэширования результатов.

Был ли у вас какой-либо опыт работы с этой функцией, положительный или отрицательный?

12.12.2008 20:54:18
3 ОТВЕТА
РЕШЕНИЕ

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

Вы действительно хотите только кешировать результаты, которые - являются дорогостоящими для запуска (в противном случае предельное преимущество кеширования результата, а не просто кеширования данных в буферном кеше, как это делает Oracle, минимально. Кэширование поиска в первичном ключе из одной строки вероятно, никогда не будет полезным) - постоянны в течение разумного периода времени (гарантируя, что кто-то другой может использовать кеш) - справочные таблицы, которые в основном статичны (гарантируя, что вам не придется тратить много времени на аннулирование кэшированных результатов, когда ты делаешь DML против таблицы)

2
12.12.2008 22:03:28

Наш первый (и очень предварительный) тест показывает значительные перспективы. Поскольку попадание в кэш запроса, который мы тестируем, позволяет избежать полного сканирования таблицы (~ 3,5 миллиона строк), даже несколько попаданий легко окупят кэширование.

Пока что мы делаем только один запрос, который кажется довольно безопасным. Я хотел бы настроить базу данных для кэширования всех результатов, но это может быть более рискованным.

1
12.12.2008 21:53:53

В среде RAC я всегда видел возвращаемое значение действительным в одном и том же экземпляре, но когда это использовалось с функциями, которые часто обновляли данные таблицы, у нас были жалобы на то, что значение устарело, когда функция была вызвана в другом экземпляре, чем экземпляр, на котором было выполнено обновление.

1
24.07.2012 18:39:04