表分区是一组用来解决大型数据的技术,以及治理数据的不便选项。总而言之,将大表划分为更易于治理的多个小表,称之为分区。
北京工夫 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