.jpg)
书: https://pan.baidu.com/s/1o53U8DJYBlzPKes4X47C8Q?pwd=ymj8
笔记如下:
- “PostgreSQL的核心优势在于可扩展性,支持自定义数据类型、函数、索引甚至编程语言(如PL/pgSQL)。”
- “MVCC(多版本并发控制)通过事务ID(xmin/xmax)实现读写不阻塞,避免锁竞争。”
- “表空间(Tablespace)将数据分布到不同磁盘,优化I/O性能,如
CREATE TABLESPACE fast LOCATION '/ssd'
。” - “执行计划分析:
EXPLAIN (ANALYZE, BUFFERS)
显示实际耗时和缓存命中率,Seq Scan
全表扫描需警惕。” - “索引选择:B-tree适合等值查询,GIN加速数组/JSON检索,BRIN对有序大表高效。”
- “分区表(Partitioning)通过继承表或声明式分区(
PARTITION BY RANGE/LIST
)实现亿级数据管理。” - “连接池工具(如PgBouncer)减少连接开销,
max_connections
需根据内存调整(默认100偏小)。” - “WAL(预写日志)是崩溃恢复的核心,
archive_mode
开启归档可实现PITR(时间点恢复)。” - “并行查询通过
max_parallel_workers_per_gather
控制,适合大表扫描和聚合操作。” - “JSONB类型支持GIN索引,
@>
操作符实现高效JSON路径查询,替代NoSQL场景。” - “
VACUUM (VERBOSE, ANALYZE)
清理死元组并更新统计信息,autovacuum
需根据负载调优。” - “复制方案:流复制(Streaming Replication)保证高可用,逻辑复制(Logical Replication)支持跨版本迁移。”
- “
pg_stat_statements
模块统计SQL执行耗时,定位TOP慢查询。” - “扩展生态:PostGIS处理地理数据,TimescaleDB实现时序优化,Citus支持分布式。”
- “
pg_dump --jobs=4
并行备份,pg_restore --single-transaction
原子性恢复。” - “锁监控:
pg_locks
视图查看阻塞会话,pg_blocking_pids()
快速定位锁源头。” - “参数调优:
shared_buffers
设为内存25%,work_mem
避免复杂排序溢出到磁盘。” - “
EXPLAIN
的CTE
(WITH子句)可能物化结果,大数据集改用子查询。” - “
pg_prewarm
预热缓存,pg_stat_activity
监控实时会话,pg_cancel_backend()
终止查询。” - “修炼心法:先理解执行计划,再动手优化;基准测试(pgbench)比猜测更可靠。”