设置
我们有一个多租户应用程序,大约有1000个客户。当客户流失时,我们会在一段时间后删除他们的所有数据。我们有几个表非常大,我们正在考虑使用分区来分割每个客户。
问题
1000个租户(客户)是很多分区-在PostgreSQL上这样做合理吗?
More详细信息
目前,我们的租户之间的分隔是通过DB中所有表上的account_id列进行的。有几张桌子很大。例如,有一个event表(我对分区感兴趣),它包含应用程序中发生的所有事情的审计日志和其他事件。
下面是有关事件表的一些事实:
account_id对事件的统计非常不均衡,5%的帐户拥有50%的数据。author_id等)account_id)。删除可能是数以百万计的行。没有最新消息。删除大型帐户是罕见的,目前还不是一个很大的性能问题。account_id +id选择)或给定时间内的所有事件。时间并不总是固定的。查询中始终存在account_id。Possible解决方案
由account_id划分:
优点:
DROP TABLE。WHERE account_id = 123。缺点:
按时间戳进行分区:
优点:
缺点:
发布于 2019-04-19 08:59:13
分区主要是关于加速删除和顺序扫描。
account_id的大删除,那么该列上的列表分区将是最好的解决方案。account_id上具有D8条件或时间约束,则在该WHERE条件下进行分区将允许PostgreSQL只对某些分区执行顺序扫描。您必须决定这些事情中的任何一件是否足以让您考虑分区。分区并不是免费的:它将增加查询规划时间,有时还会增加执行时间。
分区不会使索引扫描速度更快,通常情况正好相反。只有当您期望从分区中获得真正的利益时,才进行分区。
1000个分区几乎太多了,效率很低。您可能会考虑为更大的帐户拥有单独的分区,并将其余的部分捆绑起来,也许使用默认的分区。
https://dba.stackexchange.com/questions/235108
复制相似问题