目录

文档用途

详细信息

文档用途

了解pg_buffercache扩展

详细信息

1.介绍

PostgreSQL额外支持模块之pg_buffercache pg_buffercache模块是pg内核原生支持的模块。完全编译后,其会存在于扩展目录中。pg_buffercache提供了一种实时检测共享缓冲区的方法。 这个模块提供了一个C函数:pg_buffercache_pages,它返回一个记录的集合和一个视图:pg_buffercache,它包装了这个函数来更方便的使用。 默认情况下,只有超级管理员(superusers)和角色 pg_read_all_stats的成员可以访问。也可通过grant命令授权。

test=# \d pg_buffercache;View "public.pg_buffercache"Column      |   Type   | Modifiers
------------------+----------+-----------bufferid         | integer  | relfilenode      | oid      | reltablespace    | oid      | reldatabase      | oid      | relforknumber    | smallint | relblocknumber   | bigint   | isdirty          | boolean  | usagecount       | smallint | pinning_backends | integer  |
 

pg_buffercache列的解释参考:

PostgreSQL: Documentation: 10: F.25. pg_buffercache

2.注意

共享缓存中的每个缓冲区都有一行。 未使用的缓冲区除了bufferid以外的所有列为null。 系统数据目录表(Shared system catalogs)所属数据库显示为0

因为缓存被所有的数据库共享使用,通常有些relation中的一些页面不属于当前的数据库。如果与pg_class做链接(join)查询,可能不会有匹配的连接行,或者甚至可能会有错误连接。如果你试图连接pg_class,一个好的办法就是将连接限制为reldatabase等于当前数据库的OID或者为零的行。

当访问pg_buffercache视图时,内部缓冲区管理器会锁住足够长的时间来拷贝所有这个视图会展示的缓冲区状态数据。这确保了这个视图产生一个一致的结果集,同时不会不必要的长时间阻碍正常的缓冲区活动。虽然如此,但是如果这个视图被频繁读取的话,会对数据库性能产生一些影响。

参考如下:

查询pg_buffercache信息
highgo=# select * from pg_buffercache;bufferid | relfilenode | reltablespace | reldatabase | relforknumber | relblocknumber | isdirty | usagecount | pinning_backends
----------+-------------+---------------+-------------+---------------+----------------+---------+------------+------------------1 |       13357 |          1664 |           0 |             0 |              0 | f       |          5 |                02 |        1260 |          1664 |           0 |             0 |              0 | f       |          4 |                03 |        1259 |          1663 |       13361 |             0 |              0 | f       |          5 |                04 |        1259 |          1663 |       13361 |             0 |              1 | f       |          5 |                05 |        1259 |          1663 |       13361 |             0 |              2 | f       |          5 |                06 |        1249 |          1663 |       13361 |             0 |              0 | f       |          5 |                0
......58 |        2965 |          1664 |           0 |             0 |              0 | f       |          5 |                0
......411 |        2618 |          1663 |       13361 |             2 |              0 | f       |          1 |                0412 |        2674 |          1663 |       13361 |             0 |             41 | f       |          2 |                0413 |             |               |             |               |                |         |            |                 414 |             |               |             |               |                |         |            |                 415 |             |               |             |               |                |         |            |
......highgo=# select count(*) from pg_buffercache;count
-------32767
(1 row)highgo=# select oid,relname from pg_class where oid in (1260,2965,1233);oid  |                 relname
------+-----------------------------------------1233 | pg_shdepend_reference_index2965 | pg_db_role_setting_databaseid_rol_index1260 | pg_authid
(3 rows)

以上每个缓冲区都有一行,共32767行

3.pg_buffercache应用:

1.查看shared buffers小大:

highgo=# SELECT name,setting,unit,current_setting(name) FROM pg_settings WHERE name='shared_buffers';name      | setting | unit | current_setting
----------------+---------+------+-----------------shared_buffers | 32767   | 8kB  | 262136kB
(1 row)highgo=# select count(*) from pg_buffercache;count
-------32767
(1 row)

每一个buffer是8kB,共有32767个buffer

2.创建扩展

create extension pg_buffercache;

3.可以通过isdirty字段询查脏块数个数或数据量

select count(*) from pg_buffercache where isdirty is true;
select count(*)*8/1024 || 'MB' from pg_buffercache where isdirty is true;

4.如果是未应用的buffer,那么除了bufferid,其他字段都为空值。可以查询未使用buffer的个数或数据量

select count(*)*8/1024||'MB' from pg_buffercache where relfilenode is null and reltablespace is null and reldatabase is null and relforknumber is null and relblocknumber is null and isdirty is null and usagecount is null;

5.查看数据库对象所占用buffer个数排名情况:

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
LIMIT 10;

