|
|
|
Как сменить тип блокировки при ALTER TABLE?
|
|||
|---|---|---|---|
|
#18+
Есть таблица в 15 гб, 2 млн записей,в нее иногда приходится добавлять колонки. При добавлении колонок таблица блокируется. Соответственно сессия у 15 клиентов, которые сидят постоянно подвисает. Я прочитал в документации, что можно как-то сменить блокировку. цитата https://www.postgrespro.ru/doc/sql-altertable.html авторALTER TABLE меняет определение существующей таблицы. Несколько её разновидностей описаны ниже . Заметьте, что для разных разновидностей могут требоваться разные уровни блокировок. Если явно не отмечено другое, требуется блокировка ACCESS EXCLUSIVE . чуть ниже я ничего не нашел, нашел только режимы блокировки https://www.postgrespro.ru/doc/sql-lock.html Не понятно что с ними делать. Вот у меня вопрос. Есть запрос: ALTER TABLE distributors ADD COLUMN address varchar(30); Как его переписать так, чтобы клиенты могли работать с таблицей на селект и инсерт, одновременно с добавлением новой колонки в эту таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2016, 05:55 |
|
||
|
Как сменить тип блокировки при ALTER TABLE?
|
|||
|---|---|---|---|
|
#18+
azsx, если добавлять колонки без default значения, то это операция требует очень короткий ACCESS EXCLUSIVE лок. скорей всего у вас длинные транзакции какие-то висят, которые не дают его взять. перед альтером их необходимо закрыть/прибить. уровень блокировки никак не изменить, неправильно читаете. там написано что для некоторых операций, для которых сказано явно уровень блокировки может быть другим (например alter ... set statistics требует SHARE UPDATE EXCLUSIVE lock). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2016, 06:50 |
|
||
|
Как сменить тип блокировки при ALTER TABLE?
|
|||
|---|---|---|---|
|
#18+
Alexius, спасибо. Да, действительно у меня в каждой колонке обязательно есть default и запрет на пустые значения. И мне это надо. А как добавить колонку без блокировок с такими условиями? (default и запрет на пустые значения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2016, 07:10 |
|
||
|
Как сменить тип блокировки при ALTER TABLE?
|
|||
|---|---|---|---|
|
#18+
azsx, для этого придется повозиться (для больших таблиц): 1) добавить поле без default значения и без not null 2) прописать default значение 3) обновить все строки таблицы небольшими порциями в цикле и прописать нужное значение в поле 4) добавить not null (тут будет блокировка, пока вся таблица прочитается. можно предварительно разогреть если есть смысл) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2016, 08:39 |
|
||
|
Как сменить тип блокировки при ALTER TABLE?
|
|||
|---|---|---|---|
|
#18+
azsxAlexius, спасибо. Да, действительно у меня в каждой колонке обязательно есть default и запрет на пустые значения. И мне это надо. А как добавить колонку без блокировок с такими условиями? (default и запрет на пустые значения). Если вам в 15Gb таблицу часто и регулярно приходится добавлять колонки с default value - у вас что то серьезно не то или с архитектурой или процессом вноса изменений в базу. Как это сделать с минимальными локами - вам уже написали, но это надо скрипты писать (т.е. делать внешними по отношению к базе средствами. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2016, 10:54 |
|
||
|
Как сменить тип блокировки при ALTER TABLE?
|
|||
|---|---|---|---|
|
#18+
Спасибо Alexius так и поступлю. Maxim Boguk, да архитектура у меня не очень. Я в качестве обучения БД и лазарус взял себе более менее реальный проект у которого из плюсов только что обработка большого массива данных и мастерю в нем чо то. Например, в день идет около 150 тысяч операций записи. Селектов раза в три больше. Удаляется тысяч 60-80. ХЗ мало это или нет. Так как денег там нет, чисто хобби - для меня нормально там иногда добавить колонку или убрать колонку. На сайте 2 калеки, переживут. Помогите мне, пожалуйста, если время есть http://www.sql.ru/forum/1218967-a/skolko-vesyat-indeksy зы хотелось бы писать в postgresql на чистом С, но пока я так не умею :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2016, 12:35 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39258618&tid=1997156]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
181ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 480ms |

| 0 / 0 |
