|
|
|
Оператор FOR UPDATE + медленный запрос
|
|||
|---|---|---|---|
|
#18+
Добрый день. Объясните пожалуйста разницу между Код: plsql 1. 2. 3. 4. и Код: plsql 1. 2. 3. 4. 5. Первый запрос отрабатывает сразу. Второй зависает намертво. Меня хватило на 10 минут. Запрос выполняется в месте критичным по времени. Запрос не мой. Коллега написал. Моя догадка такая: при просмотре строк, они блокируются, а учитывая, что условие в запросе слишком общее, вот и приходиться ждать пока переблокируется бОльшая часть таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2019, 12:22 |
|
||
|
Оператор FOR UPDATE + медленный запрос
|
|||
|---|---|---|---|
|
#18+
Не совсем разницу, а почему второй запрос отрабатывает медленно. С оператором FOR UPDATE я знаком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2019, 12:23 |
|
||
|
Оператор FOR UPDATE + медленный запрос
|
|||
|---|---|---|---|
|
#18+
IMNOПервый запрос отрабатывает сразу.Наверняка, всего лишь "находит" -ннадцать первых строк. IMNOЗапрос выполняется в месте критичным по времени. Запрос не мой. Коллега написал.Вы оба не понимаете, зачем FOR UPDATE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2019, 12:34 |
|
||
|
Оператор FOR UPDATE + медленный запрос
|
|||
|---|---|---|---|
|
#18+
ElicВы оба не понимаете, зачем FOR UPDATE. Насколько я знаю, FOR UPDATE нужен для блокировки строки. То есть селект просматривает строку и сразу ставит на неё блокировку, чтобы другие ресурсы не смогли с ней ничего сделать(делит, апдейт). При обычным исполнении селекта блокировки не происходит, так как у Оракла по умолчанию неблокирующие чтения. ElicНаверняка, всего лишь "находит" -ннадцать первых строк. Ну это уже другой вопрос. Меня пока только разница во времени выполнения интересует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2019, 12:39 |
|
||
|
Оператор FOR UPDATE + медленный запрос
|
|||
|---|---|---|---|
|
#18+
IMNOFOR UPDATE нужен для блокировки строки.И сколько строк блокируется в данном случае? Вопрос на сообразительность: а что будет, если некоторые из них уже заблокированы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2019, 12:48 |
|
||
|
Оператор FOR UPDATE + медленный запрос
|
|||
|---|---|---|---|
|
#18+
ElicИ сколько строк блокируется в данном случае? Вопрос на сообразительность: а что будет, если некоторые из них уже заблокированы? 1. Насколько я понимаю, блокироваться должны только те строки, которые будут выбраны селектом. Условно, если селектом выбирается две строки, то и заблокироваться должно две строки. Про "пока переблокируется бОльшая часть таблицы". Я написал, что это догадка, потому что я думаю, что не очень понимаю механизм оператора FOR UPDATE. 2. Если строка уже заблокирована, то оператор SELECT...FOR UPDATE будет ожидать, пока строка освободиться, чтобы сразу его заблокировать. То есть оператор SELECT...FOR UPDATE будет в подвисшем состоянии. У оператора FOR UPDATE есть опция NOWAIT, которая не ждёт пока ресурс освободиться, а сразу выбрасывает исключение типа "ресурс занят". 3. Про "Запрос выполняется в месте критичным по времени." я написал не потому, что думаю, что оператор FOR UPDATE увеличивает скорость выполнения. Я написал это в связи с тем, что выполнение запроса 10 минут меня не устраивает. Касательно FOR UPDATE, тут в коде стоит коммент "Для сокращения вероятности deadlock-ов...". То есть я думаю, что коллега знал, что делает. Исходя из моего второго пункта, я так думаю, что кто-то в открытой сессии просто держит строки, которые мне нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2019, 13:03 |
|
||
|
Оператор FOR UPDATE + медленный запрос
|
|||
|---|---|---|---|
|
#18+
IMNOИсходя из моего второго пункта, я так думаю, что кто-то в открытой сессии просто держит строки, которые мне нужны.Вот видишь, сам разобрался. IMNOКасательно FOR UPDATE, тут в коде стоит коммент "Для сокращения вероятности deadlock-ов...".Это из области "Не знаю как, но авось поможет". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2019, 13:11 |
|
||
|
Оператор FOR UPDATE + медленный запрос
|
|||
|---|---|---|---|
|
#18+
ElicВот видишь, сам разобрался. Ну не совсем сам, а с Вашей помощью. Собственно я для этого и создал тему на форуме. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2019, 13:43 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39755466&tid=1882971]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 510ms |

| 0 / 0 |
