openGauss数据库中如何单独查看逻辑读和物理读

本文介绍了一种在openGauss数据库中通过分析系统表SUMMARY_STATEMENT来估算SQL语句逻辑读和物理读的方法,无需生成WDR报告,通过两次执行SQL并计算缓存访问次数实现。作者计划后续进行验证和优化。
摘要由CSDN通过智能技术生成

在使用openGauss数据库时,如果我们要想查看某条目标SQL语句的逻辑读和物理读,可以通过用快照生成WDR报告的方式来查看,但是这种方法比较麻烦。我通过学习WDR报告中逻辑读和物理读的生成原理,观察研究系统表,发现了一个可以单独查看这两个参数的方法,分享给大家。如有不当之处,欢迎大家指出。

一、原理

在系统表summary_statement中,针对某一特定SQL语句,我们可以通过n_blocks_fetched获取buffer的块访问次数,即缓存访问次数,通过n_blocks_hit获取buffer的块命中次数,即缓存命中次数。如果一次访问只读取一块的话,那么缓存命中次数就是逻辑读,缓存未命中次数就是物理读。如果假设成立我们可以给出以下计算方法:

n_blocks_hit = 逻辑读

n_blocks_fetchde = 逻辑读+物理读

n_blocks_fetchde - n_blocks_hit = 物理读

注: 系统表summary_statement详细内容可前往官方网站查看:Summary Statement

 

二、具体方法

1.用gsql工具连接openGauss数据库,然后执行一次目标SQL语句。

2.执行下面语句,获取目标SQL语句的首次执行的逻辑读和物理读。其中where条件需要根据实际情况修改。

select unique_sql_id SQL_ID,query 目标SQL语句,n_blocks_fetched 缓存访问次数,n_blocks_hit 逻辑读, n_blocks_fetched - n_blocks_hit 物理读,last_updated 日期时间 from dbe_perf.SUMMARY_STATEMENT where query like '目标查询语句'  and user_name = '当前连如openGauss数据库的用户名称';

3.第二次执行目标SQL语句,并在执行完成之后再次执行2中给出的语句。

按照理论来说,目标SQL语句涉及数据较少时,第二次获取到的物理读与第一次一样,即目标SQL语句第二次执行的物理读为0,第二次获取到的逻辑读减去首次获取到的逻辑读可以得到目标SQL语句第二次执行的逻辑读,第二次及以后逻辑读和物理读的数值将会固定下来。

三、举例

1.用db_0205用户连接数据库之后,目标SQL如下。

select * from h;

2. 获取首次逻辑读和物理读。

select unique_sql_id SQL_ID,query 目标SQL语句,n_blocks_fetched 缓存访问次数,n_blocks_hit 逻辑读, n_blocks_fetched - n_blocks_hit 物理读,last_updated 日期时间 from dbe_perf.SUMMARY_STATEMENT where query like 'select * from h;'  and user_name = 'db_0205';

注意:如果目标语句中有阿拉伯数字,请用%替代,否则将找不到该语句。

首次执行:逻辑读:83;物理读:155

3.第二次执行,重复步骤2。

第二次执行:逻辑读:233-83=150;物理读:155-155=0

4.第三次执行,重复步骤2。

第三次执行: 逻辑读:383-233=150;物理读:155-155=0

这套方法得出的逻辑读和物理读在数字规律上符合理论规律,因此该方法应该是可行的。但是,此方法尚未与WDR报告中的该目标SQL语句的逻辑读和物理读作比对,编者后续会抽时间对该方法做进一步验证和优化。

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值