具有大量表格的postgresql的性能(EG:100万个表)?

时间:2011-10-23 13:35:12

标签: postgresql filesystems max ext4

在单个pgsql数据库中可以保留良好性能的最大表数是多少,因为pgsql在文件系统上每个表存储1个文件,并在每个查询中搜索pg_catalog进行查询规划?

EG:pgsql可以处理单个数据库中的100万个表吗?假设使用的文件系统是ext4,并且每个表包含的数据非常少,因此超量磁盘存储大小不是问题。问题实际上来自(1)文​​件系统上有100万个文件的影响,以及(2)pg_catalog中有100万个条目的影响。

从这个主题(2005年),http://postgresql.1045698.n5.nabble.com/GENERAL-Maximum-number-of-tables-per-database-and-slowness-td1853836.html - 下面说了(但我现在还不知道这有多少仍然适用):

Benjamin Arai写道:

  

每个数据库当前的最大表数是多少?还有   有更多的表以任何方式减慢性能?

对于大多数情况,答案是否定的。但是,一旦你接近6位数 表计数,pg_catalog结果非常庞大。问题是 查询计划程序必须为每个查询检查pg_catalog以查看内容 索引可用,统计数据和价值分布是, 等,以建立最佳计划。在某些时候,真的很大 pg_catalog可能会让您的系统陷入困境。

...

William Yu< [隐藏电子邮件]>写道:

  

Benjamin Arai写道:

     
    

每个数据库当前的最大表数是多少?还有     有更多的表以任何方式减慢性能?

  
     

对于大多数情况,答案是否定的。但是,一旦你接近6位数   表计数,pg_catalog结果非常庞大。

你还必须考虑拥有数十的性能影响 数据库目录中的数千个文件。虽然有些新的 文件系统并没有特别担心,很多人都陷入困境 当目录中有超过几千个条目时查找。

3 个答案:

答案 0 :(得分:3)

您不必在一个目录中保留一百万个文件。您可以使用CREATE TABLESPACE来安排不同目录或不同磁盘上的空间。我对pg_catalog内部结构一无所知,但我可以想象它如何通过表空间缩小搜索范围,这可能会大大缩短搜索时间。

但这与文件系统中一百万个文件或pg_catalog的实际(未想象)问题可能出现的问题不同。

应该很容易做一个简单的(可能是误导性的)测试。使用您最喜欢的脚本语言创建一百万个表,每个表有五到六列。

答案 1 :(得分:1)

blog以及此question包含的评论更能说明这一问题。

回答你的问题:这取决于“在保持良好表现的同时”部分。您完全认为“仍然表现良好”的是什么?并且完全是什么工作负载?

让我重新提一下你的问题:人类忍受多少牙痛?同样的答案!

但在这两种情况下,真正的问题是:你为什么要关心?在这两种情况下,更好的解决方案是采取措施消除原因并尽快进入无痛状态。

答案 2 :(得分:1)

一般情况下,根据我所知道的那些使用了大量表(数千个)的人,随着db中表的数量增加,计划开销也会增加。我所知道的那些将此作为问题的人必须找到解决这个问题的方法,但没有告诉我这些解决方案是什么。会发生什么是数据库规划器,为了确定执行查询的最佳方式,必须根据表和列查找信息,因此这需要在系统目录中搜索随着时间的推移变得越来越膨胀的数据。这会影响计划时的每个查询。

基本问题是,在计划时,您必须考虑表格上的数据(需要在表格中查找内容)以及列和列。有趣的是,pg_class在oid上有一个索引,在relnamespace上有一个索引,但在relname上没有一个,你不能轻易创建一个。系统表中唯一的索引是UNIQUE约束,所以我不知道除了改变系统目录(在源级别或允许你这样做)之外,你可以解决这个问题。

我还希望性能会慢慢降低,因此您不能仅仅对此进行严格限制。因此,它取决于给定工作负载的可接受性能。

如果你有那么多表,我会先看看有多少表可以先拆分成其他数据库。

TL; dr:预计会有大量表格出现性能问题。期望必须有创意来解决它们。