在不提高性能的数据库之间迁移数据

时间:2016-11-07 13:41:36

标签: performance postgresql

我曾经有一个包含3个表的PostgreSQL 9.2数据库:

A - contains 12 millions records
B - contains 24 millions records
C - contains 20 millions records

表连接如下:

A (one to many) B
B (one to zero/one) C

我已经决定将旧数据存档/迁移到第二个数据库以加速我的主数据库(数据更少=性能更好)。

在我从每个表中迁移了大约20%的数据后,我在主数据库表上完成了VACUUM ANALYZE以清理一点。

我认为接下来20%的移植速度会快得多......我错了。每个下一个要归档的数据百分比都会越来越慢......

我想这里可能需要VAACUM FULL,但我读过它不推荐它。更重要的是它是一个非常慢的查询,需要几乎两倍的磁盘空间(它创建一个新表然后删除旧表)。

尽管数据较少,但处理速度较慢的原因是什么?我错过了一些可以在迁移后提高数据库速度的步骤吗?除了VACUUM ANALYZE

之外的某种清理

需要指定我有3个步骤的测量时间:从主数据库中选择要复制的数据,插入第2个数据库,从主数据库中删除。

选择数据是个问题。

关于存档过程:

  1. 我选择一个比x天更早的A表行。复制并删除。
  2. 然后我选择连接到之前选择的A行的B行。复制并删除。
  3. 最后我选择连接到之前选择的B行的C行。复制并删除。
  4. CONF:

    8GB RAM。

    max_connections = 100
    shared_buffers = 2GB
    effective_cache_size = 6GB
    work_mem = 32MB
    maintenance_work_mem = 512MB
    checkpoint_segments = 32
    checkpoint_completion_target = 0.9
    wal_buffers = 16MB
    default_statistics_target = 100
    random_page_cost = 2.0
    

1 个答案:

答案 0 :(得分:0)

尝试找出花费的时间。找到B和C中的行是SELECT吗?是DELETE吗?

找到问题陈述后,请查看EXPLAIN (ANALYZE)输出;它会告诉你是时间花了。

从表中删除行不会使其变小,也不一定会加快表上的查询速度。 可能帮助的内容是VACUUM (FULL),特别是在有顺序扫描的情况下。您不必在数据库中的所有表上运行它;如果空间有问题,你可以在另一张桌子上将它打开。
但首先要看执行计划,看看它是否会有所帮助。