Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / эксклюзивная блокировка таблиц ? / 17 сообщений из 17, страница 1 из 1
28.02.2014, 17:16:17
    #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
01.03.2014, 00:42:46
    #38575806
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эксклюзивная блокировка таблиц ?
rinace,

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

Лочит
...
Рейтинг: 0 / 0
01.03.2014, 00:53:10
    #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
01.03.2014, 01:01:07
    #38575823
эксклюзивная блокировка таблиц ?
Misha TyurinНу и create index concurrently в тему. Ибо индекс лочит таблицу а в вашем случае всю ветку наследования
стесняюсь спросить, какую ветку наследования
кто наследует только что создаваемой таблице?
зачем из-за какого-то однотабличного индекса лочить что бы то ни было ?

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

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

и ?

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

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

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

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

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

низачот

давайте, пытайтесь дальше, что ли
...
Рейтинг: 0 / 0
01.03.2014, 01:30:13
    #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
01.03.2014, 09:49:39
    #38575920
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эксклюзивная блокировка таблиц ?
Maxim Boguk,

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

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

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

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

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

Всем спасибо, ситуация более менее обрисовалась.
...
Рейтинг: 0 / 0
03.03.2014, 18:10:27
    #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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / эксклюзивная блокировка таблиц ? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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