3

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

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

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

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

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

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

在此先感谢, 苏德希尔

4

1 回答 1

1

我敢肯定,比我更了解情况的人会出现并提供更好的答案,但我的印象是:

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

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

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

现在,插入一行 IMO 100 毫秒似乎很慢。更好的硬件肯定会改善这种情况。通常的建议是带有电池后备缓存的大型条带 RAID 阵列。PostgreSQL 9.0 High Performance有更多关于这一切的信息。

于 2013-03-04T21:32:21.457 回答