2017-10-05 4 views
0

200GBのストレージ(プロビジョニング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では、書かれた挿入ステートメントごとに1回の往復(待ち時間)を待たなければなりません。この待ち時間は、データがロードされているマシンとデータベースの間の待ち時間です。

AWSには、パフォーマンスを向上させるためのさまざまなオプションがあります。それはEC2インスタンスに直接ロードすることができない限り、

  1. 手始めに、あなたはEC2インスタンス上にあなたの生のデータをロードして、そこからインポートを開始することができ、しかし、あなたはおそらく、あなたのDataStageツールを使用することはできません。

  2. バッチ処理を使用するようにdataStageを構成できます。各挿入文には実際には多くの行が含まれています。一般的には、より高速です。

  3. データ圧縮を無効にし、2つのエンドポイント間の遅延を最小限に抑えるためにできることをすべて実行してください。

関連する問題