Re: Postgresql OOM

From: Radu Radutiu <rradutiu(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Pantelis Theodosiou <ypercube(at)gmail(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Postgresql OOM
Date: 2024-06-07 14:28:18
Message-ID: CAG4TxrjhEfZeZ1wKL-OdanbYRnCVBKY3hH513eWuxd2=3YJHig@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

>
>
>
>> The planner should recognize this situation and avoid use of hash
>> join in such cases, but maybe the statistics aren't reflecting the
>> problem, or maybe there's something wrong with the logic specific
>> to parallel hash join. You've not really provided enough information
>> to diagnose why the poor choice of plan.
>>
>> regards, tom lane
>>
>
> Thanks for looking into this. I'm not sure what information would be
> needed to look at the choice of plan.
> The statistics for the join conditions in the query would be:
> join_condition | min_count | max_count | avg_count
> ----------------+-----------+-----------+----------------------------
> snd_tro | 0 | 0 | 0.000000000000000000000000
> rpl_rec_tro | 0 | 2 | 0.99869222814474470477
> rec_tro | 0 | 2 | 0.99869222814474470477
> rpl_snd_tro | 0 | 0 | 0.000000000000000000000000
> r | 0 | 1 | 0.49850916663490161653
>
>
> The relevant columns for the tables are:
> postgres=# \d inputrequest
> Table "public.inputrequest"
> Column | Type | Collation |
> Nullable | Default
>
> --------------------------+-----------------------------+-----------+----------+---------
> input_sequence | bigint | | not
> null |
> msg_type | character varying(8) | | not
> null |
> msg_content | text | | not
> null |
> msg_reference | character varying(35) | |
> |
> originalrequest_id | bigint | |
> |
> receive_time | timestamp without time zone | | not
> null |
> related_output_sequence | bigint | |
> |
> msg_status | character varying(15) | |
> |
>
> Indexes:
> "inputrequest_pkey" PRIMARY KEY, btree (input_sequence)
> "inputrequest_originalrequest_id_idx" btree (originalrequest_id)
>
> postgres=# \d outputrequest
> Table "public.outputrequest"
> Column | Type | Collation |
> Nullable | Default
>
> ------------------------+-----------------------------+-----------+----------+---------
> output_sequence | bigint | | not
> null |
> input_sequence | bigint | |
> |
> msg_type | character varying(8) | |
> |
> msg_content | text | | not
> null |
> msg_reference | character varying(35) | |
> |
> reply_input_sequence | bigint | |
> |
> status | integer | | not
> null |
> related_input_sequence | bigint | |
> |
> Indexes:
> "outputrequest_pkey" PRIMARY KEY, btree (output_sequence)
> "outputrequest_input_sequence_idx" btree (input_sequence)
> "outputrequest_reply_input_sequence_idx" btree (reply_input_sequence)
>
>
I wonder if our choice of primary keys (input_sequence and output_sequence)
has something to do with the skew in the hash bucket distribution. We use
the following format: yyyymmdd????????xx , where ???????? is more or less a
sequence and xx is the node generating the id, i.e. 01,02,etc (with only
one or two values in the dataset).

I wonder if it would be difficult to have an upper limit on the private
memory that can be allocated by one process (or all processes similar to
Oracle's pga_aggregate_limit). I would rather have one query failing with
an error message instead of postgres eating up all memory and swap on the
server.

Best regards,
Radu

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2024-06-07 15:19:40 Re: XACT_EVENT for 'commit prepared'
Previous Message Tom Lane 2024-06-07 14:25:45 Re: ssl tests fail due to TCP port conflict