Почему счетчик не используется после увеличения размера? - PullRequest
1 голос
/ 07 июня 2019

Мое приложение Cassandra предполагает в основном счетчик записи и чтения.Таким образом, наличие счетчика кэша важно для производительности.Я увеличил размер кэша счетчика в cassandra.yaml с 1000 до 3500 и сделал перезапуск службы cassandra.Результаты оказались не такими, как я ожидал.Использование диска возросло, пропускная способность снизилась, и кажется, что кеш счетчика вообще не используется, в зависимости от того, что я вижу в информации об nodetool (см. Ниже).Прошло уже почти два часа, а производительность все еще очень плохая.

Я видел эту же модель вчера, когда я увеличил кэш счетчика с 0 до 1000. Это продолжалось довольно долго без использования кэша счетчика вообще, а затем дляпо какой-то причине он начал использовать его.У меня вопрос, есть ли что-то, что мне нужно сделать, чтобы активировать использование кэша счетчика?

Вот мои настройки в cassandra.yaml для кэша счетчика:

counter_cache_size_in_mb: 3500
counter_cache_save_period: 7200
counter_cache_keys_to_save: (currently left unset)

Вот что я получаюинформации о nodetool примерно через 90 минут:

Gossip active          : true
Thrift active          : false
Native Transport active: false
Load                   : 1.64 TiB
Generation No          : 1559914322
Uptime (seconds)       : 6869
Heap Memory (MB)       : 15796.00 / 20480.00
Off Heap Memory (MB)   : 1265.64
Data Center            : WDC07
Rack                   : R10
Exceptions             : 0
Key Cache              : entries 1345871, size 1.79 GiB, capacity 1.95 GiB, 67936405 hits, 83407954 requests, 0.815 recent hit rate, 14400 save period in seconds
Row Cache              : entries 0, size 0 bytes, capacity 0 bytes, 0 hits, 0 requests, NaN recent hit rate, 0 save period in seconds
Counter Cache          : entries 5294462, size 778.34 MiB, capacity 3.42 GiB, 0 hits, 0 requests, NaN recent hit rate, 7200 save period in seconds
Chunk Cache            : entries 24064, size 1.47 GiB, capacity 1.47 GiB, 65602315 misses, 83689310 requests, 0.216 recent hit rate, 3968.677 microseconds miss latency
Percent Repaired       : 8.561186035383143%
Token                  : (invoke with -T/--tokens to see all 256 tokens)

Вот информация о nodetool в Counter Cache до увеличения размера:

Counter Cache          : entries 6802239, size 1000 MiB, capacity 1000 MiB,
                         57154988 hits, 435820358 requests, 0.131 recent hit rate,
                         7200 save period in seconds

Обновление: я работал уже несколько днейсейчас пробуем разные значения счетчика размера кэша на разных узлах.Постоянно, что кэш счетчика не включен, пока не достигнет своей емкости.Вот как это работает, насколько я могу судить.Если кто-нибудь знает способ включить кэш до его заполнения, дайте мне знать.Я устанавливаю его очень высоко, потому что он кажется оптимальным, но это означает, что кэш не работает в течение нескольких часов, пока он заполнен, и пока он не работает, мои диски абсолютно перегружены запросами на чтение ...

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

Последнее обновление: когда кэш счетчика заполняется, собственный транспорт также отключен для узла.Установка счетчика на 3,5 ГБ Сейчас я собираюсь работать 24 часа с узлом в этом состоянии низкой производительности с отключенным собственным транспортом.

1 Ответ

0 голосов
/ 14 июня 2019

Я нашел способ 100% времени избегать отключения кэша счетчика и отключения собственного режима транспорта.Этот подход позволяет избежать серьезных проблем с производительностью, с которыми я столкнулся в ожидании включения кэша счетчика (иногда в моем случае это может занять несколько часов, так как я хочу иметь большой кэш счетчика): 1. Перед запуском Cassandra установите для поля файла cassandra.yaml counter_cache_size_in_mb значение 0 2.После запуска и запуска и запуска cassandra используйте команды инструмента узла для установки размеров кэша: Пример команды: nodetool setcachecapacity 2000 0 1000

В этом примере первое значение 2000 устанавливает размер кэша ключа, второезначение 0 - это размер кэша строк, а третье значение 1000 - это размер кэша счетчика.

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

Дополнительные сведения: Некоторые вещи не работают: Установка значения counter_cache_size_in_mb, если кэш счетчика еще не включен.Это тот случай, когда вы запустили Cassandra с ненулевым значением в counter_cache_size_in_mb в Cassandra.yaml, и вы еще не достигли этого порога размера.Если вы сделаете это, кэш счетчика никогда не будет включен.Просто не делай этого.Я бы назвал это дефектом, но сейчас так все и работает.Тестирование, которое я сделал: я тестировал это на пяти отдельных узлах несколько раз с несколькими значениями.И первоначально, когда Кассандра только подходит, и через некоторое время.Этот метод, который я описал, работал в каждом случае.Полагаю, мне следовало сохранить несколько скриншотов с информацией об nodetool, чтобы показать результаты.

И последнее: если разработчики Cassandra наблюдают за этим, не могли бы они подумать над настройкой кода, чтобы этот обходной путь не был необходим?

...