This forum has been archived. Please start a new discussion on GitHub.

Is Evictor's DbEnvCheckpoint thread nessary?

I find the DbEnvCheckpoint thread caused the process wasting so much cpu's iowait even to 50% every 2 miniutes(default), this badly decreases the process's performance. I want to know If I can set DbEnvCheckpointPeriod as zero to disable the checking thread? Is there and bad affecting if I do this?


  • matthew
    matthew NL, Canada
    Yes, disabling this would not be a good idea. The checkpointing writes a "well known place" in the transaction log file. This transaction log file is used to reconstruct the state of the database in the event of a failure (such as OS crash, or application crash). This is known as database recovery.

    Since all information is needed from the last checkpoint to recover, if you never checkpoint you cannot remove any of the transaction logs. This means for a long running application you'll have very large transaction logs. In addition, it means that recovery will take a very very long time since there will be a huge number of transactions to replay.
  • Thanks for your reply!

    I have set DBEnv CheckpointPeriod as 600(10 minutes), and PeriodicCheckpointMinSize as 1024k. This improves the application's performance, and decreases cpu's iowait a bit. But when doing TXN checking, iowait is still 30%-50% and last about 10 seconds. This looks not very graceful. Can you give me any suggest about tuning this? My application is using Evitor to store a lot of objects that may be modified frequently, so the Evictor's saving thread is always busy saving modified objects. I set SavePeriod as 3 minutes, SaveSizeTrigger as 100. Thanks!