MRPの処理速度改善のために、いろいろ実装したが、スレッド化がかなり効果的だった。
1スレッドごとに16%程度の処理改善がみられたようだ。
ただし、コア数以上のスレッドでは改善率が極端に下がる。
試験環境は、6コアで、1.16の6乗=2.4363
実際には、6スレッド以上を起動しているので、2.4倍以上の速さになることを確認。
そこそこの部品構成と需要件数でも、30分で処理が終わるMRPになった。
技術的には、スレッドごとにレコードロックが競合しないように設計すること、こまめにコミットしてレコードロックを長時間保持しないこと、Wait、Notifyを巧みに使用すること、トランザクションのコミット漏れや長時間トランザクション、コネクション数のケア、Postgresのデッドタプル、オートバキューム実行ログのチェックなどがポイントだったように思う。
0 件のコメント:
コメントを投稿