4012 - Timeout, query has reached the maximum query timeout: 60000000(us), maybe you can adjust the session variable ob_query_timeout or query_timeout hint, and try again.
如果查询中使用了 query_timeout Hint 或者会话级别的 ob_query_timeout 被动态修改为较小值,也可能导致查询立即失败。
2. 解决方法
方法一:检查表和分区状态
使用以下 SQL 检查表及其分区的状态:
-- 查看表的分区信息
SELECT * FROM oceanbase.__all_virtual_partition WHERE table_id = (SELECT table_id FROM oceanbase.__all_table WHERE table_name = 'yl_channel');
-- 查看表的副本分布
SELECT * FROM oceanbase.__all_virtual_clog_stat WHERE tenant_id = (SELECT tenant_id FROM oceanbase.__all_tenant WHERE tenant_name = '<your_tenant_name>') AND partition_key IN (SELECT partition_key FROM oceanbase.__all_virtual_partition WHERE table_id = (SELECT table_id FROM oceanbase.__all_table WHERE table_name = 'yl_channel'));
如果发现某些分区的副本不可用或状态异常,请尝试修复分区或重新加载数据。
方法二:检查租户资源和参数配置
确认租户的 ob_query_timeout 参数是否被动态修改为较小值:
SHOW VARIABLES LIKE 'ob_query_timeout';
如果需要调整全局或会话级别的超时时间,可以执行以下命令:
-- 修改租户级别的超时时间(单位:微秒)
SET GLOBAL ob_query_timeout = 60000000;
-- 修改会话级别的超时时间
SET SESSION ob_query_timeout = 60000000;
方法三:检查表元数据
如果怀疑表的元数据存在问题,可以尝试重建表或索引:
ALTER TABLE yl_channel REBUILD PARTITION;
ALTER TABLE yl_channel REBUILD INDEX;