|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
Появилось желание вести строгую очередность доступа к ресурсу по чтению. Принцип один закончил - следующий начал. Ресурс обернут в функцию, поэтому PL/SQL доступен. Локи таблиц с этим никак не помогают, поскольку Оракл честно предупреждает что никакие локи на чтение не влияют. "A lock never prevents other users from querying the table. " Из всех знакомых средств синхронизации, нашел у Оракла только глобальный семафор в пакете DBMS_LOCK. Вроде всем меня устраивает: эксклюзив есть, таймаут есть. Но вдруг у него какие-то проблемы, о которых документация умалчивает? Кто-то с этими семафорами работал? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2020, 00:45 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
select for update, но боюсь, в данном случае это только помощь выстрелить себе в ногу... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2020, 01:24 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
НеофитSQL Появилось желание вести строгую очередность доступа к ресурсу по чтению. Вы бы, уважаемый, не желания озвучивали, а задачу в контексте. Сейчас насоветуем как сериализовать - а окажется, что оно не требуется от слова "совсем". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2020, 01:29 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
НеофитSQL, c блокировками через dbms_lock работали практически все. Это старая довольно надежная и популярная вещь. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2020, 01:30 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
andrey_anonymous НеофитSQL Появилось желание вести строгую очередность доступа к ресурсу по чтению. Вы бы, уважаемый, не желания озвучивали, а задачу в контексте. Сейчас насоветуем как сериализовать - а окажется, что оно не требуется от слова "совсем". У меня есть функция которая редко вызывается (раз-три в день?), и отрабатывает за 3-5 секунд. Эта функция не reentrant*, и требования параллельного исполнения к ней не существует. Переделать ее на reentrant - не слишком много работы, а вот оттестировать что она стала безопасной для параллельного исполнения во всех ситуациях - намного больше работы. А пользы нет. Поэтому я рассматриваю альтернативу - оградить ее семафором/мютексом или как это в оракле принято называть, и не беспокоиться. Раз в високосный год у кого-то запрос притормозит на лишние 2-3 секунды. (*) словарь чепуху предлагает, поэтому англ. Что-то вроде такого: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2020, 01:57 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2020, 22:04 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
Dms_lock, глобальная переменная, просто значение в таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2020, 07:51 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
Все, кроме DBMS_LOCK требует проверки, что сессия не прибита, а за время этой самой проверки ситуация уже могла измениться ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2020, 08:40 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
НеофитSQL Ресурс обернут в функцию И более никак не доступен? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2020, 11:25 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
НеофитSQL Появилось желание вести строгую очередность доступа к ресурсу по чтению. Принцип один закончил - следующий начал. P.S. Может тебе будет достаточно повысить уровень изолированности транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2020, 12:16 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров Все, кроме DBMS_LOCK требует проверки, что сессия не прибита, а за время этой самой проверки ситуация уже могла измениться ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2020, 13:03 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
andreymx Вячеслав Любомудров Все, кроме DBMS_LOCK требует проверки, что сессия не прибита, а за время этой самой проверки ситуация уже могла измениться чесно говоря я не понял намек мутить свою табличку с audsid? опять же права на v$session (хотя на DBMS_LOCK тоже надо выпросить) чутку уточним/осложним, в процедуре есть промежуточные коммиты ps просто интересно, вряд ли буду использовать ...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2020, 14:01 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
НеофитSQL andrey_anonymous пропущено... Вы бы, уважаемый, не желания озвучивали, а задачу в контексте. Сейчас насоветуем как сериализовать - а окажется, что оно не требуется от слова "совсем". У меня есть функция которая редко вызывается (раз-три в день?), и отрабатывает за 3-5 секунд. Эта функция не reentrant*, и требования параллельного исполнения к ней не существует. Переделать ее на reentrant - не слишком много работы, а вот оттестировать что она стала безопасной для параллельного исполнения во всех ситуациях - намного больше работы. А пользы нет. Поэтому я рассматриваю альтернативу - оградить ее семафором/мютексом или как это в оракле принято называть, и не беспокоиться. Раз в високосный год у кого-то запрос притормозит на лишние 2-3 секунды. (*) словарь чепуху предлагает, поэтому англ. Что-то вроде такого: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2020, 15:05 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
andreymx> так оно что-то меняет в БД? Вне БД, также запускает процесс. Тяжеловесная функция, параллельность нежелательна, и не требуется. env > И более никак не доступен? Доступен, но задокументирован "руками не трогать". Для доступа дается API. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 01:38 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
Сделал, работает. Пока отлаживал, словил интересную, на мой взгляд, рантайм ошибку. Я вызвал dbms_lock.Release с неправильным параметром, который (если я правильно читаю стэк), сначала привел к исключению по переполнению int, а затем вызвал ошибку компиляции (??) внутри тела dbms_lock. Поскольку источников нет, кода не видно. Если это ошибка компиляции, то значит во время обработки ошибок dbms_lock самогенерит код? Или это просто артифакт 'execute' в плохо отлаженом коде обработки ошибок? Мне трудно сказать, я еще не видел такого. Сообщение приключилось при исполнении dbms_lock.Release(lock), где параметр вышел за предел юзер локов (миллиард). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 01:46 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
Джоб сделать Хай задание из таблицы читает и туда же ответ пишет ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 16:18 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
andreymx Джоб сделать Хай задание из таблицы читает и туда же ответ пишет Да, у джобов есть хорошее свойство что джоб с собой не пересекается. Но они по природе асинхронные, пришлось бы ждать окончания, и отменять по таймаутам.. код с явным локом оказался проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 18:44 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 05:45 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
Я новичок :) Как выглядит в PL/SQL "трехзвенка с очередью"? Поиск этого термина мало что дает/ ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 20:51 |
|
Реализация строгой очередности запросов
|
|||
---|---|---|---|
#18+
Читайте про "Трехзвенная архитектура". Сервер приложений, как обычно называют третье звено, берет на себя многие задачи бизнес-логики, не возлагая их на СУБД. В т.ч. очередность выполнения операций. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 08:17 |
|
|
start [/forum/topic.php?fid=52&fpage=36&tid=1880859]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 308ms |
total: | 433ms |
0 / 0 |