clickhouse执行SQL超时相关解决

报错关键字
 

Code: 159. DB::Exception: Received from 127.0.0.1:9000. DB::Exception: Wa
tching task /clickhouse/task_queue/ddl/query‐0002559735 is executing longer
than distributed_ddl_task_timeout (=180) seconds. There are 6 unfinished ho
sts (0 of them are currently active), they are going to execute the query i
n background.

 导致这个报错的原因:

clickhouse执行DDL语句的过程中有其他的相关的操作还在执行,导致DDL语句执行需要等待那些其他操作执行结束之后才能够继续执行。


 操作方案1:花一些时间等一下(最安全)


操作方案2:删除正在执行的SQL(较为妥当)

clickhouse执行SQL超时相关解决_第1张图片

SHOW PROCESSLIST # 查询正在执行的sql进程

KILL QUERY WHERE query_id='ff31a762-f54e-4ffb-b627-a33ece6340fc' #删除指定的query

操作方案3:登录ck集群的每个节点一个一个删除表,然后重建(慎用,主要会造成表数据丢失,如果有数据恢复方案的话可以执行)

在执行操作之前请千万备份表结构!!

clickhouse执行SQL超时相关解决_第2张图片

 

如何登录某个节点能够执行以下的SQL并且没有超时的话(sync的会同步删除zookeeper中的表)

DROP table [数据库名].[表名] on cluster [用户名] sync;
DROP table [数据库名].[归总表名] on cluster [用户名] sync;
#示例
DROP table ugs_product_pre.ubi_play_scale_day on cluster ugs sync;
DROP table ugs_product_pre.ubi_play_scale_day_all on cluster ugs sync;

如果登录某个节点执行删除失败的话可以尝试,每个节点都登陆然后一个一个执行drop 语句把对应的表删除。


操作方案4 :重命名表,然后删除zookeeper中的表然后新建(操作风险比较大,危险!慎用)

1.连接每个节点执行重命名操作

rename table [表名] to [新表名];
#例如
rename table view_program  to view_program_bak;

2.重命名之后需要删除zookeeper中的表

ls 进入指定的目录查看,确认之后再执行deleteall

# 进入zookeeper/bin,使用zkCli.sh脚本客户端登录zookeeper
./zkCli.sh -server 127.0.0.1:2181
# 其中${db_name}为待删除表所在数据库名,${table_name}为待删除表名。可使用ls可查看其子节点
ls /clickhouse
# 删除clickhouse表节点, 老版本使用rmr删除
deleteall /clickhouse/${db_name}/tables/01/${table_name}

注意需要先删除ck中的表,再删除zk中的表。如果操作不当可能导致zk中表无法删除,那只能重启整个集群,具体如何操作重启整个集群需要自行百度,我没操作过,然后可能会导致启动ck失败,这个时候需要把zk里面的对应的表删除才能启动ck


千万不要执行的错误操作!!!

detach table [数据库名].[表名] 
detach table ugs_product.view_channel 

这个操作是卸载表其实这个表还是存在ck中的,所以zk中的那个表还会一直存在,如果执行了这个操作你可以尝试执行一下以下的指令,不一定能完美解决。但是我是重启集群,删除zk中的表在解决的

ATTACH TABLE ugs_product.view_channel ON CLUSTER

你可能感兴趣的:(clickhouse)