前言
DataWorks 近期上线了数据推送功能,能够将数据库查询的数据组织后推送到各渠道 (如钉钉、飞书、企业微信及 Teams),除了能将业务数据组织后推送,也能将数据库自身提供的监控数据组织后推送,这边我们就以 ClickHouse 为例,定期推播 ClickHouse 的慢 Query、数据量变化等信息,帮助用户掌握 ClickHouse 状态。
效果图
以下为一段时间内指定表及分区的存储使用情况,并推送到钉群、飞书、企业微信或 Teams。
实践:取得指定表及分区存储使用情况
以下为 SQL 内容
SELECT table, partition, count() AS parts, formatReadableSize(sum(bytes_on_disk)) AS bytes_on_disk, formatReadableQuantity(sum(rows)) AS rows, sum(marks) AS marks FROM system.parts WHERE active GROUP BY table, partition;
以下为推送内容设定
调度及推送设置
推送结果
实践:取得指定表的日平均数据使用量统计
取得指定表的日平均数据使用量,方便了解数据量水位。
以下为 SQL 内容
SELECT table, formatReadableSize(size) AS size, rows, days, formatReadableSize(avgDaySize) AS avgDaySize FROM ( SELECT table, sum(bytes) AS size, sum(rows) AS rows, min(min_date) AS min_date, max(max_date) AS max_date, max_date - min_date AS days, size / (max_date - min_date) AS avgDaySize FROM system.parts WHERE active AND (table = 'asynchronous_metric_log' OR table = 'query_thread_log' OR table = 'trace_log') GROUP BY table ORDER BY rows DESC );
以下为推送内容设定
推送结果
实践:取得指定表最近列的数据压缩程度
可以按列查看数据的压缩程度。此查询还会返回内存中主索引的大小,了解这一点很有用,因为主索引必须小于内存。
以下为 SQL 内容
SELECT parts.table as table, parts.rows, parts.latest_modification, parts.disk_size, parts.primary_keys_size, parts.bytes_size, columns.compressed_size, columns.uncompressed_size, columns.compression_ratio, columns.compression_percentage FROM ( SELECT table, formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed_size, formatReadableSize(sum(data_compressed_bytes)) AS compressed_size, round(sum(data_compressed_bytes) / sum(data_uncompressed_bytes), 3) AS compression_ratio, round(100 - ((sum(data_compressed_bytes) * 100) / sum(data_uncompressed_bytes)), 3) AS compression_percentage FROM system.columns GROUP BY table ) AS columns RIGHT JOIN ( SELECT table, sum(rows) AS rows, max(modification_time) AS latest_modification, formatReadableSize(sum(bytes)) AS disk_size, formatReadableSize(sum(primary_key_bytes_in_memory)) AS primary_keys_size, sum(bytes) AS bytes_size FROM system.parts WHERE active AND (table = 'asynchronous_metric_log' OR table = 'query_thread_log' OR table = 'trace_log') GROUP BY table ) AS parts ON columns.table = parts.table ORDER BY parts.bytes_size DESC;
以下为推送内容设定
推送结果
实践:用户端在过去一段时间内发送的查询数
查询用户端在过去一段时间内发送的查询数,这边以 1 小时为例。
以下为 SQL 内容
SELECT client_name, count() as counts, query_kind, toStartOfHour(event_time) as event_time_h FROM system.query_log WHERE (type = 'QueryStart') AND (event_time > (now() - toIntervalMinute(60))) GROUP BY event_time_h, client_name, query_kind ORDER BY event_time_h DESC, count() ASC;
以下为推送内容设定
推送结果
实践:取得指定表的分区数
以下为 SQL 内容
SELECT table, partition_id, count() as counts FROM system.parts WHERE active AND (table = 'asynchronous_metric_log' OR table = 'query_thread_log' OR table = 'trace_log') GROUP BY table, partition_id;
以下为推送内容设定
推送结果
实践:取得运行最长的查询
以下为 SQL 内容
SELECT elapsed, initial_user, client_name, hostname() as hostname, query_id, query FROM clusterAllReplicas(default, system.processes) ORDER BY elapsed DESC;
以下为推送内容设定
推送结果
实践:查看最近失败的信息
查询最近失败的前20笔信息。
以下为 SQL 内容
SELECT name, code, value, last_error_time FROM system.errors ORDER BY last_error_time DESC limit 20;
以下为推送内容设定
推送结果
实践:取得前十个使用最多资源的查询
以下为 SQL 内容
SELECT type, event_time, initial_query_id, formatReadableSize(memory_usage) AS memory, `ProfileEvents.Values`[indexOf(`ProfileEvents.Names`, 'UserTimeMicroseconds')] AS userCPU, `ProfileEvents.Values`[indexOf(`ProfileEvents.Names`, 'SystemTimeMicroseconds')] AS systemCPU, normalizedQueryHash(query) AS normalized_query_hash FROM system.query_log ORDER BY memory_usage DESC LIMIT 10
以下为推送内容设定
推送结果
实践:取得projection存储使用情况
以下为 SQL 内容
SELECT name, parent_name, formatReadableSize(bytes_on_disk) AS bytes, formatReadableSize(parent_bytes_on_disk) AS parent_bytes, bytes_on_disk / parent_bytes_on_disk AS ratio FROM system.projection_parts;
以下为推送内容设定
实践:取得最近创建的详细信息,包括创建时间、大小、行数等
以下为 SQL 内容
SELECT modification_time, rows, formatReadableSize(bytes_on_disk) as size, table FROM clusterAllReplicas(default, system.parts) WHERE active AND (level = 0) ORDER BY modification_time DESC LIMIT 100;
以下为推送内容设定
推送结果
实践:取得指定表的最近数据量统计
取得指定表的最近数据量统计,方便了解数据量水位。
以下为 SQL 内容
SELECT table, formatReadableSize(sum(bytes)) as size FROM system.parts WHERE active AND table = 'test_table' GROUP BY table;
以下为推送内容设定
推送结果
实践:查看最近变动的配置
查询最近变动的配置值 (与 default 不同的部份)。
以下为 SQL 内容
SELECT name, value FROM system.settings WHERE changed;
以下为推送内容设定
推送结果
小结
ClickHouse 提供许多能查运行状态的表,能利用此数据加工后,透过 DataWorks 数据推送推至渠道方便监控,提升引擎运行态的质量。
相关文章
数据推送功能详细介绍 https://help.aliyun.com/zh/dataworks/user-guide/push-data
数据开发工作流 + 数据推送介绍 https://help.aliyun.com/zh/dataworks/user-guide/best-practice-combining-data-push-with-data-development-workflow
使用 DataWorks 建立每日天气预报推送 https://developer.aliyun.com/article/1566970
语雀+通义千问+DataWorks,让AI定期推送每周总结 https://developer.aliyun.com/article/1566971
利用 DataWorks 数据推送定期推播 Hologres Query 诊断信息 https://developer.aliyun.com/article/1564785
ClickHouse Query 诊断: https://clickhouse.com/docs/knowledgebase/useful-queries-for-troubleshooting#view-which-settings-have-been-changed-from-the-default