首批通过分布式安全可靠测评,为关键业务系统打造
SQL 执行报错 errcode=-5307
更新时间:2024-01-11 08:52
问题描述
在 OceanBase 数据库中,出现了大量慢SQL重试的情况。日志中显示如下信息。
INFO [SQL] ob_px_admission.cpp:161 [26710][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=14] [dc=0] It's a px query, out of px worker resource, need delay, do not need disconnect(req_worker_count=4, admit_worker_count=0, plan.get_px_dop()=4, plan.get_plan_id()=598925, ret=-5307)
WDIAG [SQL.SESSION] ob_result_set.cpp:153 [26710][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=44] [dc=0][errcode=-5307] fail to exec execute()(ret=-5307)
INFO [SERVER] ob_query_retry_ctrl.cpp:595 [26710][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=5] [dc=0] check if need retry(client_ret=-5307, err=-5307, retry_type_=2, retry_times=1, multi_stmt_item={is_part_of_multi_stmt:true, seq_num:0, sql:"select /*+ PARALLEL(4) */
适用版本
OceanBase 数据库 V3.x 版本。
问题原因
业务租户的 parallel_servers_target(默认值为 0)用于设置每个 Server 上的并行查询排队条件。当多条并行执行(Parallel eXecution,PX)SQL 总计消耗的线程数超过并行查询排队条件后,后继并行执行 SQL 需要排队等待。
上述示例中 parallel_servers_target 值为 3,对 PX 类型的 SQL 进行约束,当超过这个阈值 3,阻塞后续的 PX 类型 SQL 的执行,现在实际使用的并行线程数为 3。由于 parallel_servers_target 值太小,导致 SQL 的 DOP(并行度)被降低,实际分配的线程数 3 小于 SQL 语句中使用 PARALLEL(4) Hint 期望使用的并行线程数为 4。
解决方法
调大业务租户的全局 parallel_servers_target 参数,增加 PX 线程数。
例如:
obclient> SET GLOBAL parallel_servers_target=160;