0

チケット作成と課金デーモンという 2 つの Java プロセスがあります。これらのプロセスは両方とも、同じ MySQL Innodb テーブル「課金」を使用します。チケット作成は、主に請求チケットを作成し、ユーザーの挿入/更新チケットを含みます。請求デーモンはチケットを取得し、ユーザーに請求を送信し、最終的に結果 (成功/失敗) を「請求」テーブルに更新します。毎日の請求チケットは数千のユーザーに対して作成されます。請求が今日作成された場合、それは「新しいチケット」と呼ばれ、以前に作成された他のチケットは「古いチケット」と呼ばれます。私が直面している問題は、両方のプロセスが同じテーブルを使用し、レコードの挿入/更新が非常に遅くなることです。私が試した解決策

1. Stopped billing while ticket creation: I got late to bill users and billing 
success rate got slow. 

両方のプロセスを使用すると、チケットの作成が非常に遅くなり、失敗率が高くなる「新しいチケット」ではなく「古いチケット」に対して請求が送信されました。

この問題を解決するにはどうすればよいですか?「請求」の子とマスターテーブルを作成することで解決しますか?または、別のテーブルを作成する必要がありますか? または適切な解決策はありますか?

Database is in Amazon RDS using MySQL Innodb. Please adivse urgently as 
my billing rate is getting really slow. 

前もって感謝します..

4

1 に答える 1

0

多くの場合、これはトランザクションのスループット/同時実行の問題です。たとえば、チケットを選択して変更する場合、ロックするオブジェクトの数とロックにかかる時間を考慮する必要があります。これが発生すると、更新トランザクションは実行されず、ロックされたリソースが終了するまで待機するためです。

トランザクションを微調整し、必要以上のオブジェクトをロックしないでください。また、ロックする必要がある場合は、できるだけ早く解除してください。

于 2013-06-03T00:20:39.173 に答える