前言
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 数据推送推至渠道方便监控,提升引擎管控程度。
相关文章
数据推送功能详细介绍 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
利用 DataWorks 数据推送定期推播 ClickHouse Query 诊断信息 https://developer.aliyun.com/article/1567458
利用 DataWorks 数据推送定期推播 MySQL 或 StarRocks Query 诊断信息 https://developer.aliyun.com/article/1568578