|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#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 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_Xв запросе меняю названия на более созвучные по функционалу Что вы там меняете? Запрос должен быть одним и тем же. С точностью до байта. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 13:36 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Освоил - запустил - спасибо ! В целом приемлемо - учту в работе В моем конкретном случае некрасивенько !!!! У меня в базовом коде есть pipelined function - так понимаю это расцениваться как временная таблица (т.е. план оптимизации - ДА, результат НЕТ ....) А завести конкретное условие для обновления никак нельзя т.е. проигнорировать системные директивы (PYPYlined тоже...) "если произошли хоть какие-то изменения в любой из таблиц, от которых зависит конкретный result_cache" И обрабатывать только изменения даты Cпасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 17:02 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Sayan Malakshinov HOME_X, И выше уже показали: 22276112 Тупо вместо запроса такой анонимный блок выставляйте - ваша версия позволяет. Зы. Но за несогласованные данные у вас хороший шанс получить по шаловливым ручкам... Согласен - изменил ! Там кол-во записей с 10-20 штук в Collection, конфликт вряд-ли возможен при такой объеме но как схема работы Вы безусловно правы ... запроса такой анонимный блок ... Пытаюсь понять - как применить - спасибо ! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 17:06 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Sayan Malakshinov HOME_X, И выше уже показали: 22276112 Тупо вместо запроса такой анонимный блок выставляйте - ваша версия позволяет. Здесь не совсем то что мне нужно - мне по архитектуре необходимо вернуть данные в представление А здесь возврат Ref Cursor или я что-то не понял ? спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 18:03 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
А какая разница? И что такое "вернуть данные в представление"? У Вас терминология крайне странная. Представление это обычно view. Во всей теме никаких view не было и в помине. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 18:44 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev А какая разница? И что такое "вернуть данные в представление"? У Вас терминология крайне странная. Представление это обычно view. Во всей теме никаких view не было и в помине. Реализация в коде (архитектуре не менять - это представление пользователя, пользователь будет инициировать смену даты) -- c reate or replace view SV_AA as ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 22:20 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
HOME_X ... это представление пользователя, пользователь будет инициировать смену даты) -- c reate or replace view SV_AA as Жесть какая. IMHO Зачем это надо, когда можно просто процедуру/функцию с параметром сделать - мне не понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 23:30 |
|
Как обновить "пользовательский" кеш
|
|||
---|---|---|---|
#18+
Вы как-то сами себе же и противоречите HOME_X Leonid Kudryavtsev А какая разница? И что такое "вернуть данные в представление"? У Вас терминология крайне странная. Представление это обычно view. Во всей теме никаких view не было и в помине. Реализация в коде (архитектуре не менять - это представление пользователя, пользователь будет инициировать смену даты) -- c reate or replace view SV_AA as HOME_X мне нужно совместить две операции смену даты и "свежую" реализация данных и сделать это в виде представления (с одним предложением) У меня один пользовательский RecordSet на уровне клиента Каким образом Вы с помощью команды CREATE OR REPLACE VIEW надеетесь "совместить две операции смену даты и "свежую" реализация данных" и даже заполнить "один пользовательский RecordSet на уровне клиента" - все загадочнее и загадочнее. Для заполнения RecordSet, что PipeLine или табличная ф-ция обернутая в SELECT, что анонимный блок возвращающей RecordSet - в принципе должно быть совершенно одинаково. Если же операции все равно две, то вообще не понятны ни потуги, ни проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 14:11 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1880451]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 172ms |
0 / 0 |