You need to enable JavaScript to run this app.
导航
系统读写信息统计(pg_stat_kcache)
最近更新时间:2023.08.09 12:30:31首次发布时间:2023.08.08 23:52:58

pg_stat_kcache 是一款对 PostgreSQL 在运行过程中对文件系统读写信息进行统计的插件。

实现原理

pg_stat_kcache 是在查询执行前后,分别调用 Linux 接口 getrusage 获取进程相关资源信息,最后计算前后差值,即为当前查询所使用的资源信息。

说明

  • pg_stat_kcache 相关函数和视图定义,依赖于 pg_stat_statements 插件。在使用前,需要更改 shared_preload_libraries 参数,将 pg_stat_statementspg_stat_kcache 加入到该参数的运行值。

  • 修改 shared_preload_libraries 参数需要重启实例。请参考修改参数,谨慎操作。

核心对象

pg_stat_kcache 的核心对象如下表所示。

对象类型对象名称对象描述使用示例

GUC 参数

pg_stat_kcache.linux_hz

  • 整数类型,最小值 -1,最大值 INT_MAX,默认值 -1。

  • 采样错误的补偿值,见: linux CONFIG_HZ。

set pg_stat_kcache.linux_hz = -1;

pg_stat_kcache.track

枚举类型,取值范围为:[none, top, all],默认值为 top,表示控制追踪哪些 SQL 语句,取值含义如下:

  • top: 追踪最顶层的 SQL 语句,通常由客户端直接发出的语句。

  • all: 追踪顶层语句 和 嵌套语句,比如在 Function 中执行的嵌套 SQL 语句。

  • none:关闭追踪。

set pg_stat_kcache.track = all;

pg_stat_kcache.track_planning

  • bool 类型,默认值为 false。

  • PostgreSQL 13 以及以上版本生效。

  • 表示是否追踪查询优化期间的资源使用情况。

set pg_stat_kcache.track_planning = true;

函数

pg_stat_kcache()

返回共享内存中记录的追踪信息。
可以直接调用,但通常通过 pg_stat_kcache_detail 视图调用。

select * from pg_stat_kcache();
select pg_stat_kcache();

pg_stat_kcache_reset()

清空记录的追踪信息。

select pg_stat_kcache_reset();

视图

pg_stat_kcache_detail

将 pg_stat_kcache() 、pg_stat_statements、pg_database、pg_roles 进行 join 查询的结果。

select * from pg_stat_kcache_detail;

pg_stat_kcache

将 pg_stat_kcache_detail 视图按照 datname 维度进行 sum 聚集。

Select *  from pg_stat_kcache;

函数和视图列名含义

列名称类型描述
datnamename数据库名称。
plan_user_timedouble precisionpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化的用户 CPU 耗时,单位为秒,或者毫秒。PostgreSQL 13 及以上版本生效。
plan_system_timedouble precisionpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化的系统 CPU 耗时,单位为秒,或者毫秒。PostgreSQL 13 及以上版本生效。
plan_minfltsbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时的页面回收(soft page faults)数目。PostgreSQL 13 及以上版本生效。
plan_majfltsbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时的页面回收(hard page faults)数目。PostgreSQL 13 及以上版本生效。
plan_nswapsbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时的 swap 数目。PostgreSQL 13 及以上版本生效。
plan_readsbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时,通过文件系统发起的 read 字节数。PostgreSQL 13 以及以上版本生效。
plan_reads_blksbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时,通过文件系统发起 read 的 8K 块数。PostgreSQL 13 以及以上版本生效。
plan_writesbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时,通过文件系统发起的 write 字节数。PostgreSQL 13 以及以上版本生效。
plan_writes_blksbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时,通过文件系统发起 write 的 8K 块数。PostgreSQL 13 以及以上版本生效。
plan_msgsndsbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时,发送的 IPC 消息数。PostgreSQL 13 以及以上版本生效。
plan_msgrcvsbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时,接收的 IPC 消息数。PostgreSQL 13 以及以上版本生效。
plan_nsignalsbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时,接收的 信号数。PostgreSQL 13 以及以上版本生效。
plan_nvcswsbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时,发生的主动上下文切换数。PostgreSQL 13 以及以上版本生效。
plan_nivcswsbigintpg_stat_kcache.track_planning 开启生效,表示对 SQL 进行查询优化时,发生的被动上下文切换数。PostgreSQL 13 以及以上版本生效。
exec_user_timedouble precision表示 SQL 执行阶段的用户 CPU 耗时,单位为秒,或者毫秒。
exec_system_timedouble precision表示 SQL 执行阶段的系统 CPU 耗时,单位为秒,或者毫秒。
exec_minfltsbigint表示 SQL 执行阶段的页面回收(soft page faults)数目。
exec_majfltsbigint表示 SQL 执行阶段的页面回收(hard page faults)数目。
exec_nswapsbigint表示 SQL 执行阶段的 swap 数目。
exec_readsbigint表示 SQL 执行阶段,通过文件系统发起的 read 字节数。
exec_reads_blksbigint表示 SQL 执行阶段,通过文件系统发起 read 的 8K 块数。
exec_writesbigint表示 SQL 执行阶段,通过文件系统发起的 write 字节数。
exec_writes_blksbigint表示 SQL 执行阶段,通过文件系统发起 write 的 8K 块数。
exec_msgsndsbigint表示 SQL 执行阶段,发送的 IPC 消息数。
exec_msgrcvsbigint表示 SQL 执行阶段,接收的 IPC 消息数。
exec_nsignalsbigint表示 SQL 执行阶段,接收的信号数。
exec_nvcswsbigint表示 SQL 执行阶段,发生的主动上下文切换数。
exec_nivcswsbigint表示 SQL 执行阶段,发生的被动上下文切换数。

安装插件

使用以下命令即可安装插件。

create extension pg_stat_statements ;
create extension pg_stat_kcache ;

插件的使用

前提条件

  • 已完成 GUC 参数配置。

    已将 pg_stat_statementspg_stat_kcache 加入 shared_preload_libraries 列表中。

  • 已经安装插件。

  • 已导入数据。

使用插件

  1. 开启读写,并查询资源使用情况。

    sysbench --test=./tests/include/oltp_legacy/oltp.lua --db-driver=pgsql --pgsql-db=sysbench --pgsql-user=root --pgsql-password=Bd2021_bd --pgsql-port=5432 --pgsql-host=10.249.184.214 --oltp-tables-count=10 --oltp-table-size=1000000 --max-time=120 --max-requests=0 --num-threads=50 --report-interval=3  --forced-shutdown=1 run
    
  2. 查询资源使用情况。

    select * from pg_stat_kcache_detail;
    select * from pg_stat_kcache;
    select pg_stat_kcache_reset();