问题现象
OBServer 日志中出现如下日志的原因。
INFO [SQL] ob_px_admission.cpp:160 [7696][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=10] [dc=0] It's a px query, out of px worker resource, need delay, do not need disconnect(req_worker_count=24, admit_worker_count=0, plan.get_px_dop()=6, plan.get_plan_id()=10102029, ret=-5307)
问题原因
SQL 使用 PX 时 PX 线程不足导致。这个 PX 线程由 parallel_servers_target 参数决定。 parallel_servers_target 用于设置每个 Server 上的大查询排队条件。当并行执行(Parallel eXecution,PX)消耗的线程数超过大查询排队条件后,后继并行执行需要排队等待。关于 parallel_servers_target 参见 parallel_servers_target。
如果创建租户语句里指定了
parallel_servers_target值,则该租户按照指定值来设定parallel_servers_target。创建租户时指定
parallel_servers_target值的示例语句如下。obclient > CREATE TENANT IF NOT EXISTS <tenant_name> CHARSET='utf8mb4', ZONE_LIST=('zone1'), PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('<pool_name>') set parallel_servers_target = 64;
如果创建租户时没有指定
parallel_servers_target值,则在 OBServer 内部创建租户的过程中,会自动根据max_cpu计算出一个值来设定,通过登录租户,使用如下命令查看该值。obclient > SHOW VARIABLES like 'parallel_servers_target';
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。
解决方法
调整如下参数,增加 PX 线程。
obclient> SET GLOBAL parallel_servers_target=160;