relname             | buffers
---------------------------------+---------
pg_attribute                    |      27
pg_proc                         |      20
pg_class                        |      17
pg_operator                     |      14
pg_depend_reference_index       |      12
pg_depend                       |      11
pg_type                         |      10
pg_proc_oid_index               |       9
pg_rewrite                      |       7
pg_attribute_relid_attnum_index |       7
(10 rows)

更多详细信息请登录【瀚高技术支持平台】查看瀚高技术支持平台

Pg extention pg_buffercache相关推荐

  1. Pg extention pgcrypto

    目录 文档用途 详细信息 文档用途 了解pgcrypto扩展 详细信息 1.介绍 pgcrypto扩展是pg内核中支持的扩展插件,全部编译后,会扩展目录中找到. (GP/HGDW也可以安装pgcryp ...

  2. pg加密扩展的安装_为编译安装的PG安装扩展

    这个标题似乎很绕口.我的意思是如果是如果安装Postgres时,如果是自己下载源码编译安装,而make时又没有make world,就会导致的pg最终没有类似pg_stat_statements的扩展 ...

  3. PostgreSQL 性能分析插件 pg 监控工具

    pg 监控工具,分析pg的性能问题 pg_stat_statements http://www.postgres.cn/docs/10/pgstatstatements.html PostgreSQL ...

  4. pg 主键系统信息_神仙打架:PG 和 MySQL 到底哪个更好用?

    以下文章来源于 DBAplus社群概述 本文介绍MySQL和PostgreSQL的一些特性对比,让大家了解二者的优劣,更好的做出选择.当前国内的现状,互联网公司使用MySQL的较多,PostgreSQ ...

  5. pg数据库json数据类型_PG数据类型

    Name( 姓名 ) Aliases( 别名 ) bigint int8 bigserial serial8 bit [ ( n )] bit varying [ ( n ) ] varbit [ ( ...

  6. ceph存储 PG的状态机 源码分析

    文章目录 PG 的状态机和peering过程 1. PG 状态机变化的时机 2. pg的状态演化过程 3. pg状态变化实例讲解 3.1 pg状态的管理结构 3.2 数据的pg状态变化过程 3.2.1 ...

  7. ceph中使用ceph-objectstore-tool将pg从incomplete标记为complete

    起始原因是集群中部分osd元数据丢失,导致集群部分pg状态一直为incomplete,从而无法恢复为activate+clean 所以同事介绍之前调研得ceph-objectstore-tool工具来 ...

  8. python数据池连接PG

    发现网上都是mysql,后面发现PG跟mysql差不多,记录下来,怕忘了 import psycopg2 from DBUtils.PooledDB import PooledDB import ps ...

  9. 重新编号_武汉黄陂公交线路PW、PG、PZ……分不清?别急,就要重新编号啦

    黄陂公交线路,一直为陂人诟病,不是因为不准时,也不是因为线路少,更不是因为服务不规范,仅仅只是因为,小小一个县城内,公交线路的编号.黄陂公交线路现行的编排方式为"P+字母+数字", ...

最新文章

  1. 主角用计算机控制身体,国漫段子手:绝技,用计算机控制挖掘机炒菜
  2. 防火墙启动被拒绝解决方案
  3. Qt Linguist手册
  4. Matlab解析LQR与MPC的关系
  5. HTML-超链接锚点笔记
  6. wsl2安装_如何在Windows 10上安装WSL 2?
  7. Pytorch state_dict介绍
  8. 神经网络——激活函数的作用
  9. 90后迎来30岁,比升职更重要的是这8件事
  10. Nexus 6p 刷入TWRP和OPENGAPPS
  11. JS获取Json值以及通过值获取索引
  12. 【drawio笔记】在图表中添加和删除图层
  13. 【计算机网络】PPP协议
  14. getElementByID getElementsByName getElementsByTagName用法详解
  15. Android Accessibility(辅助功能) 学习
  16. 安卓如何使用layout布局的弹出框AlertDialog
  17. 一个实验了解多层内网渗透
  18. 《Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network》阅读笔记(二)
  19. 程序员培训后上班第一天
  20. java实现简易图书管理系统

热门文章

  1. 农业统计分析系列2-试验设计
  2. python输出去空格_python不空格
  3. js获取某一天是星期几
  4. 【数据应用案例】异动分析——指标逻辑树
  5. 青软实训-锐聘学院-Oracle作业
  6. 011235813用java写出来_C 编程练习题大全(带答案)
  7. 北京智源大会 | AI + 医疗的下一个十年:从公共卫生预警到人类基因密码破解 道翰天琼认知智能api机器人接口1。
  8. android 蓝牙自动断开,Android蓝牙:连接()/断开()
  9. 编码器SRT协议三种模式(listener, caller, rendezvous)简介
  10. mysqlin查询的java写法_[转载]常用的shell脚本