BDB JE, ​​как удалить зарезервированные файлы журнала вручную - PullRequest
0 голосов
/ 14 ноября 2018

мы используем bdb je в реплицируемых средах с 10 миллиардами записей в день и столкнулись с некоторой проблемой, связанной с восстановлением файлов журнала и удалением зарезервированных файлов журнала.

Как описано в Getting Started with High Availability Applications:

"В реплицируемых средах JE как можно дольше удерживает файлы журналов, если они необходимы для обновления реплики. Файлы журналов, которые были очищены, но затем сохранены из-за репликации, находятся в зарезервированном состоянии. Все такие файлы сохраняются до тех пор, пока не будут превышены пороги использования диска, определенные в EnvironmentConfig.MAX_DISK и EnvironmentConfig.FREE_DISK. В этот момент JE удаляет зарезервированные файлы журнала. "

В нашем проекте операции записи иногда быстро увеличиваются. И если пороги использования диска приближаются, реплицируемая среда выдает исключение DiskLimitException, и операции записи запрещены, поскольку скорость удаления файла не может соответствовать скорости записи данных. Поэтому я действительно хочу знать, есть ли способ удалить зарезервированные файлы вручную, а не зависеть от порогов использования диска.

мы используем je.properties для настройки среды высокой доступности, а содержимое выглядит так:

    je.log.fileMax=1073741824
    je.lock.timeout=3000000
    je.sharedCache=true
    je.maxMemoryPercent=50
    je.rep.txnRollbackLimit=1000
    je.rep.replicaReceiveBufferSize=4194304
    je.rep.feederBatchNs=10000000
    je.rep.feederBatchBuffKb=256
    je.rep.commitToNetwork=false
    je.rep.replicaMessageQueueSize=10000
    je.rep.insufficientReplicasTimeout=5000 ms
    je.rep.replicaAckTimeout=10000 ms
    je.cleaner.minUtilization=50
    je.rep.replayFreeDiskPercent=50
    je.env.runCleaner=false
    je.rep.designatedPrimary=false
    je.env.backgroundReadLimit=20
    je.cleaner.readSize=33554432
    je.cleaner.detailMaxMemoryPercentage=5
    je.cleaner.lookAheadCacheSize=32768

В нашем проекте мы используем ReplicatedEnvironment.cleanLogFile (), указывающий je на очистку файла, и используем ReplicatedEnvironment.removeDatabase (null, "persist #" + storeName + "# com.sleepycat.persist.formats") для объявления одного EntityStore. можно почистить.

Будем благодарны за любые советы.

...