pg_buffercache
视图 pg_buffercache
模块提供了一种方法实时检查共享缓冲区。
该模块提供了一个 C 函数pg_buffercache_pages
,它返回一个记录的集合,外加一个包装了该函数以便于使用的视图pg_buffercache
。
默认情况下,使用仅限于超级用户和pg_monitor
角色的成员。可以使用GRANT
给其他人授予访问权限。
pg_buffercache
视图视图显示的列的定义如表 F.15所示。
表 F.15. pg_buffercache
列
列类型 描述 |
---|
ID,在范围 1.. |
关系的文件结点编号 |
关系的表空间 OID |
关系的数据库 OID |
关系内的分叉数,见 |
关系内的页面数 |
页面是否为脏? |
Clock-sweep 访问计数 |
对这个缓冲区加 pin 的后端数量 |
共享缓存中的每一个缓冲区都有一行。没有使用的缓冲区的行中只有bufferid
为非空。共享的系统目录被显示为属于数据库零。
因为缓冲是所有数据库共享的,通常会有不属于当前数据库的关系的页面。这意味着对于一些行在pg_class
中可能不会有匹配的连接行,或者甚至有错误的连接。如果你试图与pg_class
连接,将连接限制于reldatabase
等于当前数据库 OID 或零的行是一个好主意。
由于缓冲区管理器锁不会用于复制视图将显示的缓冲区状态数据,因此访问pg_buffercache
视图对正常缓冲区活动的影响较小,但它不会在所有缓冲区中提供一致的结果集。但是,我们确保每个缓冲区的信息是自洽的。
regression=# SELECT n.nspname, c.relname, count(*) AS buffers
FROM pg_buffercache b 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()))
JOIN pg_namespace n ON n.oid = c.relnamespace
GROUP BY n.nspname, c.relname
ORDER BY 3 DESC
LIMIT 10;
nspname | relname | buffers
------------+------------------------+---------
public | delete_test_table | 593
public | delete_test_table_pkey | 494
pg_catalog | pg_attribute | 472
public | quad_poly_tbl | 353
public | tenk2 | 349
public | tenk1 | 349
public | gin_test_idx | 306
pg_catalog | pg_largeobject | 206
public | gin_test_tbl | 188
public | spgist_text_tbl | 182
(10 rows)
F.32.1. 函数 pg_visibility模块提供了一种方式来检查一个表的可见性映射(VM)以及页级别的可见性信息。它还提供了函数来检查可...
SQL DEFAULT 约束SQL DEFAULT 约束 DEFAULT 约束用于向列中插入默认值。 如果没有规定其他的值,那么会将默认值添加到所有的新记...
SQL MIN() FunctionMIN() 函数 MIN() 函数返回指定列的最小值。 SQL MIN() 语法SELECT MIN(column_name) FROM table_name;演...
MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有...
对于开发人员来说,mysql管理工具可以说是必不可缺的,它能帮助开发人员在许多方面支持包括PostgreSQL、MySQL、Redis、MongoDB等...