最近,由于大量的流量,CPU过载(超过98%的利用率)在我们的数据库实例。因此,我们决定将我们的数据库分割成多个实例。据我所知,在postgres中,db级切分主要是通过对表进行分区,并将每个分区移动到单独的实例中,如下图所示。

我认为这可能会使查询更快,但不会使主分区上的负载减少那么多,因为所有查询都是对主分区本身进行的。因此,我决定在我们的节点后端实现应用程序级的切分。
对于使用分区键完成的所有CRUD操作,应用程序级分片非常有效。但是,如果查询需要由另一个键完成,那么我们需要逐个遍历每个分区。因此,在这种情况下,最好有一个未分区的表,以便可以使用相同的表查询所有数据。
解决这个问题的好方法是什么?仅仅实现db级分片(如上面的映像所示)就足以降低主实例中的CPU利用率。
发布于 2022-04-27 10:07:40
如果分区是正确的,那么从所有碎片中查询数据就不需要慢了,因为所有这些碎片都可以并行查询。如果在数据库上使用分区并将远程碎片定义为postgres_fdw外部表的分区,则会自动发生这种情况,因为PostgreSQL v14引入了可以并行处理这些操作的“并行附加”执行计划节点。
如果在应用程序级别上进行切分,则必须教会应用程序并行查询碎片。
https://stackoverflow.com/questions/72026772
复制相似问题