postgresql优化案例三:recheck cond

news/2024/7/9 19:42:34 标签: postgresql, 数据库

文章目录

  • 1.SQL语句
  • 2.查看改善前执行计划:
  • 3.解决方案
    • 3.1增加work_mem的size
    • 3.2.创建合适的索引
  • 4.改善后执行计划

1.SQL语句

delete from sap_dispatchingd_hist a
       where exists (select 1 
                       from sap_dispatchingm_hist b 
                      where a.ffact_no=b.ffact_no
                        and a.fsfc_no=b.fsfc_no
                        and b.fsfc_date <to_char(current_date -365,'yyyymmdd') );

2.查看改善前执行计划:

在这里插入图片描述
在上图执行计划中看到虽然pg选择使用bitmap的方式,同时使用了recheck cond,我们来看看recheck cond的定义:
It is a potential re-check of the condition that is not always performed.
Only if the bitmap is lossy (which EXPLAIN (ANALYZE) will indicate) the recheck is performed.
A bitmap index scan becomes lossy if work_mem is not big enough to contain a bitmap that contains one bit per table row. It will then degrade to one bit per 8K page. Rows from such blocks will have to be rechecked.
简单来说就是work_mem不足以放下bitmap時,會變為lossy模式,即從原來的每一行建立bit位变為每一頁建立bit位,這里的頁指包含匹配行的页

3.解决方案

3.1增加work_mem的size

默认是4MB,可以使用如下语句设定到期望的值,这里是设到64M

SET work_mem = 65536;

3.2.创建合适的索引

增加work_mem的size能够帮助解决问题,但是还是建议不要轻易使用,而应该首先优化sql或者索引,由于执行计划中使用的索引是idx_sap_dispatchingm_hist_01,我们看看这个索引的结构

relnamespace |               relname                |   attname   | attnum
--------------+--------------------------------------+-------------+--------
 wmspci_app   | idx_sap_dispatchingm_hist_01         | ffact_no    |      1
 wmspci_app   | idx_sap_dispatchingm_hist_01         | fsfc_no     |      2
 wmspci_app   | idx_sap_dispatchingm_hist_01         | fsfc_date   |      9

可以看到idx_sap_dispatchingm_hist_01索引是一个组合索引,由三个子段组成(ffact_no,fsfc_no,fsfc_date),但是执行计划建立bitmap时实际只是用了fsfc_date,因此,我们将只在这个字段建立索引,这样可以减少bitmap的大小

create index idx_sap_dispatchingm_hist_02 on sap_dispatchingm_hist(fsfc_date)

再来看看改善后执行计划

4.改善后执行计划

在这里插入图片描述
从上图可以看出,recheck cond已经消失.


http://www.niftyadmin.cn/n/447876.html

相关文章

什么是量词符?怎样理解量词符?

量词符用来设定某个模式出现的次数&#xff0c;通过使用量词符(?、、*、)能够完成某字符连续出现的匹配。具体如表所示。 上表中&#xff0c;“…”表示多次。为了更好地理解量词符的使用&#xff0c;下面我们以a字符为例进行演示&#xff0c;示例代码如下。 var reg /~a*…

gitlab_ci.yml展示单元测试报告 (FREE)

CI/CD 流水线通常包含验证您的代码的测试作业。 如果测试失败&#xff0c;流水线将失败并通知用户。处理合并请求的人必须检查作业日志并查看测试失败的地方&#xff0c;以便可以修复它们。 您可以将作业配置为使用单元测试报告&#xff0c;极狐GitLab 会显示有关合并请求的报…

系统测试工程师的岗位职责描述(合集)

系统测试工程师的岗位职责描述1 职责&#xff1a; 1、评审产品或项目需求的测试性&#xff0c;评审产品或项目开发设计的合理性。 2、根据需求进行测试规划&#xff0c;制定测试方案&#xff0c;设计测试用例; 组织测试用例评审; 3、根据测试计划进行项目测试进度和测试质量的管…

大运新能源强势登陆粤港澳大湾区车展 呈现品牌硬核实力

曾经&#xff0c;大运集团一句“风驰天下&#xff0c;大运摩托”广告语风靡全国。如今&#xff0c;大运集团创新前行&#xff0c;攻克难关&#xff0c;风雨兼程30多载&#xff0c;实现了从摩托到重卡再到新能源乘用车领域的转型升级。凭借长达30多年的造车经验&#xff0c;驻足…

环境变量中获取密码信息

##### python代码获取环境变量的值##### # 配置完环境变量&#xff0c;重启一下pycharm # 如果环境变量没配置&#xff0c;就用默认的 # 如果配置了&#xff0c;就用配置的&#xff08;项目上线时候&#xff0c;运维配置环境变量---》运维配置的环境变量的值----》开发根本不知…

【大学计算机技术】第七章 测试6

文章目录 选择题 选择题 TCP/IP协议的含义是( )。 A. 局域网传输协议 B. 拨号入网传输协议 C. 传输控制协议和网际协议 D. 网际协议 正确答案&#xff1a; C 网络的传输速率是l0Mb/s&#xff0c;其含义是( )。 A. 每秒传输10M字节 B. 每秒传输10M二进制位 C. 每秒可以传输10M个…

美国国家量子计划咨询委员会发布更新国家量子计划建议

​ &#xff08;图片来源&#xff1a;网络&#xff09; 耗资12亿美元的美国国家量子计划&#xff08;NQI&#xff09;于2018年12月颁布&#xff0c;该计划为期10年&#xff0c;现在将开展审查前五年的活动&#xff0c;并对今后五年的推进计划提出建议。为此&#xff0c;美国国…

GRE over IPsec VPN配置

GRE over IPsec VPN配置 【实验目的】 理解GRE Tunnel的概念。理解GRE over IPsec VPN的概念。掌握GRE Tunnel的配置。掌握GRE over IPsec VPN的配置。验证配置。 【实验拓扑】 实验拓扑如下图所示。 实验拓扑 设备参数表如下表所示。 设备参数表 设备 接口 IP地址 子网…