表分区是一组用来解决大型数据的技术,以及治理数据的不便选项。总而言之,将大表划分为更易于治理的多个小表,称之为分区。
北京工夫6月27日,PostgreSQL国内社区开发者、EDB日本公司工程师Amit Langote受中国PostgreSQL分会邀请前来加入“Postgres.Live云端技术沙龙第二期”主题流动,与中国PostgreSQL爱好者,关注者以及从业者畅聊Postgres中的表分区。
NO.1技术分享
在演讲环节,Amit Langote向大家分享了什么是分区;Postgres中的分区介绍,包含之前的分区、申明式分区、语法、索引、束缚、触发器、复制和优化;分区的最佳实际和陷阱三方面的内容,内容长篇累牍、颇有趣味。
其中Amit Langote提到,PostgreSQL v10后的分区表上容许应用语句级(Statement-level)触发器;PostgreSQL v11后容许分区表上的行级AFTER触发器;在行将公布的PostgreSQL v13将容许对分区表执行行级BEFORE触发器。
另外,直到PostgreSQL v12为止,复制只能解决未分区的表。也就是说,分区表无奈增加到PUBLICATION中,而SUBSCRIPTION更无奈将其接管到分区表中。而在行将公布的PostgreSQL v13中则能够复制分区表。
NO.2答疑互动
之后的答疑互动环节,依据聊天栏内大家现场提出的问题,Bruce Momjian乐此不疲、一一做出解答。
以下是小编对于问题和答案的整顿:
问:数据表多大适宜表分区,分区键应该如何抉择?
答:通常是达到1TB,但有的人达到4TB才变成分区表,也有的人100GB就变成分区表,这齐全取决于你的利用场景。分区键如何抉择,在我方才的演讲中有具体说到,供你参考。
问:PostgreSQL反对最大的分区数量是多少?
答:PostgreSQL并没有限度你创立多少个分区,然而我倡议不要创立一千个以上,因为对你其余方面的性能会有所影响。
问:什么业务场景适宜表分区?麻烦以你的工作内容举个例子。
答:我理论工作中没有遇到表分区的利用场景,我的工作就是写代码、写PostgreSQL的性能。但我理解到很多企业用工夫相干的数据来做表分区,这个蛮常见的。
问:当你有一个很大的表,想把它变成分区表,该怎么做呢?
答:我方才的演讲也讲到了,有很多种做法,具体由你的利用场景来决定,我当初也没有一个很好的指标性答案来答复这个问题。
问:有没有工具能够测试下分区表的性能,比方在理论产品部署之前,能够用其简略做个性能测试?
答:官网PostgreSQL目前没有工具能够测试分区表来看它的性能体现,然而有另外一个工具叫HypoPG,它能够创立一些虚伪的数据来做测试,然而目前它不反对最新版本的PG。
HypoPG地址:https://hypopg.readthedocs.io...
问:在高可用方面用Nginx或Haproxy环境下分区是怎么实现的?
答:我在这方面没有很多倡议,我次要做内核方面的工作,我晓得能够用FDW来实现分片,跟分区表一起实现高可用的利用场景。
问:当我的分区键被更改的时候,我的数据就不属于那个分区了,那PG会怎么解决这个事件?
答:在之前的PG版本里,会间接报错。在最近的12、13版本里,会主动帮你做一个分区键的迁徙。
问:PG的hash分区,会有数据分布均衡的考量么?用户须要本人来实现吗?
答:PG所应用的默认Hash算法,实践是能够统一分配数据的。如果你对默认的HASH算法不称心,有一个选项能够应用定制的“hash-operater”类。PostgreSQL分区反对用户制订用什么样的办法(Operator)来进行数据分布,不论是Range、List还是Hash。
问:有没有工具能够主动创立分区表?除了shell脚本,还有其余办法吗?
答:有的,你能够参考一个叫“pg_partman”的工具。它能够创立分区和治理分区,让你的操作变得简略。
问:PostgreSQL将来对分布式的反对,会以当初分区表的根底上来进行实现和设计么?比方分区表+fdw。
答:当初你就能够用FDW插件和分区的性能创立实现相似的设置,然而你不要指望所有的局部都工作,比方你没有分布式原子事务、散布的snapshot等。你能够实现一个只读的分区跨集群数仓,可能会好一点。
问:primary key的限度怎么加到分区表外面?
答:你能够把“primary key”放到分区表里,须要留神的是“primary key”的值和分区键必须要统一。
问:PG的分区实现形式和Oracle的分区实现有什么不同?各自的优缺点是什么?
答:我对Oracle的理解不多, Oracle在分区畛域曾经做的很久了,对用户的体验也会好一些。如果你之前用Oracle的分区很久,对于PG的分区你可能一开始会不太习惯。然而基本功能两者都是差不多的。
问:分区表是否反对在线scale out,如果是,能简略说一下如何实现的么,保障在线业务不受到影响。
答:你能够用FDW模块和表分区来做扩大性能,倡议做只读的FDW扩大。
问:分区键必须创立惟一主键索引吗?分区间的索引能够不同吗?
答:你能够把每个分区的分区键也把它创立为“primary key”,然而我感觉没有太大的意义,通常咱们的做法是把“primary key”创立在副分区上,这样每一个子分区都能够达到它的成果。创立“primary key”,你要确定它与你的分区键是统一的。
问:PG11新算法中分区修剪的根据是什么?
答:其实没有太简单的逻辑,简略来说,就是不去扫描不须要扫描的分区。
以上是小编收集的现场问题和答复。
最初,由衷的感激Amit Langote应邀参加来自中国PostgreSQL分会主办的“Postgres.Live云端技术沙龙第二期”主题流动,其次感激志愿者Cary Huang和David Zhang精确的中英文实时翻译,最初感激来自各界PostgreSQL爱好者和关注者的加入以及PostgreSQL从业者的反对。
流动回放视频地址:https://www.bilibili.com/vide...
流动PPT获取形式:
关注中国PostgreSQL分会官网微信公众号并回复“分区”
更多精彩内容,请关注以下平台、网站:
中国Postgre SQL分会官网公众号(技术文章、技术流动):
开源软件联盟PostgreSQL分会
中国Postgre SQL分会技术问答社区:
www.pgfans.cn
中国Postgre SQL分会官方网站:
www.postgresqlchina.com