BUG #13635: Interlocks at selection with array_agg

From: pawel(dot)samysev(at)gmail(dot)com
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #13635: Interlocks at selection with array_agg
Date: 2015-09-24 09:56:26
Message-ID: 20150924095626.2596.10390@wrigleys.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 13635
Logged by: pawel
Email address: pawel(dot)samysev(at)gmail(dot)com
PostgreSQL version: 9.4.4
Operating system: Debian 7
Description:

My company develops mailing server. We introduce new server and copy
database to it. It has 24 processor server. Every tables has millions
records. After copy we start update tables.We run 72 queries at parallel at
different part of table. And we periodical see locks with drammatical fail
productivity. But query shouldn`t create any interlocks.

Query:

```
UPDATE phone p
SET mailing_id = (
SELECT array_agg(mailing_id)
FROM message m
WHERE m.phone_id = p.phone_id
)
WHERE
p.phone_id BETWEEN :min AND :max
```

Table schemas:

```

-- Table: phone

-- DROP TABLE phone;

CREATE TABLE phone
(
phone_id bigserial NOT NULL, -- Primary key
"number" character varying(15), -- Number
date_modified timestamp with time zone DEFAULT now(),
region_id integer, -- ID region of number
last_visit interval,
mailing_id integer[],
client_db_id integer[],
CONSTRAINT phone_pkey PRIMARY KEY (phone_id),
CONSTRAINT phone_number_key UNIQUE (number)
)
WITH (
OIDS=FALSE
);
ALTER TABLE phone
OWNER TO "postgres";
GRANT ALL ON TABLE phone TO "postgres";

-- Index: phone_client_db_id_idx

-- DROP INDEX phone_client_db_id_idx;

CREATE INDEX phone_client_db_id_idx
ON phone
USING gin
(client_db_id);

-- Index: phone_mailing_id_idx

-- DROP INDEX phone_mailing_id_idx;

CREATE INDEX phone_mailing_id_idx
ON phone
USING gin
(mailing_id);

-- Index: phone_number_idx

-- DROP INDEX phone_number_idx;

CREATE INDEX phone_number_idx
ON phone
USING btree
(number COLLATE pg_catalog."default");

-- Index: phone_region_id_idx

-- DROP INDEX phone_region_id_idx;

CREATE INDEX phone_region_id_idx
ON phone
USING btree
(region_id);

-- Table: message

-- DROP TABLE message;

CREATE TABLE message
(
message_id integer NOT NULL DEFAULT
nextval('message_message_id_seq'::regclass), -- Primary key
mailing_id integer,
phone_id integer,
message_status integer,
date_added timestamp without time zone,
date_modified timestamp without time zone,
CONSTRAINT message_pkey PRIMARY KEY (message_id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE message
OWNER TO "postgres";

-- Index: message_date_modified_idx

-- DROP INDEX message_date_modified_idx;

CREATE INDEX message_date_modified_idx
ON message
USING btree
(date_modified);

-- Index: message_mailing_id_idx

-- DROP INDEX message_mailing_id_idx;

CREATE INDEX message_mailing_id_idx
ON message
USING btree
(mailing_id);

-- Index: message_message_id_idx

-- DROP INDEX message_message_id_idx;

CREATE INDEX message_message_id_idx
ON message
USING btree
(message_id);

-- Index: message_message_status_idx

-- DROP INDEX message_message_status_idx;

CREATE INDEX message_message_status_idx
ON message
USING btree
(message_status);

-- Index: message_phone_id_idx

-- DROP INDEX message_phone_id_idx;

CREATE INDEX message_phone_id_idx
ON message
USING btree
(phone_id);

```

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Francisco Olarte 2015-09-24 16:43:16 Re: BUG #13635: Interlocks at selection with array_agg
Previous Message David G. Johnston 2015-09-23 18:17:43 Re: BUG #13634: postgresql-9.4.4-3-x64 server firing empty messages on console