我们在每天有100亿条记录的复制环境中使用bdb je,并遇到了一些有关回收日志文件和删除保留的日志文件的问题。
如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可以清洗。
任何建议都会受到赞赏。