利用 DataWorks 数据推送定期推播 Postgres Query 诊断信息

122 阅读3分钟

前言

DataWorks 近期上线了数据推送功能,能够将数据库查询的数据组织后推送到各渠道 (如钉钉、飞书、企业微信及 Teams),除了能将业务数据组织后推送,也能将数据库自身提供的监控数据组织后推送,这边我们就以 Postgres 为例,定期推播 Postgres 的数据量变化等信息,帮助用户掌握 Postgres 状态。

效果图

以下为各 Schema 存储使用情况,并推送到钉群、飞书、企业微信或 Teams。

image.png

实践:取得指定数据库目前使用数据量

以下为 SQL 内容

SELECT pg_size_pretty( pg_database_size('test_db1') ) as db_size;

以下为推送内容设定

image.png

调度及推送设置

image.png

推送结果

image.png

实践:取得各 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;

以下为推送内容设定

image.png

推送结果

image.png

实践:取得指定表目前数据量

以下为 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;

以下为推送内容设定

image.png

推送结果

image.png

实践:查看指定 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;

以下为推送内容设定

image.png

推送结果

image.png

实践:查看指定表的列数据使用情况

以下为 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
    ;

以下为推送内容设定

image.png

推送结果

image.png

实践:查看指定表的键使用情况

以下为 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';

以下为推送内容设定

image.png

推送结果

image.png

实践:查看指定表的索引使用情况

以下为 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';

以下为推送内容设定

image.png

推送结果

image.png

实践:查看拥有删除权限的使用者列表

以下为 SQL 内容

    SELECT grantee
    FROM   information_schema.table_privileges 
    WHERE table_schema = 'public' AND table_name = 'test' AND  privilege_type = 'DELETE';

以下为推送内容设定

image.png

推送结果

image.png

小结

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…