标签
PostgreSQL , DBA , 日常
背景
1,AWR 数据库健康报告,
《PostgreSQL AWR 报告(for 阿里云 ApsaraDB PgSQL)》
《如何生成和阅读 EnterpriseDB (PPAS(Oracle 兼容版)) AWR 诊断报告》
2, 查看 TOP SQL, 以及 SQL 优化方法
《PostgreSQL 如何查找 TOP SQL (例如 IO 消耗最高的 SQL) (包含 SQL 优化内容) - 珍藏级》
3, 监控指标
《PostgreSQL 实时健康监控 大屏 - 低频指标 - 珍藏级》
《PostgreSQL 实时健康监控 大屏 - 高频指标(服务器) - 珍藏级》
《PostgreSQL 实时健康监控 大屏 - 高频指标 - 珍藏级》
4, 排查 FREEZE 引入的 IO 和 CPU 飙升,
《PostgreSQL Freeze 风暴预测续 - 珍藏级 SQL》
《PostgreSQL freeze 风暴导致的 IOPS 飙升 - 事后追溯》
5, 查看当前慢 SQL, 长事务, 长 2PC 事务,
例如执行时间超过 5 秒的 QUERY
- select pid,state,query_start,xact_start,now()-query_start,wait_event_type,wait_event,query
- from pg_stat_activity where now()-query_start> '5 s' order by query_start;
- select * from pg_prepared_xacts ;
6, 根据 PID 杀会话或 QUERY,
查询当前系统在执行的 SQL,PID.(普通用户无法查看其它用户执行的 QUERY)
- select pid,state,query_start,xact_start,now()-query_start,wait_event_type,wait_event,query from pg_stat_activity order by query_start;
- KILL QUERY
- select pg_cancel_backend(pid);
KILL 会话
select pg_terminate_backend(pid);
7, 查看膨胀的表和索引, 截取自 bucardo 开源的 check_postgres
《如何检测, 清理膨胀, 垃圾(含修改分布键) - 阿里云 HybridDB for PG 最佳实践》
8, 不堵塞 DML 的并行建索引方法,
加索引时, 可以使用 CONCURRENTLY 语法, 不堵塞 DML 操作.
- Command: CREATE INDEX
- Description: define a new index
- Syntax:
- CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ]
- ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
- [ WITH ( storage_parameter = value [, ... ] ) ]
- [ TABLESPACE tablespace_name ]
- [ WHERE predicate ]
9, 索引自动推荐
《PostgreSQL 商用版本 EPAS(阿里云 ppas(Oracle 兼容版)) 索引推荐功能使用》
《PostgreSQL SQL 自动优化案例 - 极简, 自动推荐索引》
10, 系统瓶颈或数据库代码瓶颈
《PostgreSQL 源码性能诊断 (perf profiling) 指南 - 珍藏级》
《PostgreSQL 代码性能诊断之 - OProfile & Systemtap》
11, 锁等待排查
如果你发现数据库 CPU,IO 都不高, 但是性能不行, 或者连接打满, 或者 SQL 执行 HANG 死的情况, 通常是锁等待造成.
《PostgreSQL 锁等待监控 珍藏级 SQL - 谁堵塞了谁》
12, 防雪崩方法
设置语句超时, 锁等待超级可解, 特别是对于 DDL 语句, 一定要设置锁等待超时, 否则业务高峰期, 如果有高并发的其他 QUERY 访问 DDL 的表可能会导致雪崩.
《PostgreSQL 设置单条 SQL 的执行超时 - 防雪崩》
《如何防止数据库雪崩(泛洪 flood)》
13,GIN 索引 pending 页, 直接导致 GIN 索引查询效率变差
《PostgreSQL pageinspect 诊断与优化 GIN (倒排) 索引合并延迟导致的查询性能下降问题》
通常可能是大量并发写入数据, AUTOVACUUM WORKER 来不及合并 GIN PENDING LIST 造成.
14, 曾经的慢 SQL 为什么慢
历史慢 SQL, 通过 auto_explain 可以记录慢 SQL 的整个执行计划, 包括执行计划里面每一个步骤花费的时间, 消耗的 IO 时间, IO 命中率等.
《PostgreSQL 函数调试, 诊断, 优化 & auto_explain & plprofiler》
来源: https://yq.aliyun.com/articles/700364