Содержимое таблицы Cassandra Mem

В файле cassandra yaml есть конфигурация размера кучи таблицы памяти. Допустим, это 2 ГБ... теперь, если порог очистки составляет 33%.. затем после того, как 675 МБ пространства таблицы памяти будет занято.. cassandra очистит самую большую таблицу памяти на диск. Мой вопрос заключается в том, что cassandra делает с оставшимся пространством таблицы памяти, которое составляет 1373 МБ (2048-675).

По моему мнению, в любой момент времени данные в пространстве памяти не будут превышать 675 МБ, в тот момент, когда данные таблицы памяти превысят 675 МБ, самая большая таблица памяти будет сброшена на диск, а размер данных в пространстве таблицы памяти снова станет меньше 675 МБ. ...и этот процесс продолжается...тогда зачем нам выделять 2 Гб пространства для таблицы памяти...в чем причина этого...содержит ли таблица памяти dpace что-либо кроме таблицы памяти...


person Rupesh Mukherjee    schedule 13.08.2017    source источник


Ответы (1)


Сброс не является мгновенным и не останавливает поступление других записей. По сути, он создает новую «активную» memtable для записей и помещает предыдущую в очередь для сброса на диск (его все еще можно использовать для чтения до сброса). ). Таким образом, пространство, используемое в куче, определенно может превышать ваш threshold * space.

Это поведение отличается от более старых версий Cassandra, где она фактически блокировала запись до завершения сброса (tpstats показал, что это заблокировано в FlushWriter, что больше невозможно).

Поскольку размер memtables может продолжать расти во время очистки, существует предел отсечения (настройка memtable_heap_space_in_mb), при котором он фактически останавливает запись, чтобы предотвратить выход из-под контроля и возникновение исключений OutOfMemory. Этот параметр является скорее пределом, до которого он может быть увеличен, чем куском памяти, выделенным немедленно и зарезервированным для memtables.

Также обратите внимание, что memtable_cleanup_threshold устарел:

Расчет по умолчанию является единственным разумным выбором.

person Chris Lohfink    schedule 14.08.2017
comment
СУЩЕСТВУЮТ случаи использования, когда вы можете захотеть сбрасывать данные чаще, отказываясь от пропускной способности ради долговечности перед лицом задержки диска (особенно в средах, где происходят паузы диска, например, экземпляры AWS с поддержкой EBS). - person Jeff Jirsa; 15.08.2017
comment
Крис... большое спасибо за разъяснение... какой сейчас разумный выбор... какую логику использует cassandra 3x для сброса памяти - person Rupesh Mukherjee; 15.08.2017
comment
Я бы рекомендовал придерживаться значений по умолчанию, если нет причин поступать иначе. то есть, как упоминал Джефф при использовании EBS. Даже там я бы начал со значений по умолчанию и сначала провел некоторое тестирование под вашей собственной нагрузкой, прежде чем пытаться его настроить. Есть более низкие плоды с точки зрения настройки, на которые следует обратить внимание перед memtables. Убедитесь, что вы используете рекомендуемые настройки ядра (docs.datastax.com/en/ landing_page/doc/landing_page/) и сначала просмотрите настройки кучи JVM. - person Chris Lohfink; 15.08.2017