powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Update всех строк большой таблицы без блокировки всей таблицы
13 сообщений из 13, страница 1 из 1
Update всех строк большой таблицы без блокировки всей таблицы
    #40035384
IgorMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Имеется относительно большая таблица для которой необходимо изменить значение в определённой колонке:
Код: plaintext
UPDATE TABLE_A SET COLUMN_A = '1';
Проблема в том, что такой Update выполняется долго и на время выполнения запроса блокируются все строки таблицы.

Вопрос - можно ли выполнить такой же Update блокируя только единичную строку в каждый момент - через курсор или как-то еще - я не специалист, не уверен?

Спасибо
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035395
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, можно.

Код: plsql
1.
2.
3.
4.
5.
update ... where [условие1];
commit;
update ... where [условие2];
commit;
...



В цикле - то же самое.

Код: plsql
1.
2.
3.
4.
for c in (select smth from table) loop
  update table set ... where [некое условие, колонка и т.п.] = > != ... c.smth;
  commit;
end loop;
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035398
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и если вы меняете значимые для других сессий поля, нужно не забывать про многопользовательский режим - запланировать update на нужное время, выставить блокировки и т.д.
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035399
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorMpна время выполнения запроса блокируются *все* строки таблицы.

Обычно они не блокируются. Как Вы этого добились?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035404
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorMp
Здравствуйте!
Имеется относительно большая таблица для которой необходимо изменить значение в определённой колонке:
Код: plaintext
UPDATE TABLE_A SET COLUMN_A = '1';
Проблема в том, что такой Update выполняется долго и на время выполнения запроса блокируются все строки таблицы.

Вопрос - можно ли выполнить такой же Update блокируя только единичную строку в каждый момент - через курсор или как-то еще - я не специалист, не уверен?

Спасибо


относительно большая таблица, ето сколько?


ps
менять в цикле напр по 100тысч строк

.....
stax
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035412
IgorMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

IgorMpна время выполнения запроса блокируются *все* строки таблицы.

Обычно они не блокируются. Как Вы этого добились?

Я сам сделал такой вывод т.к. по логам сервер не ответил как раз в то время, когда выполнялся данный запрос.
И я всегда считал, что при вызове типа
Код: plaintext
UPDATE TABLE_A SET COLUMN_A = '1' WHERE SOME_CONDITION 
Row lock устанавливается на все строки подпадающие под "SOME_CONDITION"
а если WHERE не указано - то на все строки таблицы.
Разве это не так?
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035416
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorMpРазве это не так?

Это не MS SQL сервер, читатели не блокируются писателями.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035417
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читатели не блокируются, возможно у вас просто все ресурсы сервера на этот update ушли
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035419
IgorMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
Читатели не блокируются, возможно у вас просто все ресурсы сервера на этот update ушли

Я ни слова и не говорил о читателях. И меня все писатели.
Сервер не ответил на модифицирующий запрос.
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035425
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorMp,

cursor + fetch bulk collect into limit + forall

упд.

А так и задумано что другие сессии будут менять те же строки в то же время?
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035427
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorMp
Я ни слова и не говорил о читателях. И меня все писатели

Так тогда можно и не обновлять, всё равно никто не прочитает.
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035435
IgorMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm
Да, можно.

Код: plsql
1.
2.
3.
4.
5.
update ... where [условие1];
commit;
update ... where [условие2];
commit;
...



В цикле - то же самое.

Код: plsql
1.
2.
3.
4.
for c in (select smth from table) loop
  update table set ... where [некое условие, колонка и т.п.] = > != ... c.smth;
  commit;
end loop;



dmdmdm, Спасибо, вариант с курсором действительно не блокирует остальные строки - как раз то что нужно.
...
Рейтинг: 0 / 0
Update всех строк большой таблицы без блокировки всей таблицы
    #40035447
IgorMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env

А так и задумано что другие сессии будут менять те же строки в то же время?

Мир не идеален :)
Кто-то просто пишет скрипт, запускающийся ночью по расписанию, в который включён сплошной UPDATE таблицы и длящийся более 30 сек.
А другой человек должен решить проблему отваливающихся по таймауту запросов во время выполнения этого скрипта.
И человека, который решает конкретную проблему никто не спросил, можно ли апдейтить продакшен базу наживую.
"Задумано" тут просто никак не ложится :)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Update всех строк большой таблицы без блокировки всей таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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