PostgreSQL DBA cookbook - 目录

2 minute read

背景

一、概念

1. 物理架构

数据库进程结构介绍

数据库物理存储结构介绍

2. 逻辑架构

数据库逻辑层面的概念介绍,层次关系介绍。

3. 权限体系

介绍数据库的权限体系,以及如何赋予和释放权限。

二、安装

1. Linux 最佳部署

DBA不可不知的操作系统内核参数

2. 初始化数据库

3. 启动和停止数据库

4. 变更配置

5. 创建数据库

6. 访问数据库

三、备份

逻辑备份

物理备份

基于LSN的数据库块级增量备份

基于文件系统快照的块级增量备份

基于归档的增量备份

每种备份适应的场景,优劣,注意事项

检查备份的有效性

四、恢复

逻辑备份的恢复

部分恢复

TOC

时间点恢复

快照恢复

五、物理复制

流复制协议介绍

postgresql.conf 相关参数

recovery.conf 相关参数

pg_hba.conf 相关参数

如何搭建物理复制节点

物理复制管理相关 表、视图、函数

物理复制节点状态监控

物理复制节点架构设计与性能优化

六、逻辑订阅

逻辑订阅概念

逻辑订阅与物理复制的对比

如何搭建逻辑订阅节点

逻辑订阅管理相关 表、视图、函数

逻辑订阅节点状态监控

逻辑订阅节点架构设计与性能优化

七、读写分离

客户端读写分离 - jdbc

客户端读写分离 - libpq

中间件读写分离 - pgpool-II

八、sharding

pl/proxy

postgres_fdw + inherit + pg_pathman

postgres_fdw + inherit + tirgger

postgres_fdw + inherit + partition table

postgres-XL

citusData

gpdb

hawq

九、HA

基于quorum的多借点0数据丢失HA

两节点异步HA

基于共享存储的HA

十、容灾

基于流复制的HA设计

快照在容灾中的回退应用

pg_rewind的回退应用

十一、监控

监控指标介绍

pg_statsinfo介绍

其他监控插件(pg top, …)介绍

nagios, zabbix, prometheus(https://github.com/wrouesnel/postgres_exporter) 监控框架介绍

数据库巡检

十二、安全

认证安全

数据传输

类型加密

文件系统加密

数据文件块级加密

权限控制

注入

暴力破解

越权漏洞

审计

资源控制

补丁

十三、数据融合

FDW

十四、迁移

软件环境迁移

物理流式增量迁移

逻辑迁移

全量迁移

增量迁移

一致性校验

物理迁移和逻辑迁移的对比

十五、升级

小版本升级

大版本升级

大版本原地升级

大版本迁移升级

大版本原地升级和迁移升级的对比

十六、日常维护

关注头部客户

1. 数据库体检表

1.1 元数据

操作系统版本

IP

CPU\MEM\DISK 规格

数据库集群ID

数据库版本

数据库插件、版本

1.2 系统资源使用状态

CPU\MEM\IO\NETWORK\DISK 资源使用情况

dmesg 异常信息

secure 异常信息

mcelog 异常信息

cron 异常调度信息

磁盘剩余寿命\硬盘SMART信息

RAID卡、存储异常信息

sysctl

limits.conf 资源限制、已使用资源

1.3 数据库状态

用户或数据库级别定制参数

postgresql.conf

pg_hba.conf

数据库master进程 limits

1.4 数据库错误日志分析

获取错误日志信息

获取连接请求情况

获取认证失败情况

1.5 数据库慢SQL日志分析

慢查询统计:

慢查询分布头10条的执行时间, ms:

慢查询分布尾10条的执行时间, ms:

auto_explain 分析统计:

1.6 数据库空间使用分析

用户对象占用空间的柱状图

输出文件系统剩余空间:

输出表空间对应目录:

输出表空间使用情况:

输出数据库使用情况:

TOP 10 size对象:

1.7 数据库连接分析

当前活跃度:

总剩余连接数:

用户连接数限制:

数据库连接限制:

1.8 数据库性能分析

TOP 5 SQL : total_cpu_time

索引数超过4并且SIZE大于10MB的表:

上次巡检以来未使用或使用较少的索引:

数据库统计信息, 回滚比例, 命中比例, 数据块读写时间, 死锁, 复制冲突:

检查点, bgwriter 统计信息:

1.9 数据库垃圾分析

表引膨胀检查:

索引膨胀检查:

垃圾数据:

未引用的大对象:

1.10 数据库年龄分析

数据库年龄:

表年龄:

长事务, 2PC:

1.11 数据库XLOG, 流复制状态分析

是否开启归档, 自动垃圾回收:

归档统计信息:

流复制统计信息,发送、接收、FLUSH、APPLY延时:

流复制插槽,发送延时:

1.12 数据库安全或潜在风险分析

密码泄露检查:

简单密码检查:

用户密码到期时间:

SQL注入风险分析:

普通用户对象上的规则安全检查:

普通用户自定义函数安全检查:

unlogged table 和 哈希索引:

剩余可使用次数不足1000万次的序列检查:

触发器, 事件触发器:

检查是否使用了a-z 0-9 _ 以外的字母作为对象名:

锁等待:

继承关系检查:

1.13 对症下药

垃圾回收

重建索引

调整参数

扩容

更换硬件

… …

十七、测试

1. 性能压测

PostgreSQL 主机性能测试方法 - 单机单实例

PostgreSQL 主机性能测试方法 - 单机多实例

PostgreSQL pgbench SQL RT 与 事务RT 浅析

数据库界的华山论剑 tpc.org

2. 功能测试

3. 用户建模测试

4. 代码覆盖率测试

十八、优化

b-tree, hash, gin, gist, sp-gist, brin, rum, bloom索引的原理与应用场景

cluster介绍

pg_statements插件介绍

pg_prewarm插件介绍

TOP SQL

头部SQL优化

auto_explain

explain

统计信息与成本计算公式

成本因子

plan hint插件介绍

优化器开关

遗传算法

内核瓶颈分析

优化案例

十九、诊断与排错

PLPGSQL函数调试方法1, pldebug

PLPGSQL函数调试方法2,raise

数据库错误代码介绍

数据库debug参数

数据库隐含开发参数

如何输出详细日志(包含代码行号)

如何在终端输出日志(包含代码行号)

gdb调试

Linux 性能诊断 perf使用指南

PostgreSQL 源码性能诊断(perf profiling)指南

常见案例

二十、案例

数据脱敏的方法

克隆测试环境

PostgreSQL 锁等待监控

PostgrSQL 递归SQL的几个应用

PostgreSQL 使用advisory lock实现行级读写堵塞

PostgreSQL 聚合表达式 FILTER , order , within group 用法

从redo日志分析数据库的profile

PostgreSQL 中生成随机汉字

PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL)

