并行执确实是一个涵盖多个层面的复杂主题,它需要投入一定的时间和精力来深入理解,才能充分掌握其功能。为了帮助初学者更快地掌握并行执行的技巧,我们提供了这份Quick Start,它适用于 OceanBase 3.1版本及以上的版本。虽然这里所提供的参数并非一定是最优配置,但已经能够避免绝大多数潜在的问题情况。
并行执行系列的内容分为七篇博客,本篇是最后一篇。
一 | 并行执行概念 |
二 | 如何手动设置并行度 |
三 | 并行执行线程资源管理方式 |
四 | 并行执行的4种类别 |
五 | 并行执行参数的应用技巧 |
六 | 如何进行并行执行的诊断与调优 |
七 | 快速上手并行执行 |
环境初始化
在 AP 租户下设置:
/* MySQL */
set global parallel_servers_target = MIN_CPU * 20;/* Oracle */
alter system set parallel_servers_target = MIN_CPU * 20;
统计信息搜集
3.x 版本的统计信息搜集跟合并绑定,所以在导入数据之后,需要发起一轮合并才能保证统计信息的搜集。
4.x 版本在导入数据之后,可以直接调用 DBMS_STAT 统计信息包来搜集统计信息。
HINT 设置
每条 SQL 的并行度(DOP),最大不要超过物理CPU 数量的 1.5 倍。
一般来说,如果没有多个 SQL 并发执行,单条 SQL 的并行度可以设置为 CPU 数。
例如,系统的物理CPU 数为 32,那么 HINT 就设置为 /*+ PARALLEL(32) */
性能调优
top -H
看看租户 CPU 使用情况- 单条 SQL 性能不符合预期,请联系技术支持同学使用 sql_plan_monitor 获取性能报告并进行初步判定,然后可交由 OB 的研发同学进行进一步的分析。
常见问题
- Query 查询性能不符合预期,CPU 没用满
请执行 show variables like 'parallel_servers_target
确认 target 值不小于 MIN_CPU * 20
2. PDML 性能不符合预期
请使用 explain extended 解释 PDML,确认计划走了 PDML。如果没有走 PDML,计划最底部的 Note 字段会说明原因。一般是因为被修改的表包含了 trigger、外键、local unique index 等原因。
如果出现 DISTRIBUTED INSERT,DISTRIBUTED UPDATE,DISTRIBUTED DELETE 等字样,就说明没有走 PDML。
3. PDML 超时,内部日志显示出现 -4138 OB_SNAPSHOT_DISCARDED 报错
请调大 undo_retention 参数,使其不小于 PDML 的最大执行时间。它的默认值只有 30min,一旦 PDML 执行时间超过 30min,就可能遇到这个问题,导致执行终止,重试,直到超时。
4. 业务不能做任何修改,如何让业务 SQL 并行起来?
OBProxy 允许用户在 WEB 界面上修改连接配置,开启并行。例如,在读写分离连接上,将全部 SQL 的并行度设置为 2:
OBProxy 版本 3211bp1 及以上;WEB 界面版本:2023年4月迭代,发布时间五月初。