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
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 |