想利用 OceanBase 的并行执行(Parallel Execution,PX)来加速后台跑批任务。我需要在 SQL 中加 Hint(如 /*+ PARALLEL(8) */ )吗?如果所有 SQL 都默认开启并行,会不会对 OLTP 的短事务造成负面影响?如何配置并行度的自动管理?
2 个赞
顶一下
并行执行(Parallel Execution,PX)是 OceanBase 数据库提供的一种性能优化手段,适用于长耗时的 SQL 查询和大数据量的批处理任务,可以显著提升这些任务的执行效率。在您的场景中,确实可以通过在 SQL 语句中添加 Hint(如 /*+ PARALLEL(8) */)来手动指定并行度,以此加速后台跑批任务。
但是,并非所有 SQL 都适合并行执行,特别是对于 OLTP 场景下的短事务而言,开启并行反而可能增加额外的调度开销,从而导致性能下降。因此,建议仅针对耗时较长的 SQL 语句开启并行执行。
关于并行度的自动管理,OceanBase 支持多种方式来配置并行执行策略:
-
手动指定并行度:在 SQL 语句中通过 Hint 直接设置并行度,如
/*+ PARALLEL(8) */。 -
全局并行 Hint:通过全局 Hint 设置默认的并行度,如
/*+ PARALLEL(8) */,但需谨慎使用,以免影响 OLTP 业务。 -
系统变量配置 DOP:可以通过系统变量来控制并行度,例如:
这样可以让数据库根据实际负载情况动态调整并行度。SET GLOBAL ob_parallel_degree_policy='AUTO'; - Schema DOP:为特定的表或索引设置并行度,这样在查询该表或索引时会自动使用设定的并行度。
需要注意的是,当涉及 PL UDF/dblink 的场景时,禁止查询开启并行执行;对于使用 DAS 扫描的基表,不支持指定并行度。
总之,在决定是否开启并行执行以及如何配置并行度时,应综合考虑业务需求和查询的实际执行情况,合理选择合适的并行策略。
具体信息可参考以下文档: