并行执行适用场景

想利用 OceanBase 的并行执行(Parallel Execution,PX)来加速后台跑批任务。我需要在 SQL 中加 Hint(如 /*+ PARALLEL(8) */ )吗?如果所有 SQL 都默认开启并行,会不会对 OLTP 的短事务造成负面影响?如何配置并行度的自动管理?

2 个赞

顶一下

@论坛小助手

并行执行(Parallel Execution,PX)是 OceanBase 数据库提供的一种性能优化手段,适用于长耗时的 SQL 查询和大数据量的批处理任务,可以显著提升这些任务的执行效率。在您的场景中,确实可以通过在 SQL 语句中添加 Hint(如 /*+ PARALLEL(8) */)来手动指定并行度,以此加速后台跑批任务。

但是,并非所有 SQL 都适合并行执行,特别是对于 OLTP 场景下的短事务而言,开启并行反而可能增加额外的调度开销,从而导致性能下降。因此,建议仅针对耗时较长的 SQL 语句开启并行执行。

关于并行度的自动管理,OceanBase 支持多种方式来配置并行执行策略:

  1. 手动指定并行度:在 SQL 语句中通过 Hint 直接设置并行度,如 /*+ PARALLEL(8) */
  2. 全局并行 Hint:通过全局 Hint 设置默认的并行度,如 /*+ PARALLEL(8) */,但需谨慎使用,以免影响 OLTP 业务。
  3. 系统变量配置 DOP:可以通过系统变量来控制并行度,例如:
    SET GLOBAL ob_parallel_degree_policy='AUTO';
    
    这样可以让数据库根据实际负载情况动态调整并行度。
  4. Schema DOP:为特定的表或索引设置并行度,这样在查询该表或索引时会自动使用设定的并行度。

需要注意的是,当涉及 PL UDF/dblink 的场景时,禁止查询开启并行执行;对于使用 DAS 扫描的基表,不支持指定并行度。

总之,在决定是否开启并行执行以及如何配置并行度时,应综合考虑业务需求和查询的实际执行情况,合理选择合适的并行策略。

具体信息可参考以下文档:

  1. Hint
  2. 并行开启方式及优先级
  3. 分布式执行计划管理