openGauss 监控场景处理
死锁数量异常
判断方法:
select sum(deadlocks) as deadlocks from dbe_perf.GLOBAL_STAT_DATABASE
异常分析:
- 请求与保持条件:获取资源的进程可以同时申请新的资源。
- 非剥夺条件:已经分配的资源不能从该进程剥夺。
- 循环等待条件:多个进程构成环路,并且每个进程都在等待相邻进程正占用的资源。
- 互斥条件:资源只能被一个进程使用。
解决方案
- 检索出死锁进程的 ID(select oid,relname from pg_class where relname=‘all_date’;),检索出来的字段中,waiting 字段数据为 t 的那条就是死锁进程,找到对应的 procpid 列的值。
- 将进程杀掉,select pg_cancel_backend(‘死锁那条数据的 procpid 值’),运行之后再次更新这个表,sql 顺利执行。
- 如果 pg_stat_activity 没有记录,则查询 pg_locks 是否有这个对象的锁,select pid_locks where relation=‘上面查询出来的 oid’;然后杀掉进程。
运维建议
- 在所有事务中都以相同的次序使用资源。
- 使事务尽可能简单并在一个批处理中。
- 为死锁超时参数设置一个合理范围。
- 避免在事务内和用户进行交互,减少资源锁定时间。
- 使用较低的隔离级别。
主备复制状态异常
判断方法