PostgreSQL 数据库巡检

1 minute read

背景

PostgreSQL数据库的巡检脚本在这里,自动生成txt格式巡检报告(包括采集项以及建议项目)。

https://github.com/digoal/pgsql_admin_script/blob/master/generate_report.sh

巡检项目前包括了如下:

|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                      操作系统信息                       |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  主机名:     
----->>>---->>>  以太链路信息:     
----->>>---->>>  IP地址信息:     
----->>>---->>>  路由信息:     
----->>>---->>>  操作系统内核:     
----->>>---->>>  内存(MB):     
----->>>---->>>  CPU:     
----->>>---->>>  块设备:     
----->>>---->>>  拓扑:     
----->>>---->>>  进程树:     
----->>>---->>>  操作系统配置文件 静态配置信息:     
----->>>---->>>  /etc/sysctl.conf     
----->>>---->>>  /etc/security/limits.conf     
----->>>---->>>  /etc/security/limits.d/*.conf     
----->>>---->>>  /etc/sysconfig/iptables     
----->>>---->>>  /etc/fstab     
----->>>---->>>  /etc/rc.local     
----->>>---->>>  /etc/selinux/config     
----->>>---->>>  /boot/grub/grub.conf     
----->>>---->>>  /var/spool/cron 用户cron配置     
----->>>---->>>  chkconfig --list     
----->>>---->>>  iptables -L -v -n -t filter 动态配置信息:     
----->>>---->>>  iptables -L -v -n -t nat 动态配置信息:     
----->>>---->>>  iptables -L -v -n -t mangle 动态配置信息:     
----->>>---->>>  iptables -L -v -n -t raw 动态配置信息:     
----->>>---->>>  sysctl -a 动态配置信息:     
----->>>---->>>  mount 动态配置信息:     
----->>>---->>>  selinux 动态配置信息:     
----->>>---->>>  建议禁用Transparent Huge Pages (THP):     
----->>>---->>>  硬盘SMART信息(需要root):     
----->>>---->>>  /var/log/boot.log     
----->>>---->>>  /var/log/cron(需要root)     
----->>>---->>>  /var/log/dmesg     
----->>>---->>>  /var/log/messages(需要root)     
----->>>---->>>  /var/log/secure(需要root)     
----->>>---->>>  /var/log/wtmp     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                       数据库信息                        |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  数据库版本:     
----->>>---->>>  用户已安装的插件版本:     
----->>>---->>>  用户使用了多少种数据类型:     
----->>>---->>>  用户创建了多少对象:     
----->>>---->>>  用户对象占用空间的柱状图:     
----->>>---->>>  当前用户的操作系统定时任务:     
----->>>---->>>  获取pg_hba.conf md5值:     
----->>>---->>>  获取pg_hba.conf配置:     
----->>>---->>>  获取postgresql.conf md5值:     
----->>>---->>>  获取postgresql.conf配置:     
----->>>---->>>  用户或数据库级别定制参数:     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                   数据库错误日志分析                    |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  获取错误日志信息:     
----->>>---->>>  获取连接请求情况:     
----->>>---->>>  获取认证失败情况:     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                   数据库慢SQL日志分析                   |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  慢查询统计:     
----->>>---->>>  慢查询分布头10条的执行时间, ms:     
----->>>---->>>  慢查询分布尾10条的执行时间, ms:     
----->>>---->>>  auto_explain 分析统计:     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                   数据库空间使用分析                    |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  输出文件系统剩余空间:     
----->>>---->>>  输出表空间对应目录:     
----->>>---->>>  输出表空间使用情况:     
----->>>---->>>  输出数据库使用情况:     
----->>>---->>>  TOP 10 size对象:     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                     数据库连接分析                      |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  当前活跃度:     
----->>>---->>>  总剩余连接数:     
----->>>---->>>  用户连接数限制:     
----->>>---->>>  数据库连接限制:     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                     数据库性能分析                      |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  TOP 5 SQL : total_cpu_time     
----->>>---->>>  索引数超过4并且SIZE大于10MB的表:     
----->>>---->>>  上次巡检以来未使用或使用较少的索引:     
----->>>---->>>  数据库统计信息, 回滚比例, 命中比例, 数据块读写时间, 死锁, 复制冲突:     
----->>>---->>>  检查点, bgwriter 统计信息:     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                     数据库垃圾分析                      |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  表引膨胀检查:     
----->>>---->>>  索引膨胀检查:     
----->>>---->>>  垃圾数据:     
----->>>---->>>  未引用的大对象:     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                     数据库年龄分析                      |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  数据库年龄:     
----->>>---->>>  表年龄:     
----->>>---->>>  长事务, 2PC:     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|               数据库XLOG, 流复制状态分析                |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  是否开启归档, 自动垃圾回收:     
----->>>---->>>  归档统计信息:     
----->>>---->>>  流复制统计信息:     
----->>>---->>>  流复制插槽:     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                数据库安全或潜在风险分析                 |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  密码泄露检查:     
----->>>---->>>  简单密码检查:     
----->>>---->>>  用户密码到期时间:     
----->>>---->>>  SQL注入风险分析:     
----->>>---->>>  普通用户对象上的规则安全检查:     
----->>>---->>>  普通用户自定义函数安全检查:     
----->>>---->>>  unlogged table 和 哈希索引:     
----->>>---->>>  剩余可使用次数不足1000万次的序列检查:     
----->>>---->>>  触发器, 事件触发器:     
----->>>---->>>  检查是否使用了a-z 0-9 _ 以外的字母作为对象名:     
----->>>---->>>  锁等待:     
----->>>---->>>  继承关系检查:     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                      重置统计信息                       |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  重置统计信息:     
----->>>---->>>  重置pg_stat_statements统计信息:     
----->>>---->>>  获取recovery.done md5值:     
----->>>---->>>  获取recovery.done配置:     
----->>>---->>>  获取recovery.conf md5值:     
----->>>---->>>  获取recovery.conf配置:     
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
|                        附加信息                         |    
|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|    
----->>>---->>>  操作系统sysstat收集的统计信息     
----->>>---->>>  其他建议:     

后期改进

1. 考虑增加自动推荐索引模块

2. 区分不同版本,新增巡检项目。

3. 新增一个提醒点,分区是否过多的问题。可能引入CPU飙高的问题。

《PostgreSQL 查询涉及分区表过多导致的性能问题 - 性能诊断与优化(大量BIND, spin lock, SLEEP进程)》

AWR报告

《PostgreSQL AWR报告》

Flag Counter

digoal’s 大量PostgreSQL文章入口