clickhouse server 自动重启
一般情况下,如果不是主动使用systemctl stop clickhouse-server 停止clickhouse
而是使用kill -9 pid关闭clickhouse,或者异常奔溃,那么如果一切正常的情况下clickhouse server 10s检测进程,自动重启。
登录机器cat /etc/cron.d/clickhouse-server
*/10 * * * * root (which service > /dev/null 2>&1 && (service clickhouse-server condstart ||:)) || /etc/init.d/clickhouse-server condstart > /dev/null 2>&1
1.png
默认会10s检测一下服务进程是否正常,否则重启,检测时间可以调。/etc/init.d/clickhouse-server
2.png
集群执行DDL出现 distributed_ddl_task_timeout
在执行分布式DDL的时候出现这个问题一般是有一个节点处于假死状态,但是节点又没有完全奔溃,一般报错如下
Code: 159. DB::Exception: Received from xxxxx:29000. DB::Exception: Watching task /clickhouse/task_queue/ddl/query-0000xxxxxxx is executing longer than distributed_ddl_task_timeout (=180) seconds. There are 1 unfinished hosts (0 of them are currently active), they are going to execute the query in background.
distributed_ddl_task_timeout 执行超过了默认的180s。
首先检查异常节点机器网络,磁盘等信息,然后检查ck状态。一般都是磁盘满了或者网络问题,很少有zk集群出问题。处理方式的话都是清理磁盘和修复网络。
删除表再建表后出现Cannot unlink file format_version.txt
Code: 458, e.displayText() = DB::ErrnoException: Cannot unlink file /data2/clickhouse/store/488/488da1e0-a9ee-4191-8376-0daaa4e0314d/format_version.txt, errno: 2, strerror: No such file or directory (version 21.3.4.25 (official build))
3.png
建分布式表出现clickhouse zookeeper All connection tries failed
clickhouse 集群在建分布式表的时候出现 clickhouse zookeeper All connection tries failed
如果配置没啥问题,zk和ck集群也没啥问题,重启下zk即可恢复
查询出现AST is too big. Maximum: 500000
程序报错AST is too big. Maximum: 500000,语法树元素个数超过限制错误,说明查询sql很长很复杂,一般情况不会有,要木优化sql,要木修改集群配置
在user.xml 添加
<max_ast_elements>10000000</max_ast_elements>
<max_expanded_ast_elements>10000000</max_expanded_ast_elements>
分布式表删表后立马建表报错
报错 DB::Exception: Replica xxxxx already exists。
由于clickhouse默认的库引擎是原子数据库引擎,删除Atomic数据库中的表后不会立马执行,默认在480秒后删除。
处理方式
1,在config.xml减少database_atomic_delay_before_drop_table_sec的值
<database_atomic_delay_before_drop_table_sec>480</database_atomic_delay_before_drop_table_sec>
2,添加sync关键字
DROP TABLE IF EXISTS 表名 sync
插入同一大小同一顺序完全一样的数据发现数据条数少了
CK会对同一个block保证重复插入的insert的幂等性,会检测重复,默认会去重,使用insert_deduplicate配置。如果不需要去重则可以使用SET insert_deduplicate=0,但不推荐这样做。
cat clickhouse-server.log | grep ignoring
查询出现DB::Exception: Estimated query execution time (60.10510861262919 seconds) is too long
6.png查询超过了限制的时间(60s),需要优化sql,或者做预聚合
写入异常 Too many partitions for single INSERT block (more than 100)
image2022-2-18_10-1-0.png一次写入的分区数超过100,一般情况下不会出现一次写操作写100个分区的情况,解决方法1:查看写入的数据是否异常,为啥会写100个分区,一般是按时间分区,是不是时间解析错误了。解决方案2:在user.xml配置文件中添加<max_partitions_per_insert_block>配置项
网友评论