昨天分享了一期带你走进PostgreSQL的世界,总结了一下大家的问题,有遗漏的可以在评论区进行补充。
1.什么样的场景,推荐PG?(PG最不擅长的在哪个方面,最擅长的在哪个方面?)
OLTP场景,复杂SQL场景,单库数据量小于1TB,SQL层数据分析(GreenPlum),GIS需求场景,数据库全文索引方案,Oracle迁移场景,对接外部多数据源FDW场景等。
不擅长的方面:偏互联网场景简单大并发,大量连接,主要问题是后端进程间内部沟通成本太高,所以需要使用连接池。
场景 | 场景分析 |
---|---|
大量插入,少量修改 | 非常适合,放心使用 |
并发量不大,大量DML非7*24场景 | 非常适合,每天有维护窗口进行vacuum |
并发量较大,大量DML非7*24场景 | 非常适合,每天有维护窗口进行vacuum |
并发量不大,大量DML7*24场景,存在较为空闲维护窗口 | 适合,定期在非业务高峰期进行vacuum |
并发量较大,大量DML7*24场景,存在较小维护窗口 | 可用,需要有维护窗口进行vacuum |
并发量较大,数据量较大,大表DML较多,大并发进行全扫的7*24场景且维护窗口短 | 不建议 |
2.讲下Oracle与PG的区别?(oracle和PG的显著差异在什么方面)
从部署角度:Oracle比较难以做到快速部署,PG只有几十M,更容易轻量级自动集成部署,Oracle有rac集群架构,支持多写,PG只有主备方案,不支持多写。
从架构体系:Oracle有undo,PG是MVCC实现。
表空间管理:oracle可以自动扩充表空间,pg的表空间是文件目录,主备环境扩展时备库一定要先创建目录,否则会宕机。
性能分析:PG原生没有AWR,有简单的第三方实现。
从功能角度:Oracle大而全,PG原生功能简洁,扩展功能丰富,是一个一专多长的全栈数据库(时序、图、sharding等)
SQL标准支持角度:PG符合度更高,例如json及json path。
3.PG有没有像Oracle RMAN那样的联机数据热备?能支持任意时间点的恢复吗?
PITR基于时间点、事务、还原点都支持,备份工具有pg_rman支持单机操作、pg_probackup支持单机或远程实例,也支持恢复到db级别。
4.PG也支持类似的RAC共享存储的吗?
可以借助系统集群套件,软件层面支持。
5.POSTGIS的使用场景及如何使用?
与地址坐标位置相关同时想再数据库层做查询计算,可比如公交行业车辆轨迹分析,智能监控等,可以参考POSTGIS官网,有参考案例。
6.PG里的存储过程强大吗?跟Oracle里差别大吗?
PG原生只支持函数的概念,新版本也支持存储过程以及函数里手动commit/rollback操作,功能跟oracle的存储过程一样很强大,而且支持不同的编程接口,C、Java、Python、Perl等,package需要通过schema包装实现。
7.有没有在PG里写函数和存储过程实现业务逻辑的。
非常多,本人之前从事的公交行业IC卡收费系统大量复杂的业务逻辑如售卡充值挂失等都是基于PG函数实现。
8.Oracle转PG,存储过程是不是要改写 ?
本身PG与Oracle的设计理念相似,plsql跟pgsql语法很类似,但Oracle特定语法需要改写。
9.入门书籍有推荐的吗?
《PostgreSQL修炼之道:从小工到专家》
《PostgreSQL服务器编程》
《PostgreSQL实战》
《深入浅出PostgreSQL》
《PostgreSQL指南内幕探索》
10.PG主要应用在哪些地方?
我接触从事过的行业有公交、银行、传统ERP体系,主要应用于企业自研产品,另外PG历届大会及网上可以查
国内各行各业都有实践应用。
11.讲讲PG和MySQL的区别呗?
早期版本的PG性能不太好,由于关系模型支持得很好,用起来会有诸多限制,学习成本会比较高,比起这些,MySQL要轻量很多,到现在这也是它的一个优点,在互联网这个特定的场景中,大家为了追求快速迭代和拓展性,使用的SQL功能不会太多,都够用,而PG 由于更严谨的SQL关系模型,很多用法都限制得比较死,MySQL却要灵活很多。
12.PG和MySQL,Oracle的区别,各自的优缺点是什么。
PostgreSQL是一个数据库编程平台,接口开放,类似乐高积木,相关的配套工具不太完善,需要用户自己集成。
Oracle是成熟完善的商业产品,功能大而全,不够轻量级。
MySQL本人没什么实践。
13.PG有集群环境吗?
原生有集成备份、主备切换接口,WAL日志也开放接口,有基于pgpool做集群,实现连接池、负载均衡及高可用,也有基于keepalived+VIP方案、repmgr方案、patroni方案等主备方案,需要自己集成搭建。
14.PG12试用过吗?与PG10在使用上有没有明显的性能提升?
目前实践都是基于PG12,与10相比使用pgbench测试性能没有太大提升,但并行以及分区表性能有提升,12恢复及备库触发方式等有调整,配置使用上有一些变化。
15.生产环境,目前建议用PG哪个版本。
求稳建议10,市面上的最新书籍大多基于10,12也已经比较稳定了。
16.快速入门,需要学多久时间
有基础的,我觉得2天能实践入门,能干活,深入的话需要持续学习。
17.有Oracle迁移PG经验么?
有做过公交行业的Oracle迁移到PG,现在也在做这方面的工作。
18.从入门到精通要多久?
一般来说入门容易,精通难。
19.为什么现在很多企业选择Oracle转PG呀?
可能有节约成本的因素,自研可控因素,就如IT公司无论大小都有软件部门。
20.PG数据库,这个可以用于大型业务系统不。
本人参与实践落地的公交项目(准金融业务系统),从13年上线运行,15年底切换PG新版本,现在稳定运行,国内很多同行也有介绍不同行业不同的大型业务系统均有实践。
21.PG目前国内的在使用客户多么?
超过100+,包括阿里、腾讯等。
22.讲一下PG优化吧?
一是操作系统级别的参数调优,二是postgresql.conf里的参数调优,三是应用调优,查询索引优化等,后面有机会整理分享。
23.PG读取空间数据,性能如何提高?
PG里有适合GIS空间类型的索引,能提高查询性能。
24.PG高可用当中,备库的WAL文件什么时候会被清理? 遇到过备库WAL分区被撑满的情况?
生产环境经常可能出现WAL日志缺失,备库无法恢复或者堆积造成数据库磁盘打满的情况。
WAL文件的清理和下面几个因素有关:
- max_wal_size、min_wal_size参数
min_wal_size指定pg_wal目录里的wal段文件的最小值,这些数量的段文件总是被回收使用,
即便可能用不到这么多段也是如此,设置该值有助于防止备库需要的日志被主库删掉,但是只是减缓,并不是根治。
max_wal_size限制了最多的wal段日志的大小,但是该限制并不是硬限制,
如果某段时间由于业务量比较大造成wal日志量超过max_wal_size限制的值,
那么检查点进程会启动,将一些以前的段文件变为无用进行清理。 - wal_keep_segments参数
该参数独立于其他参数设置,pg总是保留最少wal_keep_segments个wal段文件,
设置该值也对主备流复制环境的wal日志保留有所缓解,但是同样不能彻底解决。 - archive进程
如果配置了归档,当wal段文件还未来及被归档时,即使满足了其他清理条件,
wal段文件也不能被清理。甚至假设我们配置的archive_command错误造成归档失败,
那将是灾难性的,所有的wal都将无法清理。 - 复制槽的使用
复制槽的使用可能带来主库的wal日志不能被清理或者清理速度较慢带来数据堆积。
我们一般使用物理复制槽来确保流复制环境中备库需要的wal日志不被主库清理。
25.感觉目前PG的市场不大,用的人少?
如果仔细了解下,现在PG市场趋势一直在增长。
26.PG现在主流版本是那些?推荐学什么版本?
生产系统使用主流版本9和10,推荐10做生产,学习建议学12及新版本
27.pgpool怎么样?稳定性如何?
Pgpool-II周围有不少人使用,稳定性可以,还有连接池、负载均衡等功能。
28.PG做数据仓库怎么样?
可以基于fdw方案做。
29.与ORACLE比较,处理数据的吞吐量, 查询,写、读等比较一下性能
Insert和Update差别不大,update操作oracle是直接修改原记录,PG是MVCC插入新版本,表和索引有膨胀。
查询方式索引扫描PG效率略低,全表扫描PG受MVCC影响,效率低一些。