1、PostgreSQL性能调优中兴通讯 王文娟影响数据库性能的三层架构应用层数据库层物理层大小小大物理层优化数据库层优化应用层优化目录影响性能的硬件因素CPUIO内存网络硬件因素新型硬件容器资源弹性伸缩,动态调节PG处理能力MasterSlaveSlave 实时监控容器资源使用情况CPU、IO、内存、网络等物理资源数据库连接数、读写请求数、表空间等监控包括网管系统和数据库系统2个层面 根据监控结果产生预警信息CPU占用达70%预警,提示增加CPU核数内存、磁盘占用达到阈值时提示增加配置 动态伸缩Docker容器资源配置根据情况增加容器的CPU、内存、磁盘等CPU核数建议适当超配,以提高实际使用率
2、磁盘空间的缩容比较难办,不建议做物理层优化数据库层优化应用层优化目录影响性能的数据库因素架构设计查询优化数据库配置读写分离,充分发挥Slave节点能力SlaveSlaveMastersyncsyncR/W AppWrite AppRead Appreadwrite/readPG参数synchronous_commit指定事务提交所要求的WAL记录同步等级,可以取5个有效值:off:事务提交不需要等待WAL日志刷写入(flush)本地磁盘local:事务等待WAL日志刷写入本地磁盘后才提交remote write:事务等待同步备节点接收到WAL日志并写入操作系统才能提交on:事务等待同步备节点接
3、收到WAL日志并刷写到(flush)磁盘才能提交remote_replay:事务等待同步备节点接收到WAL日志并回放完毕才能提交 synchronous_commit参数影响主备节点的数据一致性状态 要求高一致性读的场景必须把该参数配置成remote_replay,比如涉及到金额的在线交易事务 对数据实时性要求不高的场景,可以把该参数配置成默认的on级别,比如报表统计 该参数配置等级越高,Master节点写延迟越大,性能影响越大PG Proxy优化数据库配置参数优化内存资源类参数优化内存资源类参数shared_bufferswork_mem扫描索引的代价内存耗尽估算autovacuumauto
4、vacuum_work_mem(autovacuum_*等系列参数)maintenance_work_mem控制系统在构建索引时将使用的最大内存量。为了构建一个B树索引,必须对输入的数据进行排序,如果要排序的数据在maintenance_work_mem设定的内存中放置不下,它将会溢出到磁盘中。vacuum扫描索引并删除这些TID对应的所有索引项。如果它在扫描完整个表之前耗尽了存放无效元组TID所用的内存,它将停止表扫描,转而扫描索引,以丢弃堆积的TID列表,之后从它中断的位置继续扫描表。对于一个大表,多次扫描索引的代价是非常昂贵的,特别是在表中有很多索引的情况下。如果maintenance_
5、work_mem设置太低,甚至可能需要两次以上的索引扫描。当使用缺省配置autovacuum_max_workers=3,并且假设设置maintenance_work_mem=10GB,你将会经常消耗30GB的内存专门用于自动空间清理,这还不包括你可能从前台发起的VACUUM或 CREATE INDEX操作所需的内存。这样,你会很容易把一个小系统的内存耗尽,即便是一个大系统,也可能存在诸多性能问题。如何估算autovacuum_work_mem?建议:maintenenance_work_mem内存大小大约是最大表的1/100dynamic_shared_memory_typehuge_pag
6、e优化数据库配置参数优化脏页刷写类参数优化脏页刷写类参数bgwriter_delaybgwriter_flush_afterbgwriter_lru_multiplierbgwriter_lru_maxpages优化优化WAL相关参数相关参数fsyncwal_sync_methodsynchronous_commitfull_page_writeswal_*类名称参数chechpoint_*类名称参数commit_delaycommit_siblingsmax_wal_sizemin_wal_size的查询优化APP解析器重写器优化器执行器SQL语句查询树重写后的查询树执行计划执行结果物理优化