PG中WAL产生量、发送速度、应用速度的监控脚本
Tags: PGPostgreSQLWAL产生量发送速度应用速度监控监控脚本脚本
1. 创建视图
记录每分钟的WAL发送、应用速度(PG 10及以上可用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | create view v_wal_sent_replay_rate as WITH a AS ( SELECT pg_stat_replication.sent_lsn, pg_stat_replication.replay_lsn FROM pg_stat_replication ), b AS ( SELECT pg_stat_replication.sent_lsn, pg_stat_replication.replay_lsn FROM pg_stat_replication, pg_sleep(60) ) SELECT to_char(clock_timestamp()::timestamp without time zone,'yyyy-mm-dd hh24:mi'::text) AS db_clock_min, to_char(clock_timestamp()::timestamp without time zone, 'yyyy-mm-dd hh24:mi:ss'::text) AS db_clock_sec, round(pg_wal_lsn_diff(b.sent_lsn, a.sent_lsn) / 1024::numeric / 1024::numeric, 2) AS sent_rate_mb, round(pg_wal_lsn_diff(b.replay_lsn, a.replay_lsn) / 1024::numeric / 1024::numeric, 2) AS replay_rate_mb FROM a, b; |
2. 创建记录表
1 2 3 4 5 6 7 8 | create table wal_sent_replay_rate( db_clock_min character varying(50), db_clock_sec character varying(50), sent_rate_mb numeric, replay_rate_mb numeric, wal_end_min character varying(50), wal_cnt integer, wal_size_mb integer); |
3. 创建shell脚本
- 将每分钟的WAL发送、应用速度插入记录表
- 统计每分钟WAL产生量,更新至记录表(会有秒级的误差)
vi insert_wal_sent_replay_rate.sh12345678910#!/bin/bashpsql << EOFinsert into wal_sent_replay_rate(db_clock_min,db_clock_sec,sent_rate_mb,replay_rate_mb) select db_clock_min,db_clock_sec,sent_rate_mb,replay_rate_mb from v_wal_sent_replay_rate;EOFWAL_END_MIN=`date +"%Y-%m-%d %H:%M"`WAL_CNT=`find /data/postgres/pg5432/data/pg_wal -maxdepth 1 -type f -mmin -1 -ls|wc -l`WAL_SIZE_MB=`expr $WAL_CNT \* 16`psql << EOFupdate wal_sent_replay_rate set wal_end_min='$WAL_END_MIN',wal_cnt=$WAL_CNT,wal_size_mb=$WAL_SIZE_MB where db_clock_min='$WAL_END_MIN';EOF本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!