Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оператор FOR UPDATE + медленный запрос / 9 сообщений из 9, страница 1 из 1
02.01.2019, 12:22
    #39755466
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор FOR UPDATE + медленный запрос
Добрый день.

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

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

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

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

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

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

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

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

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

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

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


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