0

We have an application that writes lots of data in a Xodus database. It actually writes so much data that the garbage collector cannot keep up with freeing old files.

My question therefor is, are there any recommended settings for "maximum GC", or is there a way to force Xodus to "stop" (disallow writes) and do a full garbage collection at some point during the night?

Edit (requested information)

Non-default settings:

  • GcFilesDeletionDelay = 0
  • GcMinUtilization = 75
  • GcRunEvery = 1 (for testing)
  • GcRunPeriod = 1 (for testing)
  • GcTransactionAcquireTimeout = 1000
  • GcTransactionTimeout up to 120000 (for testing)
  • Fiddling with these settings has not increased GC throughput in a relevant way

What we do:

  • We have a single import thread that writes exclusively to an environment store. Data is written permanently throughout the day.
  • There are many parallel threads that read the data using read only transactions.
  • The data basically is measurement data in the form (location, values...)
  • 50% of values get updated every day
  • There are roughly 8 million records in the database, the database currently has 122 GB on disk with 75% free space (as printed by the GC)
  • The VM has 20 GB of RAM, the environment store may use up to 25%
Jochen
  • 7,270
  • 5
  • 24
  • 32
  • Try setting `EnvironmentConfig.setGcTransactionTimeout()` with 1000, 1500, 2000 ms. Would have any affect? Please provide more details on what the written data is, are writes performed in parallel, are exclusive txns used. etc. Also, please list all non-default settings. – Vyacheslav Lukianov Aug 24 '21 at 18:48
  • Which API do you use, Environments or EntityStores? As for parallel read-only transactions, are they long-living? – Vyacheslav Lukianov Aug 25 '21 at 16:18
  • We use Environments, the read only transactions are short lived – Jochen Aug 25 '21 at 16:18

0 Answers0