Обсуждение: BUG #17518: Getting Error "new multixact has more than one updating member" when trying to delete records.

Поиск
Список
Период
Сортировка

BUG #17518: Getting Error "new multixact has more than one updating member" when trying to delete records.

От
PG Bug reporting form
Дата:
The following bug has been logged on the website:

Bug reference:      17518
Logged by:          Bob Krier
Email address:      rkrier@cleo.com
PostgreSQL version: 12.10
Operating system:   AWS RDS
Description:

We are getting an error executing a delete statement from JDBC like
follows:

DELETE FROM "EBI"."LOG_OF_CONNECTION" WHERE "DATE" < {some java date in
milliseconds}.  The error is as follows:
--->   "SQLException: ERROR: new multixact has more than one updating
member"

I've searched the web for this particular error and was only able to find
the source file
"https://github.com/postgres/postgres/blob/master/src/backend/access/transam/multixact.c",
but I don't know the conditions that cause it.  Is there any remedy to
this?


We have a table defined as follows:
CREATE TABLE "LOG_OF_CONNECTION" (
    "ID" bpchar(32) NOT NULL,
    "TYPE" int4 NOT NULL,
    "STATUS" int4 NULL,
    "DATE" int8 NULL,
    "MARKED_FOR_PURGE" int2 NULL,
    "CONNECTION_DIRECTION" varchar(1) NULL,
    "TARGET_DBP" bpchar(32) NULL,
    "ENDPOINT_ID" bpchar(32) NULL,
    "METHOD_MESSAGES" bytea NULL,
    "PERSISTENT_STORAGE_REQUESTED" int4 NULL,
    "PROCESS_USER_REF" int8 NULL,
    "CONNECTION_NUMBER" int4 NULL,
    "NOTIFICATION_TYPE" varchar(256) NULL,
    "TIME_SENT" int8 NULL,
    "CALC_RETURN_TIME" int8 NULL,
    "TIME_RECEIVED" int8 NULL,
    "IS_PROCESSED" int4 NOT NULL DEFAULT 0,
    "ENDPOINT_NAME" varchar(1024) NULL,
    "TRADING_PARTNER_ID" varchar(1024) NULL,
    "TRANSFER_ID" varchar(1024) NULL,
    "LOG_ORIGIN_OBJECT" varchar(1024) NULL,
    CONSTRAINT "LOG_OF_CONN_PK" PRIMARY KEY ("ID", "TYPE")
);
CREATE INDEX by_date_log_of_connection ON "EBI"."LOG_OF_CONNECTION" USING
btree ("DATE", "ID");
CREATE INDEX by_status_date_id3 ON "EBI"."LOG_OF_CONNECTION" USING btree
("ID", "TYPE", "STATUS", "DATE" DESC);
CREATE INDEX edi_late_ack_log_of_connection ON "EBI"."LOG_OF_CONNECTION"
USING btree ("ID");


Sorry for the late reply.


Dave Cramer
www.postgres.rocks


On Tue, 14 Jun 2022 at 12:03, PG Bug reporting form <noreply@postgresql.org> wrote:
The following bug has been logged on the website:

Bug reference:      17518
Logged by:          Bob Krier
Email address:      rkrier@cleo.com
PostgreSQL version: 12.10
Operating system:   AWS RDS
Description:       

We are getting an error executing a delete statement from JDBC like
follows:

DELETE FROM "EBI"."LOG_OF_CONNECTION" WHERE "DATE" < {some java date in
milliseconds}.  The error is as follows:
--->   "SQLException: ERROR: new multixact has more than one updating
member"

I've searched the web for this particular error and was only able to find
the source file
"https://github.com/postgres/postgres/blob/master/src/backend/access/transam/multixact.c",
but I don't know the conditions that cause it.  Is there any remedy to
this?


