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


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

По-моему result_cache - это вполне конкретный серверный кэш результатов. Ничего подобного на клиенте нет и быть не может - ведь откуда клиенту знать, что данные не изменились с момент последнего кэширования? Это может знать только оракл.
...
Рейтинг: 0 / 0
05.11.2017, 05:50
    #39547940
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное использование client result cache и server result cache
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
05.11.2017, 06:40
    #39547941
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное использование client result cache и server result cache
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
05.11.2017, 07:22
    #39547944
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное использование client result cache и server result cache
А, сорри, есть еще клиентское кэширование, был неправ.

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

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

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
12.11.2017, 17:58
    #39551757
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное использование client result cache и server result cache
Мне вообще смысл этих кэшей для прикладной системы не очень понятен. Или жуткий бизнес-специфик или программисты очень сильно старались и думали той частью тела, на которой обычно сидят.

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

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
13.11.2017, 09:34
    #39551955
orac_list
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное использование client result cache и server result cache
Могут быть 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
14.11.2017, 10:56
    #39552737
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное использование client result cache и server result cache
Я в итоге разобрался. Там не всё так грустно.
...
Рейтинг: 0 / 0
14.11.2017, 11:33
    #39552769
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное использование client result cache и server result cache
Shtock,

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

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

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

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

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

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


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