уменьшить количество сборщиков мусора в xodus? - PullRequest
0 голосов
/ 26 июня 2018

Есть ли способ уменьшить конфликт потоков с помощью сборщика мусора xodus?

Я пытался настроить реализацию, в которой я использую несколько сред для уменьшения конкуренции за записи, что в некоторой степени работает, однако, когда работает сборщик мусора, он все равно блокирует любой поток записи во ВСЕХ средах. .. Я вижу, что все мои потоки записи блокируются каждый раз, когда запускается сборщик мусора.

Разве сборщик мусора в xodus не собирает мусор для каждой среды?

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

Я попытался запустить с отключенным сборщиком мусора, но затем количество файлов довольно быстро сходит с ума, что вызывает другие проблемы.

1 Ответ

0 голосов
/ 10 июля 2018

GC Xodus запускается для каждой среды в одном потоке с именем «Общий очиститель фона Exodus». Каждый цикл GC может выполняться только для одной среды, поэтому сборка мусора для разных сред выполняется последовательно. Вот почему не должно быть никакого конфликта между средами. Кроме того, транзакции только для чтения не блокируют транзакции записи, в том числе транзакции GC.

Некоторые параметры конфигурации (см. EnvironmentConfig класс), которые могут влиять на время GC: * ​​1004 *

  • Попробуйте значение exodus.gc.minUtilization меньше 50, которое является значением по умолчанию. Этот параметр конфигурации устанавливает целевой процент «полезного пространства» в базе данных. Чем ниже значение, тем меньше нагрузка ГХ.
  • Попробуйте значение exodus.gc.transactionAcquireTimeout меньше 1000, которое является значением по умолчанию. Этот параметр конфигурации устанавливает количество миллисекунд, в течение которых GC пытается получить эксклюзивную транзакцию для восстановления данных. Более низкое значение уменьшает вероятность того, что GC будет активен во время пиковой нагрузки записи.
  • Попробуйте значение exodus.gc.transactionTimeout меньше 1000, которое является значением по умолчанию. Этот параметр конфигурации устанавливает количество миллисекунд, в течение которых GC восстанавливает данные в эксклюзивной транзакции, если GC удалось получить их.
  • Наконец, вы можете попытаться установить exodus.gc.useExclusiveTransaction=false, тогда GC всегда будет пытаться восстановить данные в оптимистическом цикле, но наши тесты показывают, что оптимистический цикл почти всегда работает хуже при высокой нагрузке.
...