|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Доброго дня господа ! Имею Пользователь №1 -> ввел текущую дату -> выполнил запрос -> результат в таблицу Пользователь №2 -> ввел текущую дату -> выполнил запрос -> результат в таблицу (запрос реально не выполнился вернулись старые данные) Пользователь №3 -> ввел другую дату -> выполнил запрос -> результат в таблицу (запрос выполнился т.к. даты не совпали) Пользователь №4 -> ввел текущую дату -> выполнил запрос -> результат в таблицу (запрос выполнился т.к. даты не совпали) Т.е. - создается операционный пользовательский кеш для последней введенной даты Реализация в коде (архитектуре не менять - это представление пользователя, пользователь будет инициировать смену даты) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
Суть вопроса Смена даты и загрузка данных из SV_A1 в SV_A2 проходит корректно, но итоговая визуализация в МОМЕНТ изменение даты остается старой только при повторном запуске данные обновляются. Как и чем на это можно повлиять ? Какими другими способами можно решить задачу, архитектуру не менять, на два предложения НЕ разбивать (смотрю в сторону hint RESULT_CASHE.........) Версия Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production Заранее благодарен ! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2021, 15:50 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_X, Задай себе 2 вопроса. Что такое согласованность данных? На какой момент согласуются данные в запросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2021, 17:20 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
AlexFF__|, Нет возражений - согласен ! Как можно обойти такую ситуацию ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2021, 17:23 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
AlexFF__|, Или же в момент смены даты можно делать 1.визуализировать ОРИГИНАЛ запроса 2.операция сохранения этого запроса В момент повтора 2. виза-ть сохраненную ранее копию ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2021, 17:58 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
А есть ли возможность из with function сделать ссылку на with query Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 03:10 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_X, Ну типа того - а в целом ФИГНЯ Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 14:33 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_X, Господа может есть еще какие-то идеи ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 14:48 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
1) https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/RESULT_CACHE-clause.html#GUID-7B0FFFDF-C953-46E5-9FD6-C41DFBDE1B0B 2) https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6002.htm#:~:text=A materialized view is a,views, and other materialized views.&text=You can select data from,from a table or view. Смысл изобретать велосипед - лично я не особо вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 15:30 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Спасибо за Ваши ссылки 1. относительно мат. представления Не совсем понимаю как Вы собираетесь инициализировать REFRESH Своим кодом изменений в базовых объектах я не осуществляю (SV_A1 = SV_A2 - изменяется контролируемо) Детализируйте пожалуйста примером. 2. относительно функции c директивой RESULT_CACHE Насколько понимаю сделать табельную функцию и эта выборка будет висеть в памяти - как к этой памяти будут иметь доступ другие пользователи - как долго будет висеть в памяти ? (перегружу кеш если будет массовое применение ) Спасибо за ответы ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 18:39 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Я не понимаю, что Вы пытаетесь "нагородить" Пока для меня выглядит как полная ахинея. Т.к., хотите ручками сделать кэш - ну так и делайте его на PL/SQL. У Вас же какая-то помесь ф-ций и View, выглядящая как "50 метров колючей проволоки" Если требование иметь View, то тогда не понятно "это представление пользователя, пользователь будет инициировать смену даты", КАК пользователь будет инициирать смену даты. Если же пользовать вызывает некий код, проще тогда все в коде и сделать, без всяких "представление пользователя". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 18:50 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, мне нужно совместить две операции смену даты и "свежую" реализация данных и сделать это в виде представления (с одним предложением) У меня один пользовательский RecordSet на уровне клиента Вот алгоритм Пользователь №1 -> ввел текущую дату -> выполнил запрос -> результат в таблицу Пользователь №2 -> ввел текущую дату -> выполнил запрос -> результат в таблицу (запрос реально не выполнился вернулись старые данные) Пользователь №3 -> ввел другую дату -> выполнил запрос -> результат в таблицу (запрос выполнился т.к. даты не совпали) Пользователь №4 -> ввел текущую дату -> выполнил запрос -> результат в таблицу (запрос выполнился т.к. даты не совпали) Т.е. - создается операционный пользовательский кеш для последней введенной даты Как бы Вы это сделали c учетом Ваших предложений ? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 19:00 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Из фраз "и сделать это в виде представления (с одним предложением)", "у меня один пользовательский RecordSet на уровне клиента" Лично мне ничего не понятно. Но скорее всего: 1. Pipilened Function https://docs.oracle.com/cd/B28359_01/appdev.111/b28425/pipe_paral_tbl.htm#CHDJEGHC 2. Сам так не делал View и параметры ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 19:12 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_XКак бы Вы это сделали c учетом Ваших предложений ? С учётом предложений Леонида я бы вообще убрал из Вашей схемы часть "результат в таблицу". Оракул с частью "запрос реально не выполнился" и "запрос выполнился т.к. даты не совпали" справится совершенно самостоятельно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 19:14 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Из фраз "и сделать это в виде представления (с одним предложением)", "у меня один пользовательский RecordSet на уровне клиента" Лично мне ничего не понятно. Но скорее всего: 1. Pipilened Function https://docs.oracle.com/cd/B28359_01/appdev.111/b28425/pipe_paral_tbl.htm#CHDJEGHC 2. Сам так не делал View и параметры Если есть время и желание - детализирую Leonid Kudryavtsev Из фраз "и сделать это в виде представления (с одним предложением)", "у меня один пользовательский RecordSet на уровне клиента" Лично мне ничего не понятно. Архитектурно У меня на стороне клиента стоит - один объект ADORecordSet в него я могу загрузить одно предложение SELECT которое должно сменить дату и визуализировать результат Две команды последовательно выполнить нельзя Что не ясно в данной постановке ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 19:34 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov HOME_XКак бы Вы это сделали c учетом Ваших предложений ? С учётом предложений Леонида я бы вообще убрал из Вашей схемы часть "результат в таблицу". Оракул с частью "запрос реально не выполнился" и "запрос выполнился т.к. даты не совпали" справится совершенно самостоятельно. Полагаю - ДА ! Не могу понять как инициировать REFRESH мат . представления Если поняли уточните на пример пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 19:36 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_X, Pipelined - прием известен - спасибо Но применить в конкретной ситуации не могу - это НЕ !!! представление Могу использовать только таблицы и представления Стараюсь обходиться без PL/SQL или минимизировать его участие по ходу моего кода использую пакет.... Если это можно реализовать c мат представлением было бы совсем хорошо ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 19:48 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_X Pipelined - прием известен - спасибо Но применить в конкретной ситуации не могу - это НЕ !!! представление ... Вы же в любом случае TABLE( my_function.... ) и так использовали. Не PipeLined, но та же ф-ция только вид сбоку (точнее в памяти). Зачем при этом сверху наворочено 100500 JOIN... - от меня полностью ускользает. 22277390 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 19:57 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_XНе могу понять как инициировать REFRESH мат . представления Никак. Потому что это не нужно. Как и само мат.представление скорее всего. Просто посылаете свой SELECT с условием по дате, используя bind variable, и... "всё, телемаркет". Дальше Оракул всё сделает самостоятельно. Чти: https://logicalread.com/huge-performance-gains-using-oracle-11g-result-cache-dr01/ ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 19:57 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev HOME_X Pipelined - прием известен - спасибо Но применить в конкретной ситуации не могу - это НЕ !!! представление ... Вы же в любом случае TABLE( my_function.... ) и так использовали. Не PipeLined, но та же ф-ция только вид сбоку (точнее в памяти). Зачем при этом сверху наворочено 100500 JOIN... - от меня полностью ускользает. 22277390 Согласен TABLE используется - но нет явного PL/SQL (предложение "with function" - Oracle внес в ядро - это не внешний объект) Мне НЕ нравиться использование COLLECT - отсюда ищу Вашей помощи Суть SV_V1 следующая - если дата есть в кэше - визуализируем КЭШ (SV_A2) union select * from SV_A2 where Exists(select 1 from SV_A2 where DAY=(select DREP from PARAMETER)) - если дата НЕТ в кэше - выполняем основной запрос SCLIST as (select A.* from SV_A1 A inner join PARAMETER B on ( B.DREP=A.DAY ) ) преобразуем его в тип. коллекцию (array - table) - этот момент мне совсем не Нравиться !!!!!!!!!!! Cast((select Collect(rcData(DAY,RST)) from SCLIST) as rtData ) и передаем его в функцию DateChange, которая ,без изменений возвращает в основной запрос - предварительно записав в КЭШ-таблицу (основная цель функции запись в автономной транзакции) возвращенный массив визуализируем через Table Преобразование в COLLECT - не знаю как передать SCLIST в явном виду (REF CURSOR ?????) Такие манипуляции нужны - так как есть проблема в СОГЛАСОВАНОСТИ между транзакциями основной и автономной при записи " Суть вопроса Смена даты и загрузка данных из SV_A1 в SV_A2 проходит корректно, но итоговая визуализация в МОМЕНТ изменение даты остается старой только при повторном запуске данные обновляются. " Все ли ясно ? Давайте поговорим о Вашим предложениях в свете " Архитектурно У меня на стороне клиента стоит - один объект ADORecordSet в него я могу загрузить одно предложение SELECT которое должно сменить дату и визуализировать результат Две команды последовательно выполнить нельзя " ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 20:27 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov HOME_XНе могу понять как инициировать REFRESH мат . представления Никак. Потому что это не нужно. Как и само мат.представление скорее всего. Просто посылаете свой SELECT с условием по дате, используя bind variable, и... "всё, телемаркет". Дальше Оракул всё сделает самостоятельно. Чти: https://logicalread.com/huge-performance-gains-using-oracle-11g-result-cache-dr01/ Вот этот момент мне интересен и не совсем ясен ! 2. относительно директивы RESULT_CACHE Насколько понимаю сделать табельную функцию и эта выборка будет висеть в памяти - как к этой памяти будут иметь доступ другие пользователи - как долго будет висеть в памяти ? (перегружу кеш если будет массовое применение ) - как проверить реально ли выполняется запрос или очередной вызов идет из кэш Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 20:34 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_XНасколько понимаю сделать табельную функцию и эта выборка будет висеть в памяти Нет, ты ничего не понимаешь. Функция не нужна. Внимательно читай как текст по ссылке так и документацию Оракула. https://docs.oracle.com/database/121/TGDBA/tune_result_cache.htm Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 21:18 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Спасибо - работаю - вроде то что хотел видеть Еще вопрос Включение кеша наблюдаю в плане запроса, в соответствии с инструкцией Запрос первично во времени работает 1-3 минуты - результат 10 записей по 5 полей Запрос ВТОРИЧНО должен работать секунды - т.е. простое считывание 10 записей Но по прежнему работает 1-3 минуты (параметры как Вы поняли не менял) При это в разделе Result Cash плана оптимизации присутствуют название полей оригинала таблицы, в запросе меняю названия на более созвучные по функционалу Поясните пожалуйста - спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 03:09 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_X, если произошли хоть какие-то изменения в любой из таблиц, от которых зависит конкретный result_cache (смотреть v$result_cache_dependency + v$result_cache_objects), то он инвалидируется и его снова надо собирать. еще раз до просветления: AlexFF__| Что такое согласованность данных? На какой момент согласуются данные в запросе? зы. имхо, бред какой-то изначально. не с того конца к задаче подошли ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 03:45 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_X, И выше уже показали: 22276112 Тупо вместо запроса такой анонимный блок выставляйте - ваша версия позволяет. Зы. Но за несогласованные данные у вас хороший шанс получить по шаловливым ручкам... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 04:45 |
|
|
start [/forum/topic.php?fid=52&msg=40043788&tid=1880451]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 307ms |
total: | 434ms |
0 / 0 |