postgresql数据库日常健康检查与评估报告

1 主机配置

硬件配置

以下列出系统主机的主要配置情况

机器名rm-bp1u3dsgt8ekxf596.pg.rds.aliyuncs.com
用途 (Prod, Test, Development)XXXX
所在城市,物理位置(机房,远程)华东1
操作系统及版本
内存8GB
IPOS5000
cpu4核

建议:

目前系统配置满足数据库要求,操作系统参数设置合理。

2. 检查介绍

2.1 检查系统

系统主要包括1个数据库,具体情况如下:

数据库名称Postgresql
数据库实例名
应用名称
开发工具
应用简介
数据库版本9.4
shared_buffers2GB
effective_cache_size6GB
work_mem4M
archive_modeOn
wal_segment_size16MB
wal_keep_segments1024
max_connections12100
wal_sender_timeout60s

3. 系统配置

和数据库相关的操作系统配置将被检查,包括以下方面:

l 操作系统数据库相关要求补丁

l 硬盘利用率。

l CPU利用率。

3.1 硬盘可用空间

硬盘可用情况如下示:

数据库XXXX的硬盘使用率情况如下:

Filesystem          kbytes    used   avail %used Mounted on

数据库YYYY的硬盘使用率情况如下:

Filesystem          kbytes    used   avail %used Mounted on

建议:

目前该数据库服务器中还没有其他硬盘空间使用率超过90%的分区。如果有需要引起注意并且及时增加硬盘空间的容量。

3.2 CPU 利用率

CPU利用率的统计时间是:yyyy-mm-dd hh:mi---- yyyy-mm-dd hh:mi

参考值:

  1. 最大CPU使用率:60%--70%

  2. 系统进程与用户进程占用CPU最大比率:40/60

​ 从上述的情况中看出,数据库:服务器CPU idle基本在55%以上,CPU使用率为30%-45%间,资源较为空闲。

建议:

当CPU的使用率超过80%,要注意监控是否有僵死进程,如果有僵死进程占用CPU,需要将僵死进程kill掉。如果有正常进程占用大量CPU,需要查看是否属于正常业务进程等。

3.3 内存利用率

3.4 IOPS情况

4. 数据库配置

本次检查工作主要针对数据库XXXX。

4.1 初始化参数文件

指定了当前使用的数据库配置参数,在数据库启动时被使用。列出了数据库所有的非默认值的参数。

建议:

  1. 数据库的参数可以看出大部分都是经过精心设置的。

  2. 建议调整的参数值,请在测试环境数据库中测试确认之后,再调整于生产环境数据库。

4.2 内存及块大小

8kb

4.3 数据库连接数

SELECT count(*) FROM pg_stat_activity WHERE NOT pid=pg_backend_pid();

4.4 数据库占用空间

psql=#select pg_size_pretty(pg_database_size('数据库名'));

4.5 等待事件

检测数据库是否有锁现象:

psql=#SELECT bl.pid AS blocked_pid, a.usename AS blocked_user, kl.pid AS blocking_pid, ka.usename AS blocking_user, a.query AS blocked_statement

FROM pg_locks bl

JOIN pg_stat_activity a ON a.pid = bl.pid

JOIN pg_locks kl ON kl.transactionid = bl.transactionid AND kl.pid != bl.pid

JOIN pg_stat_activity ka ON ka.pid = kl.pid WHERE NOT bl.granted;

-----+-------------------------+-----------------------------+

| BLOCKED_PID | BLOCKED_USER | BLOCKING_PID | BLOCKING_USER

注:暂无

4.6 SQL统计信息评估

上述查询是按照查询的执行时间来排序的,可以定位执行比较慢的sql,也可以用来查出常用sql:访问次数、总时间、内存命中率、具体SQL语句

SELECT calls, total_time, rows, 100.0 * shared_blks_hit /nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent,query

FROM pg_stat_statements ORDER BY total_time DESC ;

4.7 TOP SQL

select total_time/calls as avg ,calls , query from pg_stat_statements order by avg desc limit 10;

4.8 事务执行时间查看

select xact_start , now()-xact_start as t ,state, query

from pg_stat_activity where state !='idle' order by t desc;

4.9 主从备份查看

select xact_start , now()-xact_start as t ,state, query

from pg_stat_activity where state !='idle' order by t desc;

4.10 表碎片整理

数据库表存在大量的碎片,对数据库碎片的整理,从而提高了数据库查询性能。

4.11 数据库表统计信息收集

pg数据库查询、DML操作都基于统计信息,如果表的统计信息不准确,就可能会造成不合理的执行计划,从而降低数据库的操作性能。针对这种情况,我们对表统计信息定时采集。

5. 备份

5.1 备份策略

每天0点对数据库做全库备份。

6. 高可用性选择

6.1 RDS for pg数据库架构

读写均在一台服务器上进行,从库不会对外开放。只能纵向提升服务器的内存、IO及cpu,扩容成本较ECS横向扩展成本高。

6.2 ECS数据库高可用性架构选择

一些检查指标仅供参考

发表评论

发表评论

*

沙发空缺中,还不快抢~