一. 前言
在openGauss中,select * from pg_stat_database可以看到每个数据库缓存命中率(blks_hit)的统计,如下所示:
本文主要走读openGauss的代码来了解openGuass是在怎样进行缓存命中率的统计的。
二. 数据库级别缓存命中率(blks_hit)统计实现流程
在openGuass中,每一个表(Relation)的结构体有一个字段pgstat_info,pgstat_info->t_counts中会存放着relation的各种统计信息,如元祖的读取数量,缓存的命中数量等,如下是整个代码的实现流程。
1. 首先在回话初始化的时候,pgstat_initstats函数会在回话中,创建pgstat_info的内存空间并且赋值给relation->pgstat_info,代码流程如下所示:
pgstat_initstats
rel->pgstat_info = get_tabstat_entry
hash_entry = (TabStatHashEntry*)hash_search(u_sess->stat_cxt.pgStatTabHash, &rel_key);
return entry // entry就是relation的pgstat_info
2. 在读取数据块的时候,传入realtion&#