系列的频率高的CPU比较有优势 内存的考量要点 并发连接数, 活跃数据, shared_buffer的配置大小, 常用SQL中group by, distinct的比例和work_mem的配置大小, autovacuum work进程的配置数 量以及
maintenance_work_mem的配置大小. OS配置 推荐 linux x64位 内核参数 ( kernel.shmmax , kernel.shmall , kernel.shmmni , kernel.sem , net.core.rmem_default , net.core.rmem_max , net.core.wmem_default , net.core.wmem_max , vm.overcommit_memory ,
fs.aio-max-nr) limit ( nofile , nproc , core , memlock ) blockdev --setra 扇区(512字节) 22 PostgreSQL - 存储配置 cache (打开带断电保护的读写cache) raid ( 建议RAID10, 更新频繁的数据库不建议使用RAID5 ) medium (ssd or 机械盘) (更新频繁的数据库建议使用满足IOPS需求的存 储或SSD, 或将频繁更新的数据表空间放到SSD上) 网络的考量要素 几个需要着重考虑网络的场景 ( big result [set] , backup , 容灾 ) 连接池 PostgreSQL和客户端交互是一对一的进程模式, 因此不适合直接与高并发 的短连接应用直接连接. 加连接池是比较好的解决办法. ( 如pgbouncer ) 数据库编译时需要考量的要点 with-wal-blocksize(根据pg_test_fsync结果选择最优) , with-blocksize( OLAP系统或经常需要读取大量数
据进行分析的系统可以 选择较大的blocksize ) 23 PostgreSQL - 文件系统考量 ext4, xfs, zfs 数据库集群初始化时需要考量的要点 --encoding ( 满足需求的情况下选择单字符占有字节数少的, 方便未来和其 他业务线或国际化的话建议选择UTF8 ) --locale ( C )
--xlogdir ( 选择独立的存储 ) --pgdata ( 选择独立的存储 ) 影响性能的postgresql.conf主要参数 shared_buffers work_mem maintenance_work_mem vacuum_cost_delay , vacuum_cost_limit
synchronous_commit , wal_writer_delay , wal_buffers 24 PostgreSQL - 影响性能的主要参数 : postgresql.conf wal_sync_method commit_delay , commit_siblings checkpoint_segments , checkpoint_completion_target random_page_cost , effective_cache_size
vacuum_cost_delay, vacuum_cost_limit autovacuum , autovacuum_vacuum_cost_delay,
autovacuum_vacuum_cost_limit log_lock_waits , deadlock_timeout temp_tablespaces 25 PostgreSQL - SQL平均响应时间抖动 每秒处理SQL请求数抖动 抖动和什么有关? checkpoint 突发性资源争抢 锁等待 ... 稳定性目标 不影响业务 如数据库异步操作 性能在业务接受范围内 26 PostgreSQL - 权限
最小化 pg_hba.conf iptables 角色权限 防止SQL注入 应用层过滤器, 禁用简单查询协议(Simple Query protocol (PQexec)) 密码复杂度策略 长度, 组成(大小写,数字,特殊字符) 审计 登陆,登出,DDL, 密码加密传输, 存储(encrypted), 数据加密传输, 存储 防火墙 外网访问限制 不建议数据库直接暴露在外网上 27 PostgreSQL - 单节点的PostgreSQL如何确保数据可靠性? (XLOG fsync)确保成功提交的数据在发生异常后可恢复, 未提交的事务在 发生异常后回退. 注意这里指的异常不包括存储故障 fsync = on
full_page_writes = on synchronous_commit = on 关闭没有断电保护的持久化存储的cache(一般指硬盘), (存储,RAID卡一般 都会带断掉保护电池) 一个降低可靠性, 不破坏数据一致性, 但是可以大大提高性能的参数 ( D in ACID ) synchronous_commit = off 关闭
synchronous_commit后, 正常关闭数据库不会导致数据丢失. 异常 DOWN机或DOWN库则最多可能丢失
wal_writer_delay*3的最近时间的 xlog信息. (也就是未从wal_buffers flush到xlog file的信息) 28 PostgreSQL- 数据库高可用的显著特点 要求数据可靠性 为什么要求数据可靠性? A刷卡消费了1000元购买商品, 在数据库中完成了这笔事务. 数据库DOWN机 Failover , 数据
库从主库切换到备份库 A消费1000元购买商品的这个事务不能丢失. 久经考验的高可用方案 RHCS, 共享存储, VIP 共享存储, 节点切换前要fence主库, 确保主库不再对数据发生操作. 同 一时刻只有一个节点在对数据文件进行读写. 缺陷 不能低于存储故障的风险. 如果配置的多播心跳, 网络抖动会造成节点切换. 网络情况不好可 选仲裁磁盘. 29 PostgreSQL - 久经考验的高可用方案 同步流复制, 不共享存储, VIP 优点是不需要采购昂贵的存储, 可以抵御存储单点故障. 切换前fence主库 缺点是同步流复制对性能有影响(下降5%左右). http://blog.163.com/digoal@126/blog/static/163877040201192 203458765/ 异步流复制不适合引入高可用方案, 原因是会导致切换后丢失事务信息. 如 A消费的事务可能在切换后丢失. (当然如果业务系统容忍这种丢失, 也可以 考虑的.) 30 PostgreSQL - 扩展应该和应用紧密结合 和应用不相干的扩展举例 中间件(pgpool-II), 读写分离, 分布式. 和应用结合数据库扩展 读写分离(流复制), 分表 分库 跨库事务, 全局一致性备份和还原(目前只有PostgreSQL-XC做到, 因为 它是有一台GTM统一管理事务ID的) 跨库关联, 原来在一个库中可以通过JOIN来完成, 分库后需要分成多步 操作. 分库的原则是尽量避免跨库查询和跨库事务, 一般按照频繁作为条件出 现的字
相关推荐: