DNS*_*DNS 24 postgresql performance partitioning
我正在对包含时态数据的非常大的表进行分区,并考虑我应该创建分区的粒度.Postgres 分区文档声称"大量分区可能会大大增加查询计划时间",并建议将分区与"最多可能有一百个"分区一起使用.
假设我的表持有十年的数据,如果我按周分区,我最终会有超过500个分区.在我对此进行排除之前,我想更好地了解分区数量对查询计划时间的影响.有没有人对此进行过基准测试,或者是否有人对内部的工作方式有所了解?
Gre*_*ith 12
查询规划器必须对查询中使用的表的每个分区进行线性搜索约束信息,以确定实际涉及哪些 - 可以包含所请求数据所需的行.当您加入更多表时,规划器考虑的查询计划数量呈指数级增长.因此,线性搜索加起来足够麻烦的确切位置实际上取决于查询的复杂性.连接越多,你就越会受到影响."高达一百"的数字来自于注意到即使在围绕该点的简单查询上,查询计划时间也增加了非常微不足道的时间.特别是在Web应用程序上,响应时间的延迟很重要,这是一个问题; 因此警告.
你能支持500吗?当然.但是,对于涉及优化程序所考虑的表的每个查询计划,您将要搜索500个检查约束中的每一个.如果您不关心查询计划时间,那么您可能不在乎.但是大多数站点最终不喜欢使用那么多分区在查询规划上花费的时间比例,这也是为什么每月分区是大多数数据集的标准的一个原因.您可以轻松存储10年的数据,每月进行分区,然后再开始进入规划开销明显的地方.
“大量分区可能会大大增加查询计划时间”,建议将分区与“多达一百个”分区一起使用。
因为每个额外的分区通常都将与检查约束联系在一起,这将使计划者想知道需要查询哪个分区。在最佳情况下,计划者会确定您只是在打一个分区,而append
完全摆脱了这一步骤。
就行而言,正如DNS和Seth所指出的那样,您的里程将随硬件而变化。但是,一般而言,查询1M行表和10M行表之间没有显着差异-尤其是如果您的硬盘驱动器允许快速随机访问,并且如果它cluster
使用最常使用的索引进行集群(请参见语句)打。
归档时间: |
|
查看次数: |
11462 次 |
最近记录: |