2017-10-05 132 views
0

我們創建了一個具有200GB存儲空間(Provisioned IOPS)的RDS postgres實例(m4.xlarge)。我們正嘗試使用DataStage將數據從公司數據集市上傳到RDS中的23個表。然而,上傳速度很慢。加載400K記錄大約需要6個小時。調整參數後,將數據加載到Postgres RDS的速度仍然很慢

然後,我開始根據Best Practices for Working with PostgreSQL調整以下參數:

比這些
autovacuum 0 
checkpoint_completion_target 0.9 
checkpoint_timeout 3600 
maintenance_work_mem {DBInstanceClassMemory/16384} 
max_wal_size 3145728 
synchronous_commit off 

其他,我也被關閉multi AZ和備份。儘管啓用了SSL,但不確定這會改變任何事情。但畢竟改變了,仍然沒有太大的改善。 DataStage正在並行上傳數據〜12個線程。寫入IOPS約爲40 /秒。這個值是否正常?還有什麼我可以做的,以加快數據傳輸?

+0

您的RDS實例是可公開訪問的嗎?它是通過NAT還是其他網絡瓶頸(代理,VPN等) –

+0

還有一件事..你有一堆索引仍然啓用?另外,你的數據有多大(meg,而不是行) –

+0

@JoeLove實例可公開訪問,無需代理或vpn等。總數據大約爲50GB。大約10GB數據在5個小時內被加載。 – ddd

回答

1

在Postgresql中,您將不得不等待寫入每個插入語句的整個往返行程(延遲)。這種延遲是數據庫到加載數據的機器之間的延遲時間。

在AWS中,您有許多選項可以提高性能。

  1. 對於初學者來說,可以加載你的原始數據到一個EC2實例,並從那裏開始導入,但是,您可能無法使用您的DataStage工具,除非它可以直接在EC2實例來加載。

  2. 您可以將dataStage配置爲使用批處理,其中每個插入語句實際上包含許多行。通常,越快,越快。

  3. 禁用數據壓縮並確保您已盡全力將兩個端點之間的延遲降至最低。