Thread

Commits

  1. Avoid "invalid memory alloc request size" while reading pg_stat_activity.

  1. invalid memory alloc request size from pg_stat_activity?

    James Tomson <james@pushd.com> — 2019-05-06T23:04:18Z

    Hello,
    
    We're upgrading from postgresql 9.6 to 10.6 and everything is working fine, but any query against pg_stat_activity results in ERROR:  invalid memory alloc request size 1652113408
    
    e.g:
    
    ourdb=> SELECT pid, state, age(query_start, clock_timestamp()), usename, query FROM pg_stat_activity WHERE query != '<IDLE>' AND state != 'idle' ORDER BY age limit 100;
    ERROR:  invalid memory alloc request size 1652113408
    
    Maybe this has to do with us setting track_activity_query_size=102400? Is there a known safe maximum for that, or could there be some other problem?
    
    Thanks,
    James
    
    
    
  2. Re: invalid memory alloc request size from pg_stat_activity?

    Euler Taveira <euler@timbira.com.br> — 2019-05-07T13:37:41Z

    Em seg, 6 de mai de 2019 às 20:04, James Tomson <james@pushd.com> escreveu:
    >
    > ourdb=> SELECT pid, state, age(query_start, clock_timestamp()), usename, query FROM pg_stat_activity WHERE query != '<IDLE>' AND state != 'idle' ORDER BY age limit 100;
    > ERROR:  invalid memory alloc request size 1652113408
    >
    That is because it is limited to 1GB - 1.
    
    > Maybe this has to do with us setting track_activity_query_size=102400? Is there a known safe maximum for that, or could there be some other problem?
    >
    Question is: why do you want to return such a big query text? That's
    impractical for admin/monitoring tools. We can usually identify a
    query with 1024 bytes (that is the default).
    
    
    -- 
       Euler Taveira                                   Timbira -
    http://www.timbira.com.br/
       PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
    
    
    
    
  3. Re: invalid memory alloc request size from pg_stat_activity?

    Alvaro Herrera <alvherre@2ndquadrant.com> — 2019-05-07T14:55:13Z

    On 2019-May-07, Euler Taveira wrote:
    
    > Em seg, 6 de mai de 2019 às 20:04, James Tomson <james@pushd.com> escreveu:
    > >
    > > ourdb=> SELECT pid, state, age(query_start, clock_timestamp()), usename, query FROM pg_stat_activity WHERE query != '<IDLE>' AND state != 'idle' ORDER BY age limit 100;
    > > ERROR:  invalid memory alloc request size 1652113408
    > >
    > That is because it is limited to 1GB - 1.
    > 
    > > Maybe this has to do with us setting track_activity_query_size=102400? Is there a known safe maximum for that, or could there be some other problem?
    > >
    > Question is: why do you want to return such a big query text? That's
    > impractical for admin/monitoring tools. We can usually identify a
    > query with 1024 bytes (that is the default).
    
    Hmm, but 102400 is only 100kB, nowhere near the 1GB-1 limit, so there's
    something odd going on there.
    
    I would start investigating by attaching a debugger and setting a
    breakpoint on 'errfinish', then running the above query; past the
    backtrace here, as it might be illuminating.
    
    -- 
    Álvaro Herrera                https://www.2ndQuadrant.com/
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
    
    
    
    
  4. Re: invalid memory alloc request size from pg_stat_activity?

    Tom Lane <tgl@sss.pgh.pa.us> — 2019-05-07T14:59:30Z

    James Tomson <james@pushd.com> writes:
    > We're upgrading from postgresql 9.6 to 10.6 and everything is working fine, but any query against pg_stat_activity results in ERROR:  invalid memory alloc request size 1652113408
    
    > e.g:
    
    > ourdb=> SELECT pid, state, age(query_start, clock_timestamp()), usename, query FROM pg_stat_activity WHERE query != '<IDLE>' AND state != 'idle' ORDER BY age limit 100;
    > ERROR:  invalid memory alloc request size 1652113408
    
    That seems odd ...
    
    > Maybe this has to do with us setting track_activity_query_size=102400?
    
    It wouldn't surprise me if reading pg_stat_activity causes allocation of
    track_activity_query_size * max_connections bytes, but unless you also
    have max_connections set to some pretty insane value, that wouldn't
    be enough to fit this observation.
    
    Did you have these parameters set differently in 9.6?
    
    			regards, tom lane
    
    
    
    
  5. Re: invalid memory alloc request size from pg_stat_activity?

    Tom Lane <tgl@sss.pgh.pa.us> — 2019-05-07T15:14:27Z

    Alvaro Herrera <alvherre@2ndquadrant.com> writes:
    > Hmm, but 102400 is only 100kB, nowhere near the 1GB-1 limit, so there's
    > something odd going on there.
    
    I can reproduce the described behavior by also setting max_connections
    to something around 16K.
    
    Now, it seems pretty silly to me to be burning in excess of 1GB of shmem
    just for the current-query strings, and then that much again in every
    backend that reads pg_stat_activity.  But should we be telling people they
    can't do it?  I'm working on a patch to use MemoryContextAllocHuge for
    the "localactivity" buffer in pgstat_read_current_status.  It might seem
    dumb now, but perhaps in ten years it'll be common.
    
    			regards, tom lane
    
    
    
    
  6. Re: invalid memory alloc request size from pg_stat_activity?

    James Tomson <james@pushd.com> — 2019-05-07T16:22:39Z

    Thanks all - we did have our max_connections set very very high (100k) as we upgraded this db in a load test environment, and did not want to reboot the db after hitting the lower, saner, production limits during load testing.
    
    I am surprised this allocation was taking place for unused connections - I’ve also verified that lowering max_connections to 10K on this instance fixed the issue for us. Much appreciated! 
    
    Best,
    James
    
    > On May 7, 2019, at 11:14 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
    > 
    > Alvaro Herrera <alvherre@2ndquadrant.com> writes:
    >> Hmm, but 102400 is only 100kB, nowhere near the 1GB-1 limit, so there's
    >> something odd going on there.
    > 
    > I can reproduce the described behavior by also setting max_connections
    > to something around 16K.
    > 
    > Now, it seems pretty silly to me to be burning in excess of 1GB of shmem
    > just for the current-query strings, and then that much again in every
    > backend that reads pg_stat_activity.  But should we be telling people they
    > can't do it?  I'm working on a patch to use MemoryContextAllocHuge for
    > the "localactivity" buffer in pgstat_read_current_status.  It might seem
    > dumb now, but perhaps in ten years it'll be common.
    > 
    > 			regards, tom lane