代码之家  ›  专栏  ›  技术社区  ›  Konrad Garus

PostgreSQL中的“缓冲区”有多大

  •  4
  • Konrad Garus  · 技术社区  · 14 年前

    我正在使用 pg_buffercache

    SELECT c.relname, count(*) AS buffers
    FROM pg_buffercache b INNER JOIN pg_class c
        ON b.relfilenode = c.relfilenode AND
           b.reldatabase IN (0, (SELECT oid FROM pg_database WHERE datname = current_database()))
    GROUP BY c.relname
    ORDER BY 2 DESC
    LIMIT 10;
    

    我发现了 sample_table 正在使用120个缓冲区。

    120个缓冲区的字节数是多少?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Edmund    14 年前

    PostgreSQL的硬编码块大小为 字节—请参阅 pre-defined block_size variable shared_buffers MB 它将为您进行转换。

    通过努力工作,可以将块大小更改为其他值。对于少数应用程序,可能会有一个更优化的大小,但代码对大小进行假设的位置数量很大。

        2
  •  0
  •   Pablo Luna    8 年前

    根据Edmund所说,我们可以在方案数据库中进行选择:

    SELECT c.relname,
       Pg_size_pretty(Count(*) * 8192)
       AS buffered,
       Round(100.0 * Count(*) / (SELECT setting
                                 FROM   pg_settings
                                 WHERE  name = 'shared_buffers') :: INTEGER, 1)
       AS
       buffers_percent,
       Round(100.0 * Count(*) * 8192 / Pg_relation_size(c.oid), 1)
       AS
       percent_of_relation
    FROM   pg_class c
           INNER JOIN pg_buffercache b
                   ON b.relfilenode = c.relfilenode
           INNER JOIN pg_database d
                   ON ( b.reldatabase = d.oid
                        AND d.datname = Current_database() )
    WHERE  Pg_relation_size(c.oid) > 0
    GROUP  BY c.oid,
              c.relname
    ORDER  BY 3 DESC
    LIMIT  10;