匿名用户pg中序列的使用率达到80%的给找出来,做预警用
在PostgreSQL中,你可以使用以下的SQL查询来找出使用率达到80%的序列:
```sql
SELECT
nspname || '.' || relname AS "sequence",
round(((last_value - min_value)::numeric / (max_value - min_value)::numeric)*100, 2) AS "usage_percentage"
FROM
(SELECT
c.relname,
n.nspname,
coalesce(last_value - min_value, 0) AS last_value,
CASE
WHEN increment_by > 0 THEN max_value - min_value
ELSE min_value - max_value
END AS max_value
FROM
pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
JOIN pg_sequences s ON s.schemaname = n.nspname AND s.sequencename = c.relname
WHERE
c.relkind = 'S'
) sq
WHERE
"usage_percentage" >= 80;
```
这个查询会返回所有使用率超过80%的序列的名称和使用率。请注意,这个查询可能需要根据你的具体情况进行调整。
如果你想要对这些序列进行预警,你可以将这个查询集成到你的监控系统中,或者创建一个定时任务来定期运行这个查询并发送预警。
评论
有用 7第一步
使用top 查看当前使用CPU情况, 确认造成CPU使用率告警的源头是Postgresql;
第二步
select *from pg_stat_activity where state not in ('idle') and pid <>pg_backend_pid();
查看现场的进程情况:
可以通过top 中最高CPU使用率的PID ,对应在pg_stat_activity 查询的PID 查看具体的语句,当然可直接使用auto_explain;
同时基本可以判断主要是哪个业务库的消耗引起;
第三步
对第二步需实时监控,可能因某些原因会错过了事故现场,就比较难实时获取问题代码,基于这个原因,我们需使用【pg_stat_statements】该插件实时收取执行统计信息;
评论
有用 5
评论
有用 1
墨值悬赏

