COSMOS WIKI
April 22, 2022

COSMOS - test pruning на примере Archway

Pruning - позволяет настроить оптимизацию сохранения базы данных и напрямую влияет на заполнение жесткого диска

На просторах интернета очень мало информации о прунинге (pruning) в экосистеме Cosmos и о том, какие оптимальные настройки желательно использовать в той или иной ситуации. Сразу скажу, что оптимальных конфигураций не существует и все будет зависеть от той или иной цели. В тестовых сетях многие стараются брать недорогие VPS, чтобы сэкономить и это часто играет с ними злую шутку при заполнении жесткого диска. Для решения этой проблемы как один из вариантов можно использовать настройку прунинг

Дополнительно о прунинге и других возможностях уменьшения занимаемого места на жестком диске можно почитать здесь https://teletype.in/@lesnik13utsa/KEtJJuOrj3e

Мною было решено провести тест прунинга в тестовой сети Archway и хотя бы немного понять как те или иные настройки будут влиять на заполняемость жесткого диска

Для теста было решено использовать 5 серверов CPX31 на Hetzner и установить на них тестовую ноду Archway (тестовая сеть torii-1) используя этот гайд. На всех серверах будет установлено одинаковое ПО и одинаковые настройки - разница будет только в настройках прунинга. Тест рассчитан на 24 часа по прошествии которых мы поймем насколько действенный может быть прунинг и стоит ли его использовать?

CPX31 имеет следующие характеристики 4 VCPU/8 RAM/160GB. В процессе тестирования будет произведено несколько замеров - замеры занятого диска сразу после синхронизации, через 1 час после синхронизации, через 12 часов после синхронизации и через 24 часа после синхронизации. Возможны небольшие отклонения из-за того, что сервера с небольшой разницей будут начинать синхронизацию и VPS сами по себе могут отличаться в производительности

Настройки прунинга

  • Server 1 - default
  • Server 2 - 100/0/10
  • Server 3 - 100/0/50
  • Server 4 - 100/1000/10
  • Server 5 - 100/5000/10

Объем занятого места после синхронизации

  • Server 1 - 80.98 GB
  • Server 2 - 38.43 GB
  • Server 3 - 38.29 GB
  • Server 4 - 41.09 GB
  • Server 5 - 41.76 GB

Объем занятого места через 1 час

  • Server 1 - 81.92 GB (c момента синхронизации жд заполнился на 0,94 GB)
  • Server 2 - 39.04 GB (c момента синхронизации жд заполнился на 0,61 GB)
  • Server 3 - 38.90 GB (c момента синхронизации жд заполнился на 0,61 GB)
  • Server 4 - 41.62 GB (c момента синхронизации жд заполнился на 0,53 GB)
  • Server 5 - 42.50 GB (c момента синхронизации жд заполнился на 0,74 GB)

Объем занятого места через 12 часов

  • Server 1 - 86.22 GB (c момента синхронизации жд заполнился на 5,24 GB)
  • Server 2 - 40.35 GB (c момента синхронизации жд заполнился на 1,92 GB)
  • Server 3 - 40.15 GB (c момента синхронизации жд заполнился на 1,86 GB)
  • Server 4 - 43.49 GB (c момента синхронизации жд заполнился на 2,4 GB)
  • Server 5 - 44.13 GB (c момента синхронизации жд заполнился на 2,37 GB)

Объем занятого места через 24 часа

  • Server 1 - 90.41 GB (c момента синхронизации жд заполнился на 9.43 GB)
  • Server 2 - 41.27 GB (c момента синхронизации жд заполнился на 2.84 GB)
  • Server 3 - 41.09 GB (c момента синхронизации жд заполнился на 2.8 GB)
  • Server 4 - 44.61 GB (c момента синхронизации жд заполнился на 3.52 GB)
  • Server 5 - 45.24 GB (c момента синхронизации жд заполнился на 3.48 GB)

Подводя итог можно сделать вывод, что установка пользовательского прунинга способна как минимум вдвое уменьшить размеры базы данных. Конечно к любым измениям необходимо подходить осторожно и последовательно, внимательно вникая в детали. Так:

  • настраивать Pruning необходимо перед стартом ноды при пустой папке Data, либо после unsafe-reset-all
  • если устанавливаются снэпшоты, то число в snapshot-interval должно быть кратно pruning-keep-every
  • Параметр pruning-keep-every возможно будет убран в ближайшее время

Для изменения прунинга достаточно воспользоваться командой, предварительно изменив ее под нужный проект

pruning="custom" && \
pruning_keep_recent="100" && \
pruning_keep_every="5000" && \
pruning_interval="10" && \
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.archway/config/app.toml && \
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.archway/config/app.toml && \
sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.archway/config/app.toml && \
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.archway/config/app.toml