2008-08-28 12 views
2

perl DBIを介してアクセスするoracle 10gを使用すると、数千万の行が1秒間に数回更新され、他のプロセスから頻繁に読み取られる表があります。いつ変更をコミットしますか?

すぐに、更新頻度は1桁(おそらく2)増加します。 誰かが、毎回更新するのではなくN回の更新をすべてコミットすると、パフォーマンスが向上することを提案しました。

私はいくつか質問があります:それは速いか遅いか、それが(とすぐに新たな負荷のまともなシミュレーションを得ることができるようなベンチマークに両方の方法を計画する)依存だろう

  • それはなぜでしょうヘルプ/パフォーマンスの低下。
  • 「それは...依存している」場合は、何ですか?
  • Nの最良の価値を助けるならば?
  • 私のDBAが必要なときに役立つストレートな答えが得られないのはなぜですか?
    (実は私はその1つの答えを知っている):-)

EDIT:

@codeslave:おかげで、ところで コミットされていない変更を失うことは問題ではありません、私は削除しないでください 元のデータは、私はすべて で結構です確信してまで、ところで女性のクリーニングする は、いくつかのグーグルでは、それがため を助けるかもしれない示したTWICE

:-)、サーバーを抜いたの更新に を使用しましたロールバックに関連する問題の セグメントですが、数十万回ごとにNのために大雑把には のルールがわかりません。 何百?千 ?

@diciu:素晴らしい情報、私は間違いなく を見てください。

答えて

3

コミットにより、ディスクに、つまりコミットされているトランザクションの中に停電などが発生した場合でも回復可能なものがあれば、その内容はディスクに書き込まれます。 ファイルへの書き込みはメモリへの書き込みよりも遅いため、一連の統合更新ではなく、行内の多くの操作で実行すると、コミットが遅くなります。私はシナリオでは、私は特定のアプリケーションで見てきた、ということを確実に知るhttps://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6158695.html

PS、合体したアップデートの数を変更:

のOracle 10gでは、非同期はそれはそれははるかに高速ですが、信頼性が低くなりますコミットがあります5Kから50Kまでは、10倍速くなります。

0

Faster/Slower?

おそらく少し速いでしょう。しかし、あなたは(クリーニング女性がサーバーを抜いた)壊滅的な何かが起こるはずコミットされていない変更を失って、デッドロックに実行しているのより大きな危険を冒すことなどFUD、火、ブリムストーン、

は、なぜそれが役立つだろうか?

明らかに少ない等順番に少ないディスク書き込みを意味オペレーション、

DBAのとストレート答えをコミットしますか?

簡単でしたら、不要です。

1

コミットの頻度を減らすことは確かに高速化しますが、頻繁にこのテーブルを読み書きするとロックが発生する可能性があります。同じデータが同時に更新される可能性は、あなただけが判断できます。この可能性が低い場合は、50行ごとにコミットし、状況を監視します。試してエラーが発生する恐れがあります:-)

0

[あなたはすべてが正常であることを確認するまで更新に使用された元のデータを削除しない]の場合、その増分コミットをすべて削除しないでください間に、そしてロールバックが問題がある場合は?あなたは効果的にトランザクションの上にトランザクションシステムを構築したように思えます。

0

@CodeSlaveあなたの質問は@stevecholによって返答されます。すべての増分コミットが削除されると、ロックされます。私は何もうまくいきません。彼のアドバイスに従って乱数を選んで、負荷を監視し、それに応じて調整します。 @diciu twaksを適用している間。

PS:トランザクションの最上位のトランザクションはちょうど偶然です。私はFTPによる更新に使用されるファイルを取得し、すぐに削除する代わりに、私はcronジョブを設定して1週間後に削除します不平を言う)それは何かがうまくいかない場合、私はエラーをキャッチするために1週間持っていることを意味します。

1

コミット頻度を減らすだけでなく、個別の更新ではなく一括更新を実行することも検討する必要があります。

+0

なぜそれが助けになるのか詳しく説明できますか? – Pat

+0

より少ないSQL操作でより多くのデータを処理できるためです。それはより速い –

関連する問題