Laurion Burchall がこれを読んでくれることを願っています :-)
100 万個の小さなレコードをできるだけ早く挿入する必要があります。
今、私は非常にタイトなループに陥っており、すべてのレコードについて、
a) start a transaction (JetBeginTransaction)
b) prepare an update (JetPrepareUpdate)
c) add the row (JetSetColumns)
d) commit the transaction (JetCommitTransaction)
現在、このプロセスの間、私は 1 つのプロセッサでタイトなループに陥っています。ターゲット マシンには、複数の CPU、優れたディスク、および大量の空き RAM があります。
どうすればより良いパフォーマンスが得られるかを考えています。
トランザクションに関する限り、私はいくつかの実験を行い、1 つのトランザクションに多くのデータを入れすぎるとエラーが返されるという問題がありました。そこで何が起こっているのかをよりよく理解したいのですが、バグがありますか、それともトランザクションのサイズに上限がありますか? 上限がある場合、上限を拡大できますか? 私はこれを調査しているだけなので、トランザクションによって ESE が RAM でより多くのキャッシュを実行できるようになり、ディスク フラッシュが最小限に抑えられるのではないでしょうか? -これは単なる推測ですか?
一般に、複数のプロセッサ/大量の RAM/Nice ディスクを使用するにはどうすればよいですか? データベースを 2 回開いてそこから移動する必要がありますか? スレッドの安全性とトランザクションに関して何が起こるかはよくわかりません。DB に 2 つのハンドルがあり、それぞれがトランザクション内にある場合、1 つのハンドルへの書き込みは、コミットの直前に 2 番目のハンドルで使用できるようになりますか、それとも最初にコミットする必要がありますか?
どんなヒントでも大歓迎です
here are the constraints
a) I've got a million records that need to be written into the DB as fast as possible
b) to fully generate the record for insertion there are two searches that need to occur within the same table (seeking keys)
c) This is a rebuild/regeneration of the DB - it either worked, or it didnt.
If it didnt there is no going back, a fresh rebuild/regeneration is
needed. I cannot restart mid process and without all the data none of
the data is valuable. READ: having one big transaction is fine if it
improves perf. I'd like ESE to cache, in ram, if that helps perf.
ありがとう!