Re: PostgreSQL client hangs sometimes on 'EXEC SQL PREPARE sid_sisisinst FROM :select_anw;'

From: Matthias Apitz <guru(at)unixarea(dot)de>
To: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: PostgreSQL client hangs sometimes on 'EXEC SQL PREPARE sid_sisisinst FROM :select_anw;'
Date: 2020-05-10 10:52:26
Message-ID: 20200510105226.GA14033@sh4-5.1blu.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

El día Dienstag, April 28, 2020 a las 10:10:18 +0200, Matthias Apitz escribió:

>
> I've added the proposed log line to the server code in src/backend/libpq/pqcomm.c
> and restarted the server with this. In the log file /data/postgresql11/data/serverlog
> are other messages about length of packages, like:
>
> 2020-04-28 09:49:49.877 CEST [16229] LOG: invalid length of startup packet
> 2020-04-28 09:49:50.117 CEST [16231] LOG: invalid length of startup packet
>
> They're coming from:
>
> grep 'invalid length of startup packet' src/backend/*/*.c
> src/backend/postmaster/postmaster.c: errmsg("invalid length of startup packet")));
>
> I will change the code there to to get the 'len' printed with the
> message
>
> ...
> if (len < (int32) sizeof(ProtocolVersion) ||
> len > MAX_STARTUP_PACKET_LENGTH)
> {
> ereport(COMMERROR,
> (errcode(ERRCODE_PROTOCOL_VIOLATION),
> errmsg("invalid length %d of startup packet", len)));
> return STATUS_ERROR;
> }

I'm still trying to catch from where (i.e. from which client connection) the above
message are originated. Over the actual weeken(!), I see the following
picture:

# egrep 'bogus|incomplete message from|invalid length' /data/postgresql11/data/serverlog
...
2020-05-09 05:35:20.124 CEST [6905] LOG: invalid length 33554940 of startup packet
2020-05-09 05:35:20.368 CEST [6907] LOG: invalid length 33554940 of startup packet
2020-05-09 05:38:14.381 CEST [7186] LOG: invalid length 33554940 of startup packet
2020-05-09 05:38:14.669 CEST [7246] LOG: invalid length 33554940 of startup packet
2020-05-10 05:34:56.716 CEST [13241] LOG: invalid length 33554940 of startup packet
2020-05-10 05:34:56.942 CEST [13243] LOG: invalid length 33554940 of startup packet
2020-05-10 05:37:46.599 CEST [13921] LOG: invalid length 33554940 of startup packet
2020-05-10 05:37:49.577 CEST [14017] LOG: invalid length 33554940 of startup packet

i.e. the messages only appear short after 5:3x am; this is exactly the
time when (based on cronjobs) our software is deployed to this server
and all servers (the clients for PostgreSQL) are started. Following
questions:

1. In addition to the above code, can I get somehow the connecting client's PID? If
so, I could get from its PID its command line from the /proc file
system. This would help to instrument the client side with logging.
There are some hundred clients of different server types booting up
at this time frame after the deployment.

2. Can I get something out of the buffer of the startup packet? For
example, with adding to the above change something like:

{
char buf[1024+1];
memset (buf, 0, sizeof(buf));
pq_getbytes(buf, 1024);
buf[1024] = '\0';
ereport(COMMERROR, (errcode(ERRCODE_PROTOCOL_VIOLATION),
errmsg("first 1024 bytes of startup packet [%s]", buf)));
}

Thanks

matthias

--
Matthias Apitz, ✉ guru(at)unixarea(dot)de, http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2020-05-10 15:33:41 Re: PostgreSQL client hangs sometimes on 'EXEC SQL PREPARE sid_sisisinst FROM :select_anw;'
Previous Message Mariya Rampurawala 2020-05-10 09:25:38 PostgreSQL-12 replication failover, pg_rewind fails