ob是否存在标量子查询缓存

有点好奇OB是否存在Oracle一样的标量子查询缓存,这个应该怎么观测呢,只看monitor的starts列可行吗?

17 个赞

@论坛小助手

2 个赞

根据您的问题,您想知道OceanBase(OB)是否支持类似Oracle的标量子查询缓存机制,并且询问如何观察这一功能的存在与否,特别是通过monitor表中的starts列来观测的方法是否可行。

OceanBase与标量子查询缓存

  • 是否存在标量子查询缓存:当前公开资料中没有明确指出OceanBase直接实现了类似Oracle数据库里的标量子查询缓存特性。标量子查询缓存在某些特定场景下可以显著提高性能,因为它能够避免重复执行相同的标量子查询,而是在第一次执行后将结果存储起来以供后续使用。

  • 监控方法:在OceanBase中,如果您想要了解某个查询的执行情况,包括它是否有可能受到了任何形式的缓存影响,通常可以通过查看执行计划、统计信息或者使用V$SQL_MONITOR视图等手段来进行。但是,专门针对“标量子查询缓存”的状态或效果,如Oracle中的starts列这样的直接指标,在OceanBase官方文档里并没有直接提到。这意味着仅仅依靠starts列可能无法准确反映是否有类似于标量子查询缓存的行为发生。

观察建议

  1. 检查执行计划:首先,可以通过分析具体的SQL语句的执行计划来看是否有迹象表明某个子查询的结果被重用了。例如,执行计划中显示的优化器选择路径、成本估算等都可能间接提示出某些部分被缓存了。

  2. 利用监控工具:OceanBase提供了多种监控工具和视图,比如OCP控制平台或是通过命令行查询一些系统表/视图(GV$SQL_AUDIT, GV$PLAN_CACHE_PLAN_STAT 等)来获取更多关于SQL执行的详细信息。这些资源可以帮助你更好地理解查询是如何被执行的,尽管它们可能不会直接指出是由于某种缓存机制导致的结果变化。

  3. 查阅最新文档或联系支持:鉴于技术不断进步,以及产品版本迭代可能导致的功能更新,请务必查阅最新的OceanBase官方文档或直接联系OceanBase技术支持团队确认是否有新增或计划添加此类特性及其具体实施细节。

综上所述,虽然OceanBase可能不直接提供与Oracle完全一致的标量子查询缓存功能,但还是有其他途径可以探究相似行为的影响程度。对于更详细的配置选项和技术支持,建议参考最新发布的官方指南或咨询专业技术人员。

7 个赞

加油

3 个赞

啥叫标量子查询呢,咋没听说过呢

3 个赞

学习了

4 个赞

加油

3 个赞

努力

3 个赞

顶顶

3 个赞

官方文档看看

3 个赞

就是sql的这种写法,Oracle租户模式下是可以的,我们在用的很多脚本也是这个写法。
SELECT a.name, a.loc,

(SELECT MAX(b.sal)

FROM table_2 b

WHERE b.deptno = a.deptno) AS max_sal

FROM table_1 a;

4 个赞

AI经常胡诌八扯。

1 个赞

学习一下

1 个赞

666

用三个测试表去做验证,10w数据量,一个内表,两个外表(连接列基数有差别,高唯一值10w/低唯一值100)

如果按starts是该算子的重扫描次数去看,都做了10w次扫描,说明不具有标量子查询缓存特性?
但是消耗和时间上差距明显,output_rows也不同。如果是同样的逻辑,数据量一样,消耗和时间应该一致才对。

我还是倾向于存在标量子查询缓存,不过starts的逻辑和oracle不同,走了缓存starts也算上了次数。

2 个赞

如果不支持,就改造掉。

学习下

你好,你提的这个技术问题牵涉到OceanBase企业版范围内的功能细节;针对此类问题,建议你通过以下方式寻求帮助:

  1. 如你所在的企业客户已签署OceanBase企业版销售合同,请你联系客户经理;

  2. 如你所在的企业客户尚未签署OceanBase企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。

另外,我们欢迎你使用社区版,并在论坛/社群中分享你对社区版本的想法、经验和问题,与其他社区成员共同交流。

66666

讲解非常到位。