Em 9 de novembro de 2012 12:54, Renato Ricci <renatoricc...@gmail.com>escreveu:

> Após eu carregar a contrib pg_buffercache em meu banco, executei um select
> que está na página oficial do PostgreSQL (
> http://www.postgresql.org/docs/9.1/static/pgbuffercache.html ):
>
> select sum ( buffers)
>       from (SELECT c.relname, count(*) AS buffers
>              FROM pg_buffercache b INNER JOIN pg_class c
>              ON b.relfilenode = pg_relation_filenode(c.oid) AND
>                 b.reldatabase IN (0, (SELECT oid FROM pg_database
>                                       WHERE datname = current_database()))
>              GROUP BY c.relname
>              ORDER BY 2 DESC)a;
>
> o resultado foi: 9834
> ou seja... há 9.834 buffer carregados na memória.. multiplicando por 8k
> (que é o tamanho de cada buffer), tenho 78.672k ou seja.. +- 78 megas..
> Seria esses 78 MB o tamanho do banco em memória? ou seja.. se tenho
> shared_buffers setado para 512MB, podemos dizer que no momento atual estou
> dedicando muito mais memória do que realmente preciso?
>
>
Exatamente... e provavelmente o seu PostgreSQL está sendo penalizado por
causa disso, pois cada operação que ele realiza ele varre *toda* a shared
memory (shared_buffers), e se vc está alocando apenas 78Mb dos 512Mb que
reservou, então ele está disperdiçando recursos nessa varredua que é, no
mínimo, inútil.

O select abaixo eu uso para ver a quantidade de shared memory alocada e não
alocada:

SELECT datname,
       CASE
         WHEN relfilenode IS NOT NULL THEN
           'ALLOCATED'
         ELSE
           'FREE'
       END,
       pg_size_pretty(count(*) * current_setting('block_size')::integer) AS
size
  FROM pg_buffercache b
       LEFT JOIN pg_database d on d.oid = b.reldatabase
 GROUP BY 1, 2;

Um ponto importante, um select na "pg_buffercache" é uma operação muito
*cara* porque ele precisa bloquear todas as páginas para poder inspecionar
e devolver o resultado, e isso quer dizer que todas as operações que estão
sendo executadas irão ficar esperando esse select, então *use com
moderação*.

Att,

-- 
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL
>> Blog sobre TI: http://fabriziomello.blogspot.com
>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
>> Twitter: http://twitter.com/fabriziomello
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a