web-dev-qa-db-ja.com

Vertica INSERTの速度は、サーバーの負荷に大きく依存します

Vertica DBINSERTsが非常に遅いという問題に直面しました。私はそのようなテストを行いました:投影のない空のテーブルを作成し、を使用してバッチで挿入を開始します

> INSERT INTO table
SELECT 111,222,333 UNION ALL
SELECT 444,555,666 UNION ALL
SELECT 777,888,999;

1つのクエリで1000行。

アイドル状態のサーバーでは、1つのクエリが約2秒実行され、問題ありませんが、その後、SELECTs(32コアサーバーで約10 LA、それほど大きな負荷ではありません)とINSERTsを作成する負荷の生成を開始します。実行速度は20倍遅くなります(1000行ごとに40〜60秒INSERT)。私の状態には遅すぎます。 Verticaサーバーにファイルをコピーして、パフォーマンスは良いように見えるが複雑すぎるCOPYを作成する以外に、どうすればよいですか?

1
andylens

リソースの使用量が多いほど、読み込みに時間がかかることに驚かないでください。ただし、パフォーマンスの低下については、おそらく簡単な説明があります。私は以下を調べます:

  1. INSERTUNION ALLsは非常に疑わしいものです。負荷は100MBを超えていますか?はいの場合は、COPYを使用します。
  2. 投影は負荷に対して最適化されていますか?
  3. クエリのプロファイルが作成され、ターゲットテーブルでロックが使用されていませんか?
  4. 最も重要なのは、負荷がローカルですか?幅広いネットワークのクライアントから?ベンチマークとしてローカルファイルからの負荷をテストします。

「1000行」は、行の幅が10MBになる可能性があるため、またはJSONをロードしたり、LONG VARCHARをロードしたりする可能性があるため、役に立ちません。実際のロードサイズの方が価値があります。一般的なDL380Gen2では、約350GB/HR /ノードが表示されます。

1
Kermit