We have a table defined as follows:
CREATE TABLE "LOG_OF_CONNECTION" (
        "ID" bpchar(32) NOT NULL,
        "TYPE" int4 NOT NULL,
        "STATUS" int4 NULL,
        "DATE" int8 NULL,
        "MARKED_FOR_PURGE" int2 NULL,
        "CONNECTION_DIRECTION" varchar(1) NULL,
        "TARGET_DBP" bpchar(32) NULL,
        "ENDPOINT_ID" bpchar(32) NULL,
        "METHOD_MESSAGES" bytea NULL,
        "PERSISTENT_STORAGE_REQUESTED" int4 NULL,
        "PROCESS_USER_REF" int8 NULL,
        "CONNECTION_NUMBER" int4 NULL,
        "NOTIFICATION_TYPE" varchar(256) NULL,
        "TIME_SENT" int8 NULL,
        "CALC_RETURN_TIME" int8 NULL,
        "TIME_RECEIVED" int8 NULL,
        "IS_PROCESSED" int4 NOT NULL DEFAULT 0,
        "ENDPOINT_NAME" varchar(1024) NULL,
        "TRADING_PARTNER_ID" varchar(1024) NULL,
        "TRANSFER_ID" varchar(1024) NULL,
        "LOG_ORIGIN_OBJECT" varchar(1024) NULL,
        CONSTRAINT "LOG_OF_CONN_PK" PRIMARY KEY ("ID", "TYPE")
);
CREATE INDEX by_date_log_of_connection ON "EBI"."LOG_OF_CONNECTION" USING
btree ("DATE", "ID");
CREATE INDEX by_status_date_id3 ON "EBI"."LOG_OF_CONNECTION" USING btree
("ID", "TYPE", "STATUS", "DATE" DESC);
CREATE INDEX edi_late_ack_log_of_connection ON "EBI"."LOG_OF_CONNECTION"
USING btree ("ID");

On Tue, Jun 14, 2022 at 9:03 AM PG Bug reporting form <noreply@postgresql.org> wrote:
The following bug has been logged on the website:

Bug reference:      17518
Logged by:          Bob Krier
Email address:      rkrier@cleo.com
PostgreSQL version: 12.10
Operating system:   AWS RDS
Description:       

We are getting an error executing a delete statement from JDBC like
follows:

DELETE FROM "EBI"."LOG_OF_CONNECTION" WHERE "DATE" < {some java date in
milliseconds}.  The error is as follows:
--->   "SQLException: ERROR: new multixact has more than one updating
member"

If you try this via psql you don't see the error though?

Do you get the same error if you delete a single row using a PK instead of a bunch of rows via a date inequality?

Does it seem to matter which rows are being deleted in general, or how many?  How about columns?

Can you construct a self-contained minimal reproducer?

Does it manifest on standalone community PostgreSQL or just RDS?

David J.

Hi David,

 

Thanks for the response.

 

  • I haven’t tried via psql.  I only have a snapshot of the customer’s database that I can restore in RDS.  It is very time consuming to set this up.  I’ve corrected the problem by running VACUUM (FULL, FREEZE, VERBOSE, ANALYZE, INDEX_CLEANUP, TRUNCATE) on the table and the problem is resolved.
  • Deleting by date where it only matches to 1 row seems to work.  If I match on more than one, it seems to fail.  I’m not sure what conditions make it happen.  I have not tried to delete by PK.  I’m not sure what you mean by “How about columns?”.  You don’t specify columns on a delete statement.
  • Can I construct a self-contained minimal reproducer?:  No unfortunately exporting the table and importing it to another Postgres instance does not reproduce the issue.   Again the vacuum above corrects the issue.
  • Does it manifiest standalone…?  Again I only have the snapshot to restore on RDS and can reproduce it that way. 

 

Again, the issue is resolved.   Thanks for your attention to this!

 

Bob

 

Bob 
Krier
Cleo  |  
Principal Software Engineer II
Tel: 815‑986‑6759
  
 
Email: rkrier@cleo.com
  |  
Web: www.cleo.com
  
Request a Demo |
 Take a tour of CIC Cockpit with RADAR
 
 
 
 

