2016-12-03 1 views
0

Postgresqlテーブルに6〜1,000万行を新しく挿入する必要があります。これらの挿入物のうち抜け道がないのは です。Linux Java Process/One Threadを1つだけ使用して、1分あたりに実行できるインサートの数はいくつですか?

複数のマシンで実行されている複数のプロセスを使用して拡大縮小できます。

インテルi7および16GBのメモリLinuxマシンをご紹介します Javaプロセスを1つだけ使用して1分で挿入できる行の最大数はいくつですか? TCP/IP調整などを想定します。

この回答を私の実験と組み合わせて、マシンあたりのプロセス数とマシン数を調べることができます。

私は、2000〜2500行/分を超えるヒットがあります。

私はHibernate 5.2.5をステートレスセッションと1つのスレッドで使用しています。

このようなプロセスを10回実行すると、スループットが直線的に増加する2万2000〜25000個の挿入/分の数値を できます。

私は数が少なすぎるとどのように私は、少なくとも10000 /分を言うために、プロセスごと スループットを向上させることができるかどうか、私の単一のプロセスで何も悪いことして をやっているかどうかを知りたいと思います。

thsnk、 クマール

+0

何か間違っている必要があります。私は簡単にJavaを使用して毎秒20.000行を挿入することができます –

+0

パフォーマンスを遅くしたい多くのことがあります:インデックス、トリガー、ルールなど。 1つの方法: 'analise(説明、冗長、バッファ)'。 – Abelisto

+0

多数のレコードを挿入する必要があるときは、いつでもhibernateをスキップして、raw jdbcと 'COPY'コマンドを使用します。 – teppic

答えて

0

答えは(スレッドごとに)単一のトランザクション内のすべてのINSERT Sを実行することはほぼ確実です。

INSERTはそれぞれ独自のトランザクションで実行され、各挿入の最後にトランザクションログのディスクへの強制的な転送が行われ、処理がクロールされます。

これは1回限りの手順で、データを失う危険がある場合(起動する前に適切なバックアップを作成した場合など)は、代わりにfsync=offをPostgreSQLに設定することもできます完了したら元の値にリセットしてください!)。

0

私は最下位のインテルCPU HPラップトップを使用しました。一つのプロセス、一つのスレッド: は、私は、元の番号は、いくつかの他のセットアップで得られた無調整など

で毎分50,000インサート(60秒)に近づくことができました。私は疑念があったと私はスタックオーバーフローからの回答を得たいと思った。私は私の答えを得たので、それ以上の答えは必要ありません。

ありがとうございます。これらの規則にも従わなければならない。 さらに、システムが開発されるときには、分散プログラムと並列プログラムを実行できる必要があります。

ありがとう、 クマ

関連する問題