powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / эксклюзивная блокировка таблиц ?
17 сообщений из 17, страница 1 из 1
эксклюзивная блокировка таблиц ?
    #38575536
rinace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос к специалистам
как следующее предложение может вызвать блокировку таблиц и заблокировать выполнение клиентских приложение :

CREATE TABLE data_20140401_20140501
(
data_id bigint NOT NULL,
datasource_id integer,
"timestamp" timestamp without time zone,
"value" numeric,
plausible boolean,
CONSTRAINT data_20140401_20140501_pkey PRIMARY KEY (data_id),
CONSTRAINT data_20140401_20140501_datasource_id_fkey FOREIGN KEY (datasource_id)
REFERENCES datasource (datasource_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT data_20140401_20140501_timestamp_constraint
CHECK ("timestamp" >= '2014-04-01 00:00:00'::timestamp without time zone AND
"timestamp" < '2014-05-01 00:00:00'::timestamp without time zone)
)
INHERITS (data)
WITH (
OIDS=FALSE
);
ALTER TABLE data_20140401_20140501 OWNER TO postgres;

CREATE INDEX data_20140401_20140501_timestamp
ON data_20140401_20140501 ("timestamp");
CREATE INDEX data_20140401_20140501_datasource_id
ON data_20140401_20140501 ("datasource_id");

Спасибо.
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575806
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rinace,

Каких таблиц? Какая у вас проблема?
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575809
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и create index concurrently в тему. Ибо индекс ловит таблицу а в вашем случае всю ветку наследования
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575810
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurin,

Лочит
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575815
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rinaceВопрос к специалистам
как следующее предложение может вызвать блокировку таблиц и заблокировать выполнение клиентских приложение :

CREATE TABLE data_20140401_20140501
(
data_id bigint NOT NULL,
datasource_id integer,
"timestamp" timestamp without time zone,
"value" numeric,
plausible boolean,
CONSTRAINT data_20140401_20140501_pkey PRIMARY KEY (data_id),
CONSTRAINT data_20140401_20140501_datasource_id_fkey FOREIGN KEY (datasource_id)
REFERENCES datasource (datasource_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT data_20140401_20140501_timestamp_constraint
CHECK ("timestamp" >= '2014-04-01 00:00:00'::timestamp without time zone AND
"timestamp" < '2014-05-01 00:00:00'::timestamp without time zone)
)
INHERITS (data)
WITH (
OIDS=FALSE
);
ALTER TABLE data_20140401_20140501 OWNER TO postgres;

CREATE INDEX data_20140401_20140501_timestamp
ON data_20140401_20140501 ("timestamp");
CREATE INDEX data_20140401_20140501_datasource_id
ON data_20140401_20140501 ("datasource_id");

Спасибо.

как минимум вот этот кусок:

CONSTRAINT data_20140401_20140501_datasource_id_fkey FOREIGN KEY (datasource_id)
REFERENCES datasource (datasource_id) MATCH SIMPLE

повесит exclusive блокировку на datasource на время выполнения....

если в это время кто то с datasource еще работал и держал открытую транзакцию -
ваша команда повесит exclusive блокировку и будет ждать окончания той открытой транзакции...
а за командой будут ждать все остальные...

при внесении alters на живой работающий проект надо быть готовым быстро снимать мешающие транзакции запущенные до вашего alter если вы видите что alter с waiting=true в pg_stat_activity
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575823
Misha TyurinНу и create index concurrently в тему. Ибо индекс лочит таблицу а в вашем случае всю ветку наследования
стесняюсь спросить, какую ветку наследования
кто наследует только что создаваемой таблице?
зачем из-за какого-то однотабличного индекса лочить что бы то ни было ?

к тому же "конкурентли" вряд ли транзакционноспособен (в многокомандном батче неисполним, думается. но могу врать).
ну и прочих проблем от него ("конкурентли") многовато, в силу левизны реализации.
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575828
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стесняюсь спросить,

Селекту к родителю нужны все дети
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575831
Misha Tyurin,

и ?

вы не стесняйтесь, не говорите намёками, вы таки врежьте правду-матку
технически, т.с. разложите по полочкам. а я постараюсь вникнуть , если будет во что
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575832
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

Точно ексклюзивную а не более мягкую (селекты то может все таки будет разрешать) повесит на source ? Нету сессии под рукой проверить.
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575835
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стесняюсь спросить,

Планеру при селекте нужны все дети. Будем ждать лока на ребенке на котором индекс строится
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575838
Misha Tyurinстесняюсь спросить,

Планеру при селекте нужны все дети. Будем ждать лока на ребенке на котором индекс строитсяпланеру ничего не мешает планировать без индекса. никто ему индексов не обещал.

к тому же команда исполняется в транзакционном батче - у планера нет ещё этого дитяти. тупо нет.

низачот

давайте, пытайтесь дальше, что ли
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575854
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurinстесняюсь спросить,

Планеру при селекте нужны все дети. Будем ждать лока на ребенке на котором индекс строится

тест показал что никаких локов на parent таблицу не возникает....

сессия 1:

[local]:5432 postgres@postgres=# begin;
BEGIN
[local]:5432 postgres@postgres=# create table test (id serial, value integer) INHERITS (parent);
CREATE TABLE
[local]:5432 postgres@postgres=# create index test_id_key on test(id);
CREATE INDEX


сессия 2:
[local]:5432 postgres@postgres=# select count(*) from parent;
count
-------
0
(1 row)


так что единственное что тут вешает локи на другие таблицы - это создание FK
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575920
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

С алтертейблом перпутал в данном случае, бывает.
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575922
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стесняюсь спросить,

Уважаемый, приходите ко мне на собеседование, встречное предложение. У меня складывается впечатление, что вы недооценены.
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38575948
Misha Tyurin,

спасибо за предложение, но я пока занят
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38576809
rinace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha Tyurinrinace,

Каких таблиц? Какая у вас проблема?
Был запущен скрипт содержащий данное SQL предложение.
Тут же возникла проблема - зависли клиентские приложения.
При просмотре сессий была обнаружена сессия содержащая данное предложение с признаком wait=true и еще множество сессий с признаком wait=true.
Поскольку требовалось восстановить работоспособность, сессия была прибита.

Вот теперь разбираюсь в ситуации.
Скрипт все равно нужно будет запускать, думаю как сделать с наименьшим импактом.

Всем спасибо, ситуация более менее обрисовалась.
...
Рейтинг: 0 / 0
эксклюзивная блокировка таблиц ?
    #38577139
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rinace,

"пишущие" транзакции будут ждать криейт индекс. // можно/нужно юзать concurrently

ну и все, кому надо (читать/писать в) datasource, будут ждать ексклюзивной блокировки от FOREIGN KEY.

так что
1) concurrently при создании
2) а форейн кей добавляйте "ночью" или в даунтайм


----

тут подумал, а зачем пг так жестко лочит datasource. ммм ?

а потому (в код пг не смотрел, но уверен на 146%), что все эти форейн кеи - это "глубоко системные" триггера на оба конца. пг делает, по сути, и "алтертейбл" на datasource CREATE TRIGGER check_fk_бла_бла, типа того. ну и этот алтер - это уже ексклюзивный лок ACCESS EXCLUSIVE.
http://www.postgresql.org/docs/9.2/static/explicit-locking.html
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / эксклюзивная блокировка таблиц ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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