powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Реализация строгой очередности запросов
21 сообщений из 21, страница 1 из 1
Реализация строгой очередности запросов
    #40000420
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Появилось желание вести строгую очередность доступа к ресурсу по чтению. Принцип один закончил - следующий начал.
Ресурс обернут в функцию, поэтому PL/SQL доступен.

Локи таблиц с этим никак не помогают, поскольку Оракл честно предупреждает что никакие локи на чтение не влияют.
"A lock never prevents other users from querying the table. "

Из всех знакомых средств синхронизации, нашел у Оракла только глобальный семафор в пакете DBMS_LOCK.
Вроде всем меня устраивает: эксклюзив есть, таймаут есть. Но вдруг у него какие-то проблемы,
о которых документация умалчивает?

Кто-то с этими семафорами работал?
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000422
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
select for update, но боюсь, в данном случае это только помощь выстрелить себе в ногу...
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000423
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Появилось желание вести строгую очередность доступа к ресурсу по чтению.

Вы бы, уважаемый, не желания озвучивали, а задачу в контексте.
Сейчас насоветуем как сериализовать - а окажется, что оно не требуется от слова "совсем".
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000424
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
НеофитSQL,

c блокировками через dbms_lock работали практически все. Это старая довольно надежная и популярная вещь.
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000434
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
НеофитSQL
Появилось желание вести строгую очередность доступа к ресурсу по чтению.

Вы бы, уважаемый, не желания озвучивали, а задачу в контексте.
Сейчас насоветуем как сериализовать - а окажется, что оно не требуется от слова "совсем".


У меня есть функция которая редко вызывается (раз-три в день?), и отрабатывает за 3-5 секунд.
Эта функция не reentrant*, и требования параллельного исполнения к ней не существует.

Переделать ее на reentrant - не слишком много работы, а вот оттестировать что она стала безопасной
для параллельного исполнения во всех ситуациях - намного больше работы. А пользы нет.

Поэтому я рассматриваю альтернативу - оградить ее семафором/мютексом или как это в оракле
принято называть, и не беспокоиться. Раз в високосный год у кого-то запрос притормозит на лишние 2-3 секунды.

(*) словарь чепуху предлагает, поэтому англ.

Что-то вроде такого:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
    n := dbms_lock.request( UL_Xread, X_MODE, timeout );
    ASSERT n in (0,1);
    if n = 0 then
      --
      -- все кастрюли мои, идет работа
      --
      dbms_lock.release( UL_Xread );
      ASSERT n = 0;
    end if;
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000582
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000611
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dms_lock, глобальная переменная, просто значение в таблице.
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000614
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, кроме DBMS_LOCK требует проверки, что сессия не прибита, а за время этой самой проверки ситуация уже могла измениться
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000803
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Ресурс обернут в функцию

И более никак не доступен?
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000838
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Появилось желание вести строгую очередность доступа к ресурсу по чтению. Принцип один закончил - следующий начал.
Переходи на MS SQL. У него блокирующее чтение из коробки. Хотя, скорее всего, один читатель не блокирует других читателей.
P.S. Может тебе будет достаточно повысить уровень изолированности транзакции?
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000860
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
Все, кроме DBMS_LOCK требует проверки, что сессия не прибита, а за время этой самой проверки ситуация уже могла измениться
JOIN v$session v on v.audsid=...
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000891
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Вячеслав Любомудров
Все, кроме DBMS_LOCK требует проверки, что сессия не прибита, а за время этой самой проверки ситуация уже могла измениться
JOIN v$session v on v.audsid=...


чесно говоря я не понял намек
мутить свою табличку с audsid?
опять же права на v$session (хотя на DBMS_LOCK тоже надо выпросить)

чутку уточним/осложним, в процедуре есть промежуточные коммиты

ps
просто интересно, вряд ли буду использовать

......
stax
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40000951
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
andrey_anonymous
пропущено...

Вы бы, уважаемый, не желания озвучивали, а задачу в контексте.
Сейчас насоветуем как сериализовать - а окажется, что оно не требуется от слова "совсем".


У меня есть функция которая редко вызывается (раз-три в день?), и отрабатывает за 3-5 секунд.
Эта функция не reentrant*, и требования параллельного исполнения к ней не существует.

Переделать ее на reentrant - не слишком много работы, а вот оттестировать что она стала безопасной
для параллельного исполнения во всех ситуациях - намного больше работы. А пользы нет.

Поэтому я рассматриваю альтернативу - оградить ее семафором/мютексом или как это в оракле
принято называть, и не беспокоиться. Раз в високосный год у кого-то запрос притормозит на лишние 2-3 секунды.

(*) словарь чепуху предлагает, поэтому англ.

Что-то вроде такого:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
    n := dbms_lock.request( UL_Xread, X_MODE, timeout );
    ASSERT n in (0,1);
    if n = 0 then
      --
      -- все кастрюли мои, идет работа
      --
      dbms_lock.release( UL_Xread );
      ASSERT n = 0;
    end if;

так оно что-то меняет в БД?
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40001144
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx> так оно что-то меняет в БД?

Вне БД, также запускает процесс. Тяжеловесная функция, параллельность нежелательна, и не требуется.

env > И более никак не доступен?

Доступен, но задокументирован "руками не трогать". Для доступа дается API.
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40001146
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал, работает. Пока отлаживал, словил интересную, на мой взгляд, рантайм ошибку.

Я вызвал dbms_lock.Release с неправильным параметром, который (если я правильно читаю стэк), сначала привел к исключению по переполнению int, а затем вызвал ошибку компиляции (??) внутри тела dbms_lock. Поскольку источников нет, кода не видно.

Если это ошибка компиляции, то значит во время обработки ошибок dbms_lock самогенерит код? Или это просто артифакт 'execute' в плохо отлаженом коде обработки ошибок? Мне трудно сказать, я еще не видел такого.

Сообщение приключилось при исполнении dbms_lock.Release(lock), где параметр вышел за предел юзер локов (миллиард).
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40001375
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джоб сделать
Хай задание из таблицы читает и туда же ответ пишет
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40001842
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx
Джоб сделать
Хай задание из таблицы читает и туда же ответ пишет


Да, у джобов есть хорошее свойство что джоб с собой не пересекается.
Но они по природе асинхронные, пришлось бы ждать окончания, и отменять по таймаутам.. код с явным локом оказался проще.
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40001934
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Реализация строгой очередности запросов

Очевидная трехзвенка с очередью.
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40002326
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
НеофитSQL
Реализация строгой очередности запросов

Очевидная трехзвенка с очередью.


Я новичок :)

Как выглядит в PL/SQL "трехзвенка с очередью"? Поиск этого термина мало что дает/
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40002403
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читайте про "Трехзвенная архитектура".

Сервер приложений, как обычно называют третье звено, берет на себя многие задачи бизнес-логики, не возлагая их на СУБД.

В т.ч. очередность выполнения операций.
...
Рейтинг: 0 / 0
Реализация строгой очередности запросов
    #40002672
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,

А, теперь понял. Спасибо.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Реализация строгой очередности запросов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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