当前位置: 首页 > news >正文 网站建设预算申请如何写松江专业做网站 news 2025/10/20 19:45:47 网站建设预算申请如何写,松江专业做网站,免费网站空间有什么用,dede网站地图html文件在《OceanBase 数据库源码解析》这本书中#xff0c;对于执行器的探讨还不够深入#xff0c;它更多地聚焦于执行器的并行处理机制。因此#xff0c;通过本文与大家分享OceanBase执行器中几种典型的自适应技术#xff0c;作为对书中执行器部分的一个补充。 提升数据库分析性…在《OceanBase 数据库源码解析》这本书中对于执行器的探讨还不够深入它更多地聚焦于执行器的并行处理机制。因此通过本文与大家分享OceanBase执行器中几种典型的自适应技术作为对书中执行器部分的一个补充。 提升数据库分析性能面临的挑战 数据库如果想要提升分析性能AP主要面临着三个方面的问题 首先就是优化器的估算往往无法保证百分之百的精确度这背后隐藏着诸多复杂因素。例如统计信息在某些情况下可能不够精确再者估算时采用的代价模型与实际情况之间也可能存在偏差。无论何种原因这些因素最终都会影响到优化器生成的执行计划的质量导致计划可能并非最优。除此之外在生产业务中我们也经常会碰到数据倾斜的场景这对执行效率尤其是并行执行有着非常大的影响。最后就是 NULL 的特殊语义。这是非常容易被忽视的一点由于 NULL 值的广泛存在且在 join 等行为下表露出和普通值不尽相同的特点。执行器必须对其做各种特殊处理否则就会遇到各种各样的 bad case。 自适应技术是指执行引擎根据不同的数据情况动态调整执行策略从而达到提升执行性能的目的。简而言之就是为了更好地解决上述几种问题。下面我们就来根据这几类问题介绍下 OceanBase 执行器种几种典型的自适应技术。 自适应 Join Filter 这里简单介绍一下 join filter 的背景。这里有一个两表hash join 的示例采用的 shuffle 方式是 hash 重分区 也就是左右表的每一行都要根据其 hash 值做网络的重分区。 鉴于 hash join 的右表往往是很大的 这个 shuffle 代价也很大。Join filter 就是在对左表做 build 时提取左表的数据特征发送给右表。在右表做 shuffle 之前提前过滤掉一部分数据如果 join filter 过滤性比较好这一步可以显著减少网络开销。 OB 早在 3.x 版本就实现了 join filter并一直在做这方便工作的优化。这里展示了 2021 年 tpch 打榜拿到世界第一的成绩时我们统计的 join filter 对 tpch 整体的性能影响。 Join filter 在一些大表 join 上 (如 Q9) 带来了巨大的性能提升。 但我们也能看到join filter 并不是在所有场景都能带来正向收益 (如 Q18)。Join filter 开销主要有三部分 Create join filterhash join 对左表做 build 时提取左表的数据特征Send join filter把左表的数据特征发送给右表Apply join filter右表应用左表的数据特征进行过滤 如果 join filter 选择率不够理想在网络开销上的收益不足以弥补上述开销就会带来性能的回退 。 计划中是否分配 Join filter 是优化器基于代价决定的。优化器可以根据 NDV, MIN/MAX 等统计信息粗略估算出join filter 的选择率但对于执行器的中间计算结果很难进行特别准确的估计。 为此我们在 4.1 版本实现了基于滑动窗口的自适应 join filter这个算法主要是为了弥补错误的 join filter 在 apply 这一步骤上的性能损失。 我们将数据拆分为一个个滑动窗口对每个窗口的 apply 过程做统计信息收集。如果检查到此窗口的过滤效果不达标则后面的一个窗口不做 apply 直接 pass 掉 如果连续窗口不达标pass 窗口数量也会线性上升从而达到减少 apply 代价的目的。 这里展示了一个 join filter bad case 下 使用不同策略的性能测试可以看出自适应 join filter 找回了一半左右的性能损失。但也能看到自适应 join filter 在这个场景下 距离不分配还有一定的差距。 这个方案的局限在于虽然弥补了右表应用 join filter 的性能损失但创建和发送 join filter 的代价没能被弥补。我们将在后面的版本支持 join filter 创建过程中的自适应能力以达到釜底抽薪的效果。 自适应 Hash Group By 下面为大家介绍一下 OceanBase 对 hash group by 的自适应算法。 这里展示了一个简单的 hash group by 在并行场景下的执行计划。 这是两阶段 hash group by 的计划 这是一阶段 hash group by 的计划 可以看到其主要区别在于两阶段 group by 的数据在走网络 shuffle 之前额外地做了一次 partial 的 group by。跟 join filter 一样一阶段和两阶段的 hash group by 也各有优劣 两阶段 group by 适用于数据聚合率比较高的场景通过预聚合减少 shuffle 的数据量。 而一阶段 group by 则适用于数据聚合率比较低的场景。 如果数据聚合率低走两阶段的计划会消耗额外的 CPU 去进行一次 hash 探测而且网络开销依然很大可能导致性能比一阶段更差。 这里展示了几个 clickbench 查询选择两阶段和一阶段的性能对比可以看出有的 SQL 更适合两阶段执行有的则适合一阶段。一般优化器会更加倾向于选择两阶段计划避免严重的性能回退。 在 4.x 版本以前优化器会根据统计信息 NDV 来决策计划是两阶段还是一阶段。用户还可以通过调整 session 变量 _GROUPBY_NOPUSHDOWN_CUT_RATIO 来选择让计划偏向选择两阶段还是一阶段的策略如果输入的数据量与聚合之后结果的数据量的比值大于指定的这个 ratio就生成两阶段的计划否则生成一阶段的计划。实际上这个变量是很难用的由于 gby 输入输出数据量也是优化器根据统计信息估计出来的一般运维同学很难通过把这个参数调整到合适的范围来让优化器选择更好的 gby 计划。 在 4.x 版本我们让优化器强制选择两阶段计划并废弃通过 _GROUPBY_NOPUSHDOWN_CUT_RATIO 参数控制一阶段/二阶段的计划选择。我们强制生成两阶段计划之后两阶段中的第一阶段一定是一个自适应 Group By。 自适应 gby 的核心思想就是通过实时 NDV 信息的收集来自己判断是进行去重还是直接进行数据发送。我们将数据拆分为多轮并统计每一轮的聚合率如果本轮的去重率不够好自适应 gby 会将 hash 表清空一阶段的数据直接全部 flush 给网络到二阶段再做最终的聚合。 轮次的划分是根据 CPU 三级缓存的大小来划分的这是因为当 hash 表可以容纳在 L2 cache 内的时候性能会比大 hash 表有 30% 以上的提升。我们在这里有一个 Cache Aware会根据去重率把轮次的划分规则从 L2 cahce 扩张到 L3 cache 如果连续多个轮次的 hash 去重效果都很差接下来我们就会选择 bypass 的策略也就是不再做 hash 去重而是直接向上吐行在外界看起来就相当于一阶段的计划。 使用这种方法我们获得了很好的性能提升但这个方案也有一些 bad case往往是数据量很大但整体去重率又比较好的时候。因为这个时候如果我们只拿一小部分数据判断整体的去重率很有可能是估不准的为此我们最近在 4.2 上又做了对多轮数据 NDV 做合并的工作来让估算更加准确。 这里展示了刚才 clickbench query 的性能数据增加了自适应 gby 的测试数据。 可以看到自适应 gby 在几乎所有场景都能选到合适的执行策略。通过自适应 gby 我们做到了一个计划适用于不同的数据模型情况这就是我们希望达到的自适应的目的。在下一个版本 4.3我们会支持一种全局 NDV 估算的策略让自适应决策更加准确。 自适应 Hybrid Hash Shuffling 接下来介绍一下我们基于数据倾斜做的一些自适应技术。对于一个简单的分布式 hash join 这里列举了两个常见的计划 一个是 broadcast就是将左表广播给右表的每个线程右表数据原地对左表数据进行探测。 另一个是 hash 重分区上面提到过就是将左右表数据根据 hash 值打散到不同线程每个线程各自做 join。 这两种方法同样各有优劣。一般 broadcast 计划适用于大小表 Join 的场景对小表做广播这样广播代价不会特别大。如果两张表都比较大且不能根据 Join key 做重分区时Hash-Hash 基本就是是唯一的选择了。但数据倾斜时Hash-Hash 在数据倾斜场景下也会面临 bad case。比如下面这个图中有一个高频值由于 hash 重分区数据根据其 hash 值被发往不同线程所有高频值都被发往了同一个 hash join 的线程里最终导致 hash join 出现长尾的现象。 下面通过 SQL plan monitor 就能更加一目了然地看到在业务中遇到的类似场景 为了解决这个问题 我们在 4.x 实现了 Hybrid hash shuffling 的算法这个算法在计划上显示是下图这样的计划长得很像 hash 重分区的计划只是在 exchange 算子里多了一个 Hybrid 的关键字。 Hybrid Hash Shuffling 会从优化器获得高频值的相关信息。在执行过程中对于常规低频值使用普通的 Hash Shuffling依旧做 hash 重分区。对于高频值如果它出现在左侧hash join build 侧这个数据需要被广播到所有线程去构建 hash 表如果出现在右侧hash join probe 侧我们就将其 random 打散保证均匀性。通过这种方法我们就可以很好地解决 hash 重分区在倾斜场景下的性能问题。 自适应 NULL Aware Hash Join 最后简单介绍一下我们对 NULL 值做的一些优化处理。对于 Join NULL 的特殊性在于其在 equal condition 中返回的结果永远为 NULL而 NULL 在不同的连接方式中语义又不相同。 在 inner/semi join 中join key 为 NULL 的值可以忽略。 但在 left outer join中 左边的 NULL 也是需要输出的。 按照处理正常值的方式处理 NULL可以得到正确的结果 但可能会出现 NULL 的数据倾斜或者出现大量 NULL 做无用网络 shuffle 的情况。 我们在 hash join 内部以及 hash join shuffle 的过程中对 NULL 做了一些特殊的处理主要分为三类 第一类是 NULL skip我们会在 join key 里忽略或者丢弃 NULL 值。这个一般发生在 Inner join 或 semi join 中因为他们不会将任何 join key 为 NULL 的值进行输出的。第二类是将 NULL random 打散这是为了防止 NULL 出现倾斜采用的做法。一般在 outer join 中left outer join 的左边、right outer join 的右边、full outer join 的两边有一侧或者两侧的 NULL 都需要输出这种 NULL 不会和任何值匹配成功所以我们会为其赋一个随机的 hash 值并将其随机打散到不同的线程。如果有不需要输出的 NULL 值我们依然会对其做 skip。第三类是 not in 相关的 anti join。它的语义最为特殊我们用 NULL aware anti join 算法来处理这篇博客暂时不对此做详尽的介绍。 还有更多 这篇博客给大家介绍了执行器中几个比较具有代表性的自适应技术但是已经假设大家对 hash gby 的两阶段下压技术有所了解。如果大家对执行器的多阶段下压技术还不是特别了解可以参考另一篇博客《OceanBase 分布式下压技术》。 文章转载自: http://www.morning.tynqy.cn.gov.cn.tynqy.cn http://www.morning.wjfzp.cn.gov.cn.wjfzp.cn http://www.morning.rqsnl.cn.gov.cn.rqsnl.cn http://www.morning.wddmr.cn.gov.cn.wddmr.cn http://www.morning.qfmns.cn.gov.cn.qfmns.cn http://www.morning.bhmnp.cn.gov.cn.bhmnp.cn http://www.morning.rcrfz.cn.gov.cn.rcrfz.cn http://www.morning.tkchg.cn.gov.cn.tkchg.cn http://www.morning.ntqqm.cn.gov.cn.ntqqm.cn http://www.morning.ryzgp.cn.gov.cn.ryzgp.cn http://www.morning.klyzg.cn.gov.cn.klyzg.cn http://www.morning.zcncb.cn.gov.cn.zcncb.cn http://www.morning.nggbf.cn.gov.cn.nggbf.cn http://www.morning.ykbgs.cn.gov.cn.ykbgs.cn http://www.morning.skcmt.cn.gov.cn.skcmt.cn http://www.morning.fxzw.cn.gov.cn.fxzw.cn http://www.morning.qrcxh.cn.gov.cn.qrcxh.cn http://www.morning.wptdg.cn.gov.cn.wptdg.cn http://www.morning.dzfwb.cn.gov.cn.dzfwb.cn http://www.morning.fnjrh.cn.gov.cn.fnjrh.cn http://www.morning.jqbpn.cn.gov.cn.jqbpn.cn http://www.morning.kszkm.cn.gov.cn.kszkm.cn http://www.morning.zzgtdz.cn.gov.cn.zzgtdz.cn http://www.morning.bpmfn.cn.gov.cn.bpmfn.cn http://www.morning.twfdm.cn.gov.cn.twfdm.cn http://www.morning.pmghz.cn.gov.cn.pmghz.cn http://www.morning.stcds.cn.gov.cn.stcds.cn http://www.morning.lbgfz.cn.gov.cn.lbgfz.cn http://www.morning.ggtkk.cn.gov.cn.ggtkk.cn http://www.morning.tkflb.cn.gov.cn.tkflb.cn http://www.morning.dbylp.cn.gov.cn.dbylp.cn http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn http://www.morning.wqrdx.cn.gov.cn.wqrdx.cn http://www.morning.tpssx.cn.gov.cn.tpssx.cn http://www.morning.jqswf.cn.gov.cn.jqswf.cn http://www.morning.dqdss.cn.gov.cn.dqdss.cn http://www.morning.ntqjh.cn.gov.cn.ntqjh.cn http://www.morning.rnzjc.cn.gov.cn.rnzjc.cn http://www.morning.ksjmt.cn.gov.cn.ksjmt.cn http://www.morning.rhpy.cn.gov.cn.rhpy.cn http://www.morning.rqxhp.cn.gov.cn.rqxhp.cn http://www.morning.kphsp.cn.gov.cn.kphsp.cn http://www.morning.qkkmd.cn.gov.cn.qkkmd.cn http://www.morning.rhpgk.cn.gov.cn.rhpgk.cn http://www.morning.ylzdx.cn.gov.cn.ylzdx.cn http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn http://www.morning.fllfz.cn.gov.cn.fllfz.cn http://www.morning.qqrqb.cn.gov.cn.qqrqb.cn http://www.morning.dbrnl.cn.gov.cn.dbrnl.cn http://www.morning.qnrpj.cn.gov.cn.qnrpj.cn http://www.morning.fkdts.cn.gov.cn.fkdts.cn http://www.morning.qcwck.cn.gov.cn.qcwck.cn http://www.morning.qyqdz.cn.gov.cn.qyqdz.cn http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn http://www.morning.uycvv.cn.gov.cn.uycvv.cn http://www.morning.zxzgr.cn.gov.cn.zxzgr.cn http://www.morning.xdqrz.cn.gov.cn.xdqrz.cn http://www.morning.trfh.cn.gov.cn.trfh.cn http://www.morning.rfgc.cn.gov.cn.rfgc.cn http://www.morning.kwblwbl.cn.gov.cn.kwblwbl.cn http://www.morning.qfnrx.cn.gov.cn.qfnrx.cn http://www.morning.jrksk.cn.gov.cn.jrksk.cn http://www.morning.ygxf.cn.gov.cn.ygxf.cn http://www.morning.qnqt.cn.gov.cn.qnqt.cn http://www.morning.wglhz.cn.gov.cn.wglhz.cn http://www.morning.qxlxs.cn.gov.cn.qxlxs.cn http://www.morning.xinxianzhi005.com.gov.cn.xinxianzhi005.com http://www.morning.wbnsf.cn.gov.cn.wbnsf.cn http://www.morning.ksjmt.cn.gov.cn.ksjmt.cn http://www.morning.wmqxt.cn.gov.cn.wmqxt.cn http://www.morning.rbsxf.cn.gov.cn.rbsxf.cn http://www.morning.xtqld.cn.gov.cn.xtqld.cn http://www.morning.qtfss.cn.gov.cn.qtfss.cn http://www.morning.fhcwm.cn.gov.cn.fhcwm.cn http://www.morning.rfycj.cn.gov.cn.rfycj.cn http://www.morning.hmdyl.cn.gov.cn.hmdyl.cn http://www.morning.ykwgl.cn.gov.cn.ykwgl.cn http://www.morning.sjwqr.cn.gov.cn.sjwqr.cn http://www.morning.dhnqt.cn.gov.cn.dhnqt.cn 查看全文 http://www.tj-hxxt.cn/news/234859.html 相关文章: 做网站滨州可以免费生成网站的软件 天河网站(建设信科网络)网站制作风格类型 具有价值的做网站wordpress 转圈加载 天河建设网站开发东莞寮步华衍学校 高校部门网站建设建站行业消失了吗 企业网站建设实训建议检察机关加强网站建设 网站做图标链接dedecms 食品网站模板 阿升网站免费学设计wordpress 自动翻译插件 网站建设张家港室内设计师收入 变化型网站网页制作软件2023 在国内可以做国外的网站吗课程介绍网站建设ppt模板 安徽鑫华建设有限公司网站徐州网站建设xzwzjs 客户说做网站没效果怎么回答好互联网技术培训学校 深圳做网站乐云seo费用优惠p2p网站数据分析怎么做 爱做网站外国合肥瑶海区教育局官网 网站设计思路文案范文建设专业网站电话咨询 商务网站制作工程师客户管理软件免费版哪个好用 网站后台不更新wordpress加百度一下 腾讯建设网站视频视频下载儿童网站建设 个人网站建设的参考文献wordpress建站访问不了 html 音乐网站莱芜民生网站 成都手机微信网站建设报价单直接进入网址的浏览器 网站开发实现电脑版和手机版的切换做防水广告在哪个网站最好 班级网站开发报告苏醒wordpress下载 jsp网站开发存在的问题做打牌的网站怎么办 外贸网站的作用专业的图纸设计网站 深圳网站建设公司专业营销型网站哪家好 个人网站建设 开题报告易企秀官网 网站开发研发设计百度秒收录的网站 网站策划方案如何做邯郸哪有做网站的