powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оператор FOR UPDATE + медленный запрос
9 сообщений из 9, страница 1 из 1
Оператор FOR UPDATE + медленный запрос
    #39755466
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Объясните пожалуйста разницу между

Код: plsql
1.
2.
3.
4.
SELECT 1
FROM Table1 T1
JOIN Table1 T2 ON T1.param1 = 1 AND T1.param2 = 2 AND T1.param3 = 3
                     AND T2.param1 = 4 AND T2.param2 = 5 AND AND T2.param3 = 6



и

Код: plsql
1.
2.
3.
4.
5.
SELECT 1
FROM Table1 T1
JOIN Table1 T2 ON T1.param1 = 1 AND T1.param2 = 2 AND T1.param3 = 3
                     AND T2.param1 = 4 AND T2.param2 = 5 AND AND T2.param3 = 6
[color=red]FOR UPDATE[/color]



Первый запрос отрабатывает сразу. Второй зависает намертво. Меня хватило на 10 минут.
Запрос выполняется в месте критичным по времени.
Запрос не мой. Коллега написал.

Моя догадка такая: при просмотре строк, они блокируются, а учитывая, что условие в запросе слишком общее, вот и приходиться ждать пока переблокируется бОльшая часть таблицы.
...
Рейтинг: 0 / 0
Оператор FOR UPDATE + медленный запрос
    #39755467
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем разницу, а почему второй запрос отрабатывает медленно.
С оператором FOR UPDATE я знаком.
...
Рейтинг: 0 / 0
Оператор FOR UPDATE + медленный запрос
    #39755468
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNOПервый запрос отрабатывает сразу.Наверняка, всего лишь "находит" -ннадцать первых строк.
IMNOЗапрос выполняется в месте критичным по времени.
Запрос не мой. Коллега написал.Вы оба не понимаете, зачем FOR UPDATE.
...
Рейтинг: 0 / 0
Оператор FOR UPDATE + медленный запрос
    #39755469
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВы оба не понимаете, зачем FOR UPDATE.
Насколько я знаю, FOR UPDATE нужен для блокировки строки.
То есть селект просматривает строку и сразу ставит на неё блокировку, чтобы другие ресурсы не смогли с ней ничего сделать(делит, апдейт).
При обычным исполнении селекта блокировки не происходит, так как у Оракла по умолчанию неблокирующие чтения.

ElicНаверняка, всего лишь "находит" -ннадцать первых строк.
Ну это уже другой вопрос. Меня пока только разница во времени выполнения интересует.
...
Рейтинг: 0 / 0
Оператор FOR UPDATE + медленный запрос
    #39755471
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNOFOR UPDATE нужен для блокировки строки.И сколько строк блокируется в данном случае?
Вопрос на сообразительность: а что будет, если некоторые из них уже заблокированы?
...
Рейтинг: 0 / 0
Оператор FOR UPDATE + медленный запрос
    #39755475
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicИ сколько строк блокируется в данном случае?
Вопрос на сообразительность: а что будет, если некоторые из них уже заблокированы?

1. Насколько я понимаю, блокироваться должны только те строки, которые будут выбраны селектом.
Условно, если селектом выбирается две строки, то и заблокироваться должно две строки.
Про "пока переблокируется бОльшая часть таблицы". Я написал, что это догадка, потому что я думаю, что не очень понимаю механизм оператора FOR UPDATE.

2. Если строка уже заблокирована, то оператор SELECT...FOR UPDATE будет ожидать, пока строка освободиться, чтобы сразу его заблокировать. То есть оператор SELECT...FOR UPDATE будет в подвисшем состоянии.
У оператора FOR UPDATE есть опция NOWAIT, которая не ждёт пока ресурс освободиться, а сразу выбрасывает исключение типа "ресурс занят".

3. Про "Запрос выполняется в месте критичным по времени." я написал не потому, что думаю, что оператор FOR UPDATE увеличивает скорость выполнения. Я написал это в связи с тем, что выполнение запроса 10 минут меня не устраивает.
Касательно FOR UPDATE, тут в коде стоит коммент "Для сокращения вероятности deadlock-ов...".
То есть я думаю, что коллега знал, что делает.

Исходя из моего второго пункта, я так думаю, что кто-то в открытой сессии просто держит строки, которые мне нужны.
...
Рейтинг: 0 / 0
Оператор FOR UPDATE + медленный запрос
    #39755477
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNOИсходя из моего второго пункта, я так думаю, что кто-то в открытой сессии просто держит строки, которые мне нужны.Вот видишь, сам разобрался.
IMNOКасательно FOR UPDATE, тут в коде стоит коммент "Для сокращения вероятности deadlock-ов...".Это из области "Не знаю как, но авось поможет".
...
Рейтинг: 0 / 0
Оператор FOR UPDATE + медленный запрос
    #39755482
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВот видишь, сам разобрался.
Ну не совсем сам, а с Вашей помощью.
Собственно я для этого и создал тему на форуме.
Спасибо.
...
Рейтинг: 0 / 0
Оператор FOR UPDATE + медленный запрос
    #39755483
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNO,

за 10минут можно посмотреть кто держит (v$lock)

возможно Вы сами в соседней сессии блокируете строки

зы
странноватое условие соединения
строки заблокируются в T1 и Т2

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


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