ITPub博客

首页 > 数据库 > 数据库开发技术 > openGauss学习笔记-305 openGauss AI特性-AI4DB数据库自治运维-ABO优化器-自适应计划选择

openGauss学习笔记-305 openGauss AI特性-AI4DB数据库自治运维-ABO优化器-自适应计划选择

原创 数据库开发技术 作者:shuchaoyang 时间:2024-03-03 07:00:00 0 删除 编辑

openGauss学习笔记-305 openGauss AI特性-AI4DB数据库自治运维-ABO优化器-自适应计划选择305.1 概述305.2 前置条件305.3 使用指导305.4 最佳实践305.5 常见问题处理

openGauss学习笔记-305 openGauss AI特性-AI4DB数据库自治运维-ABO优化器-自适应计划选择

305.1 概述

自适应计划选择作用于使用通用缓存计划进行计划执行的场景。通过使用范围线性扩张进行缓存计划探索,通过范围覆盖匹配进行计划选择。自适应计划选择弥补了传统单一缓存计划无法根据查询条件参数进行变化带来的性能问题,并且避免了频繁调用查询优化。

305.2 前置条件

数据库运行正常,GUC参数"enable_cachedplan_mgr"为on,启动自适应计划选择功能。

305.3 使用指导

现网环境下,对存在缓存计划问题的query使用hint开启计划自适应管理能力:

select /*+ choose_adaptive_gplan */ * from tab where c1 = xxx;

JDBC客户端默认会将以上带hint的SQL转换为PBE模型,并建立查询模板。除直接修改SQL外,hint还可通过sqlpatch能力进行添加。

gsql环境下,可以使用手动创建查询模板的模式进行:

prepare test_stmt as select /*+ choose_adaptive_gplan */ * from tab where c1 = $1;

305.4 最佳实践

多索引自适应选择支持,举例如下:

create table t1(c1 int, c2 int, c3 int, c4 varchar(32), c5 text);
create index t1_idx2 on t1(c1,c2,c3,c4);
create index t1_idx1 on t1(c1,c2,c3);

insert into t1( c1, c2, c3, c4, c5) SELECT (random()*(2*10^9))::integer , (random()*(2*10^9))::integer,  (random()*(2*10^9))::integer, (random()*(2*10^9))::integer,  repeat('abc', i%10) ::text from generate_series(1,1000000) i;
insert into t1( c1, c2, c3, c4, c5) SELECT (random()*1)::integer, (random()*1)::integer, (random()*1)::integer, (random()*(2*10^9))::integer, repeat('abc', i%10) ::text from generate_series(1,1000000) i;

性能对比:

随机参数:c1~ random(1, 20); c2~ random(1, 20); c3~ random(1, 20); c4 ~ random(2, 10000)

线程数50,客户端50,执行时长60s

305.5 常见问题处理

对于过于复杂的慢查询由于特征范围限制,可能无法使用本特性正确进行计划选择,建议直接使用CPLAN进行查询计划生成。


👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!


PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我吧!


原文作者:超哥的IT私房菜;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
专注于IT系统集成、运维、架构二十年的IT职场老兵,拥有CCNA、OCA、OCP、PGCA、PGCE认证证书,公众号:超哥的IT私房菜,知识星球:超哥的IT私房菜,目前是多家IT厂商的咨询顾问。

注册时间:2021-08-27

  • 博文量
    552
  • 访问量
    303582