将数据从事务表移动到历史表以增加插入性能,postgres

时间:2013-03-04 21:07:59

标签: postgresql postgresql-9.2

我有3个数据库表,每个表包含600万行,每年增加300万行。

以下是表格信息:     表1:每个字段中平均50个字符的20个字段。两个索引都在时间戳字段上。     表2:5个字段,2个字节的数组字段和1个xml字段     表3:4个字段,1个字节的数组字段

以下是用法:     在每个表中每秒插入15到20条记录。     通过连接前2个表创建视图,而选择主要基于第一个表中的日期字段。

现在,在所有三个表中分别插入一条记录大约需要100毫秒。

我打算从postgres 8.4迁移到9.2。我也想对插入性能进行一些优化。另外,我打算创建历史表并将旧记录保存到这些表中。我在这方面有以下问题

  1. 创建历史记录表并将旧数据移动到这些表有助于提高插入性能吗?
  2. 如果有帮助,我每天需要多久将旧记录移到历史记录表中?或每周/每月/每年?
  3. 如果我只保留一个月(220,000)数据而不是一年数据(300万),它是否有助于提高插入性能?
  4. 提前致谢, Sudheer

1 个答案:

答案 0 :(得分:1)

我确信有人会比我出现更好的信息并提供更好的答案,但我的印象是:

  • 插入性能主要取决于索引策略和硬件
  • 一般情况下,性能在9.0+以上比8.4更好,这可能会影响插入性能,但我不确定。
  • 您的任何想法都不会直接影响插入效果

现在,这就是说,维护小型索引的成本低于大型索引,因此创建历史表和移动旧数据可能只是通过降低索引压力来提高性能。但我希望你的一个索引能够直接产生更大的影响。也许你可以拥有一个包含两个索引的历史表,并只在“今天”表中维护其中一个?

如果我在你的鞋子里,我会在运行8.4的机器上获得一份类似配置的生产副本。然后升级到9.2并查看插入性能是否发生变化。然后尝试这些想法并对它们进行基准测试,看看哪些改进了这种情况。为了产生有用的信息,保持尽可能与生产类似的东西是绝对必要的,但它肯定会比你可能获得的任何假设答案更好的信息。

现在,插入一行IMO 100ms似乎相当慢。更好的硬件肯定会改善这种情况。通常的建议是带有电池备份缓存的大条带RAID阵列。 PostgreSQL 9.0高性能提供了有关所有这些的更多信息。