前言
DataWorks 近期上线了数据推送功能,能够将数据库查询的数据组织后推送到各渠道 (如钉钉、飞书、企业微信及 Teams),除了能将业务数据组织后推送,也能将数据库自身提供的监控数据组织后推送,这边我们就以 Postgres 为例,定期推播 Postgres 的数据量变化等信息,帮助用户掌握 Postgres 状态。
效果图
以下为各 Schema 存储使用情况,并推送到钉群、飞书、企业微信或 Teams。
实践:取得指定数据库目前使用数据量
以下为 SQL 内容
SELECT pg_size_pretty( pg_database_size('test_db1') ) as db_size;
以下为推送内容设定
调度及推送设置
推送结果
实践:取得各 Schema 的数据使用情况
以下为 SQL 内容
SELECT schema_name,
pg_size_pretty(sum(table_size)) as schema_size,
cast((sum(table_size) / database_size) * 100 as DECIMAL(18,2)) as percentage
FROM (
SELECT pg_catalog.pg_namespace.nspname as schema_name,
pg_relation_size(pg_catalog.pg_class.oid) as table_size,
sum(pg_relation_size(pg_catalog.pg_class.oid)) over () as database_size
FROM pg_catalog.pg_class
JOIN pg_catalog.pg_namespace ON relnamespace = pg_catalog.pg_namespace.oid
) t
GROUP BY schema_name, database_size;
以下为推送内容设定
推送结果
实践:取得指定表目前数据量
以下为 SQL 内容
SELECT pg_size_pretty(pg_relation_size('public.test')) as table_size FROM pg_tables LIMIT 1;
-- or SELECT pg_size_pretty( pg_total_relation_size('test') ) as table_size;
以下为推送内容设定
推送结果
实践:查看指定 Schema 下表数据量使用情况
以下为 SQL 内容
SELECT relname, nspname, pg_size_pretty(pg_relation_size('"' || relname || '"')) as table_size
FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND pg_table_is_visible(c.oid)
AND nspname = 'public'
ORDER BY c.relpages DESC;
以下为推送内容设定
推送结果
实践:查看指定表的列数据使用情况
以下为 SQL 内容
SELECT 'id' AS column_name
,sum(pg_column_size('id')) AS total_size
,CAST(avg(pg_column_size('id')) AS DECIMAL(18,2)) AS average_size
,CAST(sum(pg_column_size('id')) * 100.0 / PG_RELATION_SIZE('public.test') AS DECIMAL(18,2)) AS percentage
FROM public.test
;
以下为推送内容设定
推送结果
实践:查看指定表的键使用情况
以下为 SQL 内容
SELECT
tc.table_schema,
tc.constraint_name,
tc.table_name,
tc.constraint_type,
kcu.column_name,
ccu.table_schema AS foreign_table_schema,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
AND tc.table_schema = kcu.table_schema
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
WHERE (tc.constraint_type = 'FOREIGN KEY' OR tc.constraint_type = 'PRIMARY KEY')
AND tc.table_schema='public'
AND tc.table_name='test';
以下为推送内容设定
推送结果
实践:查看指定表的索引使用情况
以下为 SQL 内容
SELECT
c.relnamespace::regnamespace AS schema_name,
c.relname AS table_name,
i.indexrelid::regclass AS index_name,
i.indisprimary AS is_pk,
i.indisunique AS is_unique
FROM pg_index i
JOIN pg_class c ON c.oid = i.indrelid
WHERE c.relname = 'test';
以下为推送内容设定
推送结果
实践:查看拥有删除权限的使用者列表
以下为 SQL 内容
SELECT grantee
FROM information_schema.table_privileges
WHERE table_schema = 'public' AND table_name = 'test' AND privilege_type = 'DELETE';
以下为推送内容设定
推送结果
小结
Postgres 提供许多系统配置表,能利用此数据加工后,透过 DataWorks 数据推送推至渠道方便监控,提升引擎管控程度。
相关文章
数据推送功能详细介绍 help.aliyun.com/zh/datawork…
数据开发工作流 + 数据推送介绍 help.aliyun.com/zh/datawork…
使用 DataWorks 建立每日天气预报推送 juejin.cn/post/739106…
语雀+通义千问+DataWorks,让AI定期推送每周总结 juejin.cn/post/739081…
利用 DataWorks 数据推送定期推播 Hologres Query 诊断信息 juejin.cn/post/738992…
利用 DataWorks 数据推送定期推播 ClickHouse Query 诊断信息 juejin.cn/post/739206…
利用 DataWorks 数据推送定期推播 MySQL 或 StarRocks Query 诊断信息 juejin.cn/post/739252…