我曾经有一个包含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个数据库,从主数据库中删除。
选择数据是个问题。
关于存档过程:
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
答案 0 :(得分:0)
尝试找出花费的时间。找到B和C中的行是SELECT
吗?是DELETE
吗?
找到问题陈述后,请查看EXPLAIN (ANALYZE)
输出;它会告诉你是时间花了。
从表中删除行不会使其变小,也不一定会加快表上的查询速度。 可能帮助的内容是VACUUM (FULL)
,特别是在有顺序扫描的情况下。您不必在数据库中的所有表上运行它;如果空间有问题,你可以在另一张桌子上将它打开。
但首先要看执行计划,看看它是否会有所帮助。