powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / одновременное использование client result cache и server result cache
21 сообщений из 21, страница 1 из 1
одновременное использование client result cache и server result cache
    #39547893
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, клиентский и серверный кэш одновременно могут использоваться как говорит оракловая документация. Но, предположим, для части запросов я хочу использовать серверный, а для другой клиентский. И тот и тот включаются хинтом /*+ result_cache*/. Как-то можно jdbc-драйверу указать, что надо использовать именно серверный или именно клиентский кэш?


При этом не только меня это интересует , но найти ответ я не смог.
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39547937
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtock,

По-моему result_cache - это вполне конкретный серверный кэш результатов. Ничего подобного на клиенте нет и быть не может - ведь откуда клиенту знать, что данные не изменились с момент последнего кэширования? Это может знать только оракл.
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39547940
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtock,

Не очень понятно, зачем?

Valergrad,

Беглый поиск в гугле, выдает "The Oracle Call Interface (OCI) client result cache is a memory area inside a client process that caches SQL query result sets for OCI applications. This client cache exists for each client process and is shared by all sessions inside the process. Oracle recommends client result caching for queries of read-only or read-mostly tables."


По запросу "Oracle JDBC result cache" гугл ничего мне не нашел.

Но, вроде, Prepared Statement'ы кешируются и соответственно кешируются все выделенные им ресурсы. В свое время с этим разбирался, но это скорее было проблемой, чем плюсом. Т.к. JDBC Prepared Statement'ы живут в рамках соединения, а современные приложения часто не открывают соединение, а просто берут его из пула случайным образом, то кэш Prepared Statement'ов забивался полностью случайными запросами (соединение фактически собирало мусор по всем модулям приложения) и получался жуткий overhead ресурсов.

Можно ли для Prepared Statement'а кешировать и итоговый Result Set, не помню. В практической ценности такой операции крайне сомневаюсь, если приложения работает поверх какого нибудь пула соединений. Т.к. кеш будет мгновенно замусориваться.

IMHO & AFAIK
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39547941
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OCI документация уверяет:

"This function (OCIStmtPrepare2) can be used with and without statement caching. This is determined at the time of connection or session pool creation. If caching is enabled for a session, then all statements in the session have caching enabled, and if caching is not enabled, then all statements are not cached ."

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

"OCI_PREP2_CACHE_SEARCHONLY - In this case, if the statement is not found (a NULL statement handle is returned), you must take further action. If the statement is found, OCI_SUCCESS is returned. Otherwise, OCI_ERROR is returned."

но практический смысл этой операции от меня ускользает.

Избежать попадание запроса в client result cache похоже что и никак (см. первую цитату)

IMHO

p.s. сам с этим не сталкивался
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39547944
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, сорри, есть еще клиентское кэширование, был неправ.

Тогда не знаю, довольно мутно написано. Вероятно можно управлять через лимиты размеров, но на уровне отдельного sql - не видно как.
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39547951
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, для jdbc он тоже есть. Можно найти именно по документации про драйвера. Но пока так и не ясно, можно ли...
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39547952
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ценность понятна. Клиентский кэш консистентен через некоторое время, а серверный постоянно. Для некоторых вещей это важно, я думаю.
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39548132
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем то я окончательно запутался.

Абсолютно неясно, как трактовать фразу

OracleWhen a transaction modifies the data or metadata of any of the database objects used to construct that cached result, invalidation will be sent to the OCI client on its subsequent round trip to the server. If the OCI application does no database calls for a period of time, then the client cache lag setting will force the next OCIStmtExecute() call to make a database call to check for such invalidations.


то есть неясен смысл этого lag. Идёшь в БД любым statement и тебе приходит инвалидация. Наступает cache lag и этот же любой statement проверяет эти же инвалидации. Т.е. масло масляное.
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39551757
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне вообще смысл этих кэшей для прикладной системы не очень понятен. Или жуткий бизнес-специфик или программисты очень сильно старались и думали той частью тела, на которой обычно сидят.

Т.к. приход от клиента одинаковых запросов да еще и в "близкое" время, это скорее похоже на ошибки разработки

Shtock...
то есть неясен смысл этого lag. Идёшь в БД любым statement и тебе приходит инвалидация. Наступает cache lag и этот же любой statement проверяет эти же инвалидации. Т.е. масло масляное.
Смысл lag (при этом дефолтно вроде вообще 3 сек., т.е. очень маленький) вполне понятен - банальное энергосбережение в ситуации если прикладной софт "отключился" (например для UI приложения - пользователь ушел на обед, а из приложения не вышел). В противном случае мы всегда будем забивать сеть пакетами для валидации кеша, а все технологии энергосбережение ОС пойдет коту под хвост.

