BUG #13635: Interlocks at selection with array_agg - Mailing list pgsql-bugs

From pawel.samysev@gmail.com
Subject BUG #13635: Interlocks at selection with array_agg
Date
Msg-id 20150924095626.2596.10390@wrigleys.postgresql.org
Whole thread Raw
Responses Re: BUG #13635: Interlocks at selection with array_agg  (Francisco Olarte <folarte@peoplecall.com>)
List pgsql-bugs
The following bug has been logged on the website:

Bug reference:      13635
Logged by:          pawel
Email address:      pawel.samysev@gmail.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);

```

pgsql-bugs by date:

Previous
From: "David G. Johnston"
Date:
Subject: Re: BUG #13634: postgresql-9.4.4-3-x64 server firing empty messages on console
Next
From: Francisco Olarte
Date:
Subject: Re: BUG #13635: Interlocks at selection with array_agg