PostgreSQL PostGIS so 预加载(preload) 性能提升 - 暨什么动态库建议预加载
背景 PostgreSQL是一个可扩展的数据库,如果你的扩展是C扩展,代码在动态库中。那么在使用时需要加载这个动态库来实现一些功能例如创建类型,创建函数,创建操作符等。 PostgreSQL允许多种加载动态库的方法,例如数据库启动时加载,会话连接(启动backend_process)时加载,或者在会话中调用到对...
背景 PostgreSQL是一个可扩展的数据库,如果你的扩展是C扩展,代码在动态库中。那么在使用时需要加载这个动态库来实现一些功能例如创建类型,创建函数,创建操作符等。 PostgreSQL允许多种加载动态库的方法,例如数据库启动时加载,会话连接(启动backend_process)时加载,或者在会话中调用到对...
背景 打车类应用,如果完全按调度系统来派单,而非抢单的话,调度系统要非常的健硕。 比如滴滴打车,如何处理供给双方的需求,并高效的完成派单呢? 随着业务的需求增多,调度规则也会增加,比如拼车,预约,等。 下面是一个简单的派单系统的思考,如何使用PostgreSQL与空间数据库插件PostGIS来实现一个简单的...
背景 数据库BUFFER是一个对物理IO对冲非常有效的组件,所以BUFFER的稳态对IO波动影响很大。 在一些操作时,可能会导致一些IO的波动,比如刷脏页,检查点。但是PostgreSQL在这方面都有很好的调度策略,避免IO的波动。具体见PG文档的介绍,或如下 《PostgreSQL 9.6 平滑fsync,...
背景 pgloader是一款开源的迁移软件,命令行操作。 支持从文本、mysql, sqlite, sqlserver迁移到PostgreSQL. 包含DDL的自动迁移。 同时在数据写入PG的过程中,支持COPY协议写入(支持记录错误行),支持并行创建索引。 功能以及导入效率都是很赞的。 https://...
背景 PG的一些元数据没有时间字段,例如对象的创建时间、DDL的修改时间。 如果要获得这个时间信息,我们可以 1、通过事件触发器,将DDL事件记录到某个元数据表中,来获得。 2、或者打开DDL审计日志,从审计日志中获得。 3、与事件触发器类似,不过是通过PG的HOOK来实现的,在执行DDL时,通过代码中对...
背景 EDB PPAS是EDB推出的一款同时兼容Oracle和PostgreSQL协议的数据库,在去O的场景中,使用非常广泛,价格便宜,同时性能和Oracle差不多,并且SQL语法,存储过程等兼容性都特别好。 除了Oracle兼容,EDB PPAS实际上底层是PostgreSQL,如果你想把PPAS跑在兼容PG...
背景 PostgreSQL 目前默认的存储引擎,事务可见性需要依赖行头的事务号,因为事务号是32位的,会循环使用。 在一条记录产生后,如果再次经历了20亿个事务,必须对其进行freeze,否则数据库会认为这条记录是未来事务产生的(可见性判断)。 因此FREEZE操作是数据库在32位事务号的情况下,经常要做的。...
背景 Oracle 自定义类型与PostgreSQL自定义类型的兼容性。 虽然两者用法上有一定的不同,但是PostgreSQL功能上完全覆盖到了Oracle的自定义类型。 下面从几个方面描述PostgreSQL Oracle create type的兼容性。 1、创建自定义类型 2、创建自定义类型的构造器...
背景 PostgreSQL 里面创建的表,序列,索引,物化视图等带有存储的对象,每个对象的数据文件都是独立的,较依赖文件系统的管理能力。并不像Oracle那样把对象放到表空间中管理,表空间又由若干的数据文件组成。(ASM的话则接管更多的操作。) 所以,当创建了很多个有实际存储的对象时,文件数就会很多: 通常一...
背景 数据同步是一个较为常见的需求,为了提高性能,并行是一个非常简单暴力的手段。但是通常只能做到不同的对象之间并行,对于单个对象,比如单表,能否并行呢? 有一种方法是使用HASH并行,例如按某个或某几个字段,按hash值取模,切分为多组数据,每个进程读取一部分,并行将单表取出。但是这种方法有一个弊端,会导致重复...