首批通过分布式安全可靠测评,为关键业务系统打造
PX 执行无法获得线程,无限重试直到 ob_query_timeout 超时
更新时间:2026-05-15 09:06
问题现象
SQL 使用 PX 并发执行,如果此时系统的 PX worker 数量不满足 SQL 的 PX 并行度,OceanBase 数据库不会向客户端返回报错,而是在后台不断重试并等待,直到超过 ob_query_timeout 后报 SQL 执行超时。
日志搜索可以发现日志信息。
INFO [SQL] ob_px_admission.cpp:85 [117534][2184][xxxxx-xxxxx] [lt=44] [dc=0] It's a px query, out of px worker resource, need delay, do not need disconnect(req_worker_count=48, admit_worker_count=0, plan.get_px_dop()=6, plan.get_plan_id()=679271, ret=-5307)
问题原因
如果租户的 CPU 资源不足,或者存在大量的 PX 并行执行的 SQL,导致 PX 线程一直处于繁忙状态,可能会出现新的 PX 执行的 SQL 长时间无法获得 PX 线程。
适用版本
OceanBase 数据库 V2.x、V3.x 版本。
解决方法
通过以下系统表来查看 PX 并行执行的统计。
gv$plan_cache_plan_stat表中的delayed_px_querys字段显示了 SQL 执行时发生 PX 线程等待的次数。__all_virtual_px_worker_stat表显示当前正在执行的 PX 线程的统计。
CPU 资源不足时:降低 SQL 执行的 PX 并行度,或者对并行执行的 SQL 进行限流。
CPU 资源足够时:调大
parallel_servers_target的值来分配更多的 PX 线程。