PostgreSQL 如何实现批量更新、删除、插入

PostgreSQL upsert功能(insert on conflict do)的用法

如何按拼音排序 - 数据库本土化特性(collate, ctype, …)

如何在PostgreSQL中调试plpgsql存储过程(pldebugger, pldbgapi)

PostgreSQL 转义、UNICODE、与SQL注入

PostgreSQL 递归查询CASE - 树型路径分组输出

PostgreSQL 数据rotate用法介绍 - 按时间覆盖历史数据

PostgreSQL 中如何找出记录中是否包含编码范围内的字符,例如是否包含中文

pidstat 统计进程、线程、进程组的资源消耗

PostgreSQL bitmapAnd, bitmapOr, bitmap index scan, bitmap heap scan

PostgreSQL 清理redo(xlog,wal,归档)的机制 及 如何手工清理

PostgreSQL GIN索引实现原理

PostgreSQL GIN multi-key search 优化

如何防止数据库雪崩

PostgreSQL 闪回 - flash back query emulate by trigger

索引顺序扫描引发的堆扫描IO放大背后的统计学原理与解决办法

PostgreSQL 事件触发器应用

二十一、插件

1. pgxn.org

2. 独立插件

postgis.org

pipelinedb

plr

plcuda

github

3. contrib内置插件

二十二、标准化(规约、制度、流程)

开发规约

管理规约

DBA一族九阳神功秘籍,标准和制度(含重大节日)

二十三、RDS for PostgreSQL 9.4 用户指南

实例规格介绍

网络模式介绍

连接模式介绍

如何购买实例

如何连接实例

如何创建更多用户

如何创建更多数据库

如何创建数据库模板

如何通过模板克隆数据库

如何创建schema

如何将线下数据同步到RDS PG

如何将线下备份恢复到RDS PG

如何将阿里云其他数据同步到RDS PG

如何查看TOP SQL

如何修改RDS PG系统参数

如何修改RDS PG用户参数

如何修改RDS PG数据库参数

如何限制用户连接数

如何限制数据库连接数

如何查看RDS PG审计日志

如何分析RDS PG性能(控制台,AWR)

支持哪些插件(含介绍)

如何创建插件

如何使用插件(含用例)

RDS PG支持哪些备份

如何设置RDS PG物理增量备份任务

如何对RDS PG实施逻辑备份

如何设置RDS PG告警

如何创建RDS PG只读实例

如何升降级RDS PG规格

如何创建远程物理备库、容灾库

如何创建远程逻辑备库

如何进行压力测试

如何创建水平分库

如何利用OSS_FDW实现冷热数据分离

如何监控RDS PG

如何查找RDS PG帮助文档

RDS for PostgreSQL 9.4 用户案例介绍

二十四、reference

manual

给PostgreSQL爱好者的参考资料

Flag Counter

digoal’s 大量PostgreSQL文章入口