Другое дело, что действительно получается масло-масленное и жуткий overhead на сеть, кроме валидации при round-trip'ах инициализирумых со стороны приложения, еще и round-trip'ы со стороны сервера отсылаются для валидации кеша.

Единственный бизнес применение, которое я могу себе _вообразить_ - real-time, когда задержка в 50-100 ms. уже критична. Тогда, скорее всего, такое кэширование и дублирование валидации может сократить задержки (latence). Ну или какие либо алгоритмы сервисов построенные на периодической опросе и, опять таки, с бизнес критичностью по времени (но не очень понятно насколько и чем при такой архитектуре думали программисты)

Но сам я ни разу с real-time приложениями завязанными на СУБД (а тем более Oracle) не сталкивался.
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39551955
orac_list
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Могут быть side эффекты

Effect of client_result_cache_size On Client Applications Or OCI Based Applications (Doc ID 1300727.1)

'client_result_cache_size' is stored on the Client side. Once that limit have reached to the maximum then all other subsequent connections will fail. That is why it is recommended to set to 0 for high volume of transactions in which case there will be no caching. Even if there's a limit it gets reset only when the Database is bounced.

What v$ Tables Track The Usage Of New Result Cache Feature In 11gR1 (11.1.0.x) And Higher ? (Doc ID 942367.1)

tracking of cache statistics

client_result_cache_stats$

CLIENT_RESULT_CACHE_STATS$:

Stores cache settings and memory usage statistics for the client result caches obtained from the OCI client processes. This statistics table has entries for each client process that is using result caching. After the client processes terminate, the database removes their entries from this table.
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39552737
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в итоге разобрался. Там не всё так грустно.
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39552769
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtock,

А чуть подробнее можно?
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39552790
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну скажем так я понял как он работает. как задействовать 2 кэша одновременно - неясно. на днях напишу приложение на яве - попробую.
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39552791
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если упрощённо говоря когда идут простые запросы в интервал до Invalidation lag, которые не result cache, то они приносят с собой айдишники резалтсетов которые надо инвалидировать. если же прошёл этот интервал сам драйвер идёт в оракл и просит эти айдишники. ключевое - он не перечитывает сам себя, т.е. великого overhead нет.
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39552937
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне вообще не очень понятен смысл кеширования на стороне OCI драйвера

Прикрутить к приложению или банальную LRUMap из Apache Commons (лично я бы на нем остановился), или, в случае желания делать "солидно" ( TM ), EhCache, кэшь хибернайта или прочее - получиться в приложении 100% управляемый кэш для _бизнес_ данных (а не убогих селектов). Занафига мучить этим Oracle?

А то у меня подозрение, что сначала программисты с тяжелой стадией "хибернейт головного мозга" написали приложение, которое 100500 мусорных запросов генерирует, а теперь с помощью subj пытаются заставить "крокодила летать" ((((

p.s. в свое время пытался смотреть на EhCache, но для меня не подходило. Мне нужны были очень хитрые правила инвалидации кэша. Прикрутить к EhCache свои правила инвалидации, мне показалось значительно сложнее, чем взять банальный LRUMap, дописать 10-50 строк кода и сделать собственный класс кэша. И проще, и надежнее.
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39552945
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Leonid KudryavtsevLRUMap...hCacheкак они проверяют изменения в данных? или это только для случаев, когда никаких других источников изменений нет, кроме самого приложения?
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39553103
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Мне вообще не очень понятен смысл кеширования на стороне OCI драйвера

а чем оно глобально отличается от кэширования в хазелькасте? тарантуле? Ничем...
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39553106
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кроме единого ядра детектиции измений, которое весьма сильное :)
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39665713
Dima Ry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtock,
вот тут товарищ делится опытом по этой теме
https://habr.com/company/oleg-bunin/blog/414401/
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39665731
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не смутило, что ник докладчика удивительно похож на ник топикстартера?
...
Рейтинг: 0 / 0
одновременное использование client result cache и server result cache
    #39665795
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima RyShtock,
вот тут товарищ делится опытом по этой теме
https://habr.com/company/oleg-bunin/blog/414401/

Ну они там подошли с умом к проблеме )
авторМы подумали и решили, что пойдем в продакшен рекомендательной системы с такими вещами:
• Мы не будем кэшировать все наши таблицы, возьмем только нужные.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / одновременное использование client result cache и server result cache
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]