ClickHouse官方内置了超详细的系统表,存储在system库中。系统表包含服务器的状态、进程以及环境,服务器的内部进程,方便我们进行数据分析和排查问题。在使用ClickHouse进行数据分析的过程中,可以利用这些系统表进行排查和解决问题,提高数据分析的效率和准确性。
system.clusters
通过集群中任意一个节点获取所有的集群信息,验证集群搭建是否成功。获取集群中每个节点ip、副本、分片等信息。
select cluster,shard_num,replica_num, host_name, host_address,default_database from system.clusters
system.columns
类似于describe table命令,查询当前表对应的列信息。
SELECT name,type FROM system.columns
system.disks
查看配置当前节点所在服务器对应的数据存储路径、磁盘可用空间、磁盘容量等,对应配置文件中配置的信息。
SELECT * FROM system.disks
system.functions
查看Clickhouse自带的函数,写SQL查询时忘记了函数名字可以从此表中查询到
SELECT name FROM system.functions
system.merges
正在进行合并的信息,可查询此表判断合并数据的压力是否过大
SELECT count(1) FROM system.merges
system.mutations
包含所有ALERT语句的进度信息。可通过此表查询未alert成功的一些信息,如果有SQL执行卡住,可以执行 kill mutation id进行杀死当前SQL。
select * from system.mutations where id_done = 0
system.parts
可以查看所有的分区信息,遇到Too many parts的问题时可以查询此表,如果有不需要的parts可以先将其删除(永久删除,如果勿删会丢数据,谨慎执行)
SELECT * FROM system.parts
查询库表占用磁盘大小
SELECT database AS `本地库名`, table AS `本地表名`, sum(rows) AS `数据条数`, formatReadableSize(sum(bytes_on_disk)) AS `实际占用磁盘空间`, formatReadableSize(sum(data_uncompressed_bytes)) AS `原始大小`, formatReadableSize(sum(data_compressed_bytes)) AS `压缩大小`, round((sum(data_compressed_bytes) / sum(data_uncompressed_bytes)) * 100, 0) AS `压缩率` FROM system.parts WHERE database like '%your_database%' OR table like '%your_table%' GROUP BY database, table ORDER BY sum(rows) desc;
system.processes
查看正在运行的所有SQL,包含每个SQL读取内存占用等信息,可判断查询压力是否过大
SELECT * FROM system.processes order by rows_read desc
遇到大查询的时候可以手动将大查询杀死,从而缓解cpu的压力等。
KILL QUERY WHERE query_id=''
system.query_log
排查问题最重要的一张表,此表包含所有已执行过的sql的内存占用、执行时长、错误信息、执行完成情况等信息。遇到大查询的时候可以手动将大查询杀死,从而缓解cpu的压力等。
SELECT event_time, user, query_id AS query, read_rows, read_bytes, result_rows, result_bytes, memory_usage, exception FROM clusterAllReplicas('cluster_name', system, query_log) ORDER BY event_time DESC LIMIT 100
system.replicas
查看clickhouse的副本信息,判断是否出现只读等情况。
SELECT * FROM system.replicas where is_readonly = 1
system.replication_queue
ReplicatedMergeTree类型的clickhouse集群中副本复制的队列,依赖于zookeeper或ck自己的keeper,此队列如果数据量持续很大说明有可能磁盘IO不够。
判断磁盘io能力命令,建议io大于30M/S,更利于大数据量的读写
dd if=/dev/zero of=/data/text.txt bs=10k count=10000 oflag=direct
如果获取更多clickhouse系统表信息可查看官网:System Tables | ClickHouse Docs