|
|
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Народ, клиентский и серверный кэш одновременно могут использоваться как говорит оракловая документация. Но, предположим, для части запросов я хочу использовать серверный, а для другой клиентский. И тот и тот включаются хинтом /*+ result_cache*/. Как-то можно jdbc-драйверу указать, что надо использовать именно серверный или именно клиентский кэш? При этом не только меня это интересует , но найти ответ я не смог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2017, 23:30 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Shtock, По-моему result_cache - это вполне конкретный серверный кэш результатов. Ничего подобного на клиенте нет и быть не может - ведь откуда клиенту знать, что данные не изменились с момент последнего кэширования? Это может знать только оракл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2017, 05:25 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2017, 05:50 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
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. сам с этим не сталкивался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2017, 06:40 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
А, сорри, есть еще клиентское кэширование, был неправ. Тогда не знаю, довольно мутно написано. Вероятно можно управлять через лимиты размеров, но на уровне отдельного sql - не видно как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2017, 07:22 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Не, для jdbc он тоже есть. Можно найти именно по документации про драйвера. Но пока так и не ясно, можно ли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2017, 11:04 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
А ценность понятна. Клиентский кэш консистентен через некоторое время, а серверный постоянно. Для некоторых вещей это важно, я думаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2017, 11:06 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
В общем то я окончательно запутался. Абсолютно неясно, как трактовать фразу 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 проверяет эти же инвалидации. Т.е. масло масляное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2017, 22:55 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Мне вообще смысл этих кэшей для прикладной системы не очень понятен. Или жуткий бизнес-специфик или программисты очень сильно старались и думали той частью тела, на которой обычно сидят. Т.к. приход от клиента одинаковых запросов да еще и в "близкое" время, это скорее похоже на ошибки разработки Shtock... то есть неясен смысл этого lag. Идёшь в БД любым statement и тебе приходит инвалидация. Наступает cache lag и этот же любой statement проверяет эти же инвалидации. Т.е. масло масляное. Смысл lag (при этом дефолтно вроде вообще 3 сек., т.е. очень маленький) вполне понятен - банальное энергосбережение в ситуации если прикладной софт "отключился" (например для UI приложения - пользователь ушел на обед, а из приложения не вышел). В противном случае мы всегда будем забивать сеть пакетами для валидации кеша, а все технологии энергосбережение ОС пойдет коту под хвост. Другое дело, что действительно получается масло-масленное и жуткий overhead на сеть, кроме валидации при round-trip'ах инициализирумых со стороны приложения, еще и round-trip'ы со стороны сервера отсылаются для валидации кеша. Единственный бизнес применение, которое я могу себе _вообразить_ - real-time, когда задержка в 50-100 ms. уже критична. Тогда, скорее всего, такое кэширование и дублирование валидации может сократить задержки (latence). Ну или какие либо алгоритмы сервисов построенные на периодической опросе и, опять таки, с бизнес критичностью по времени (но не очень понятно насколько и чем при такой архитектуре думали программисты) Но сам я ни разу с real-time приложениями завязанными на СУБД (а тем более Oracle) не сталкивался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2017, 17:58 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Могут быть 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2017, 09:34 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Я в итоге разобрался. Там не всё так грустно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2017, 10:56 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Shtock, А чуть подробнее можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2017, 11:33 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
ну скажем так я понял как он работает. как задействовать 2 кэша одновременно - неясно. на днях напишу приложение на яве - попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2017, 11:58 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Если упрощённо говоря когда идут простые запросы в интервал до Invalidation lag, которые не result cache, то они приносят с собой айдишники резалтсетов которые надо инвалидировать. если же прошёл этот интервал сам драйвер идёт в оракл и просит эти айдишники. ключевое - он не перечитывает сам себя, т.е. великого overhead нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2017, 11:59 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Мне вообще не очень понятен смысл кеширования на стороне OCI драйвера Прикрутить к приложению или банальную LRUMap из Apache Commons (лично я бы на нем остановился), или, в случае желания делать "солидно" ( TM ), EhCache, кэшь хибернайта или прочее - получиться в приложении 100% управляемый кэш для _бизнес_ данных (а не убогих селектов). Занафига мучить этим Oracle? А то у меня подозрение, что сначала программисты с тяжелой стадией "хибернейт головного мозга" написали приложение, которое 100500 мусорных запросов генерирует, а теперь с помощью subj пытаются заставить "крокодила летать" (((( p.s. в свое время пытался смотреть на EhCache, но для меня не подходило. Мне нужны были очень хитрые правила инвалидации кэша. Прикрутить к EhCache свои правила инвалидации, мне показалось значительно сложнее, чем взять банальный LRUMap, дописать 10-50 строк кода и сделать собственный класс кэша. И проще, и надежнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2017, 16:02 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevLRUMap...hCacheкак они проверяют изменения в данных? или это только для случаев, когда никаких других источников изменений нет, кроме самого приложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2017, 16:07 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
>>Мне вообще не очень понятен смысл кеширования на стороне OCI драйвера а чем оно глобально отличается от кэширования в хазелькасте? тарантуле? Ничем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2017, 20:26 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
кроме единого ядра детектиции измений, которое весьма сильное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2017, 20:28 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Shtock, вот тут товарищ делится опытом по этой теме https://habr.com/company/oleg-bunin/blog/414401/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 09:36 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Не смутило, что ник докладчика удивительно похож на ник топикстартера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 09:51 |
|
||
|
одновременное использование client result cache и server result cache
|
|||
|---|---|---|---|
|
#18+
Dima RyShtock, вот тут товарищ делится опытом по этой теме https://habr.com/company/oleg-bunin/blog/414401/ Ну они там подошли с умом к проблеме ) авторМы подумали и решили, что пойдем в продакшен рекомендательной системы с такими вещами: • Мы не будем кэшировать все наши таблицы, возьмем только нужные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 10:44 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=109&tid=1883801]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 256ms |
| total: | 414ms |

| 0 / 0 |
