|
|
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
Вопрос к специалистам как следующее предложение может вызвать блокировку таблиц и заблокировать выполнение клиентских приложение : 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"); Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 17:16:17 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
rinace, Каких таблиц? Какая у вас проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 00:42:46 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
Ну и create index concurrently в тему. Ибо индекс ловит таблицу а в вашем случае всю ветку наследования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 00:46:01 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin, Лочит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 00:46:48 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 00:53:10 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
Misha TyurinНу и create index concurrently в тему. Ибо индекс лочит таблицу а в вашем случае всю ветку наследования стесняюсь спросить, какую ветку наследования кто наследует только что создаваемой таблице? зачем из-за какого-то однотабличного индекса лочить что бы то ни было ? к тому же "конкурентли" вряд ли транзакционноспособен (в многокомандном батче неисполним, думается. но могу врать). ну и прочих проблем от него ("конкурентли") многовато, в силу левизны реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 01:01:07 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
стесняюсь спросить, Селекту к родителю нужны все дети ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 01:06:05 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin, и ? вы не стесняйтесь, не говорите намёками, вы таки врежьте правду-матку технически, т.с. разложите по полочкам. а я постараюсь вникнуть , если будет во что ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 01:08:54 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Точно ексклюзивную а не более мягкую (селекты то может все таки будет разрешать) повесит на source ? Нету сессии под рукой проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 01:10:24 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
стесняюсь спросить, Планеру при селекте нужны все дети. Будем ждать лока на ребенке на котором индекс строится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 01:11:53 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
Misha Tyurinстесняюсь спросить, Планеру при селекте нужны все дети. Будем ждать лока на ребенке на котором индекс строитсяпланеру ничего не мешает планировать без индекса. никто ему индексов не обещал. к тому же команда исполняется в транзакционном батче - у планера нет ещё этого дитяти. тупо нет. низачот давайте, пытайтесь дальше, что ли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 01:15:25 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 01:30:13 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, С алтертейблом перпутал в данном случае, бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 09:49:39 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
стесняюсь спросить, Уважаемый, приходите ко мне на собеседование, встречное предложение. У меня складывается впечатление, что вы недооценены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 09:55:31 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin, спасибо за предложение, но я пока занят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 11:58:32 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
Misha Tyurinrinace, Каких таблиц? Какая у вас проблема? Был запущен скрипт содержащий данное SQL предложение. Тут же возникла проблема - зависли клиентские приложения. При просмотре сессий была обнаружена сессия содержащая данное предложение с признаком wait=true и еще множество сессий с признаком wait=true. Поскольку требовалось восстановить работоспособность, сессия была прибита. Вот теперь разбираюсь в ситуации. Скрипт все равно нужно будет запускать, думаю как сделать с наименьшим импактом. Всем спасибо, ситуация более менее обрисовалась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2014, 13:44:22 |
|
||
|
эксклюзивная блокировка таблиц ?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2014, 18:10:27 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38575835&tid=1998810]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
83ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 417ms |

| 0 / 0 |