From: David G. Johnston <david.g.johnston@gmail.com>
Sent: Saturday, June 25, 2022 4:52 PM
To: Krier, Bob <rkrier@cleo.com>; PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>
Subject: Re: BUG #17518: Getting Error "new multixact has more than one updating member" when trying to delete records.

 

On Tue, Jun 14, 2022 at 9:03 AM PG Bug reporting form <noreply@postgresql.org> wrote:

The following bug has been logged on the website:

Bug reference:      17518
Logged by:          Bob Krier
Email address:      rkrier@cleo.com
PostgreSQL version: 12.10
Operating system:   AWS RDS
Description:       

We are getting an error executing a delete statement from JDBC like
follows:

DELETE FROM "EBI"."LOG_OF_CONNECTION" WHERE "DATE" < {some java date in
milliseconds}.  The error is as follows:
--->   "SQLException: ERROR: new multixact has more than one updating
member"

 

If you try this via psql you don't see the error though?

 

Do you get the same error if you delete a single row using a PK instead of a bunch of rows via a date inequality?

 

Does it seem to matter which rows are being deleted in general, or how many?  How about columns?

 

Can you construct a self-contained minimal reproducer?

 

Does it manifest on standalone community PostgreSQL or just RDS?

 

David J.

 

On Mon, Jun 27, 2022 at 9:36 AM Krier, Bob <rkrier@cleo.com> wrote:

Hi David,

 

Thanks for the response.

 

  • I haven’t tried via psql.  I only have a snapshot of the customer’s database that I can restore in RDS.  It is very time consuming to set this up.  I’ve corrected the problem by running VACUUM (FULL, FREEZE, VERBOSE, ANALYZE, INDEX_CLEANUP, TRUNCATE) on the table and the problem is resolved.

Once you say "FULL" the rest of those options (except verbose) don't matter.
 
  • Deleting by date where it only matches to 1 row seems to work.  If I match on more than one, it seems to fail.  I’m not sure what conditions make it happen.  I have not tried to delete by PK.  I’m not sure what you mean by “How about columns?”.  You don’t specify columns on a delete statement.
 Not sure I was thinking clearly on that one - but ultimately you could try "ALTER TABLE ... DROP COLUMN" though I'm doubting it would be productive

  • Can I construct a self-contained minimal reproducer?:  No unfortunately exporting the table and importing it to another Postgres instance does not reproduce the issue.   Again the vacuum above corrects the issue.
  • Does it manifiest standalone…?  Again I only have the snapshot to restore on RDS and can reproduce it that way. 



David J.


On Mon, 27 Jun 2022 at 13:11, David G. Johnston <david.g.johnston@gmail.com> wrote:
On Mon, Jun 27, 2022 at 9:36 AM Krier, Bob <rkrier@cleo.com> wrote:

Hi David,

 

Thanks for the response.

 

  • I haven’t tried via psql.  I only have a snapshot of the customer’s database that I can restore in RDS.  It is very time consuming to set this up.  I’ve corrected the problem by running VACUUM (FULL, FREEZE, VERBOSE, ANALYZE, INDEX_CLEANUP, TRUNCATE) on the table and the problem is resolved.

Once you say "FULL" the rest of those options (except verbose) don't matter.
 
  • Deleting by date where it only matches to 1 row seems to work.  If I match on more than one, it seems to fail.  I’m not sure what conditions make it happen.  I have not tried to delete by PK.  I’m not sure what you mean by “How about columns?”.  You don’t specify columns on a delete statement.
 Not sure I was thinking clearly on that one - but ultimately you could try "ALTER TABLE ... DROP COLUMN" though I'm doubting it would be productive

  • Can I construct a self-contained minimal reproducer?:  No unfortunately exporting the table and importing it to another Postgres instance does not reproduce the issue.   Again the vacuum above corrects the issue.
  • Does it manifiest standalone…?  Again I only have the snapshot to restore on RDS and can reproduce it that way. 

Sounds to me like a corrupt table which is fixed by vacuuming.

Dave Cramer 



David J.