ストレージに Berkeley-DB データベースを使用する単純なマルチスレッド Java アプリケーションを実行しています。約 500 のスレッドがあり、各スレッドには独自の Berkeley-DB データベースがあり、各データベースは約 100K の値とキーのペアです。すべてのデータベースはトランザクションであり、各トランザクションには最大約 1000 の操作があります。長時間実行されるトランザクションはありません。
問題は、アプリケーションの再起動時に、Berkeley-DB のリカバリに非常に長い時間がかかる場合があることです。リカバリ中 (環境を開く) に、Java プロセスが約 100MB/秒の速度でディスクから読み取りを行っていることがわかります。書き込みはありません - 読むだけです。
セットアップは次のようになります。
je.env.runCheckpointer=true
je.env.runCleaner=true
je.checkpointer.highPriority=true
je.cleaner.threads=256
je.cleaner.maxBatchFiles=10
je.log.checksumRead=false
je.lock.nLockTables=353
je.maxMemory=16106127360
je.log.nDataDirectories=256
また、チェックポイントを 15 分ごとに手動で実行してみました (チェックポイントが停止するなどの可能性があると想定しています)。も設定してsetMinimizeRecoveryTime(true)
います。しかし、助けはありません。
Java または Berkeley DB の設定に問題があると思われます。
データベースへの書き込み速度を犠牲にしながら、回復時間を短縮する方法はありますか?