Собственные транспортные запросы в Cassandra

Я получил некоторые сведения о собственных транспортных запросах в Cassandra, используя эту ссылку: Что такое собственный транспорт запросы в Cassandra?

Насколько я понимаю, любой запрос, который я выполняю в Cassandra, является собственным транспортным запросом.

Я часто получаю сообщение об ошибке Время ожидания запроса истекло в Cassandra, и я наблюдал следующие журналы в журнале отладки Cassandra, а также при использовании nodetool tpstats

/var/log/cassandra# nodetool tpstats
Pool Name                    Active   Pending      Completed   Blocked  All time blocked
MutationStage                     0         0      186933949         0                 0
ViewMutationStage                 0         0              0         0                 0
ReadStage                         0         0      781880580         0                 0
RequestResponseStage              0         0        5783147         0                 0
ReadRepairStage                   0         0              0         0                 0
CounterMutationStage              0         0       14430168         0                 0
MiscStage                         0         0              0         0                 0
CompactionExecutor                0         0         366708         0                 0
MemtableReclaimMemory             0         0            788         0                 0
PendingRangeCalculator            0         0              1         0                 0
GossipStage                       0         0              0         0                 0
SecondaryIndexManagement          0         0              0         0                 0
HintsDispatcher                   0         0              0         0                 0
MigrationStage                    0         0              0         0                 0
MemtablePostFlush                 0         0            799         0                 0
ValidationExecutor                0         0              0         0                 0
Sampler                           0         0              0         0                 0
MemtableFlushWriter               0         0            788         0                 0
InternalResponseStage             0         0              0         0                 0
AntiEntropyStage                  0         0              0         0                 0
CacheCleanupExecutor              0         0              0         0                 0
Native-Transport-Requests         0         0      477629331         0           1063468

Message type           Dropped
READ                         0
RANGE_SLICE                  0
_TRACE                       0
HINT                         0
MUTATION                     0
COUNTER_MUTATION             0
BATCH_STORE                  0
BATCH_REMOVE                 0
REQUEST_RESPONSE             0
PAGED_RANGE                  0
READ_REPAIR                  0

1) Что такое состояние All time blocked?
2) Что означает это значение: 1063468? Насколько это вредно?
3) Как это настроить?


person Harry    schedule 20.05.2018    source источник
comment
какую именно версию вы используете?   -  person Chris Lohfink    schedule 20.05.2018
comment
@КрисЛоффинк 3.11.1   -  person Harry    schedule 20.05.2018


Ответы (1)


Каждый запрос обрабатывается этапом NTR перед передачей на этап чтения/мутации, но он по-прежнему блокируется в ожидании завершения. Чтобы предотвратить перегрузку, этап начинает блокировать задачи, добавляемые в его очередь, чтобы оказывать обратное давление на клиента. Каждый раз, когда запрос блокируется, счетчик all time blocked увеличивается. Таким образом, 1063468 запросов были когда-то заблокированы на некоторый период времени из-за резервного копирования многих запросов.

В ситуациях, когда приложение имеет всплески запросов, эта блокировка не нужна и может вызвать проблемы, поэтому вы можете увеличить этот предел очереди, например, -Dcassandra.max_queued_native_transport_requests=4096 (по умолчанию 128). Вы также можете регулировать запросы на стороне клиента, но сначала попробуйте увеличить размер очереди.

Также могут быть некоторые запросы, которые выполняются исключительно медленно и засоряют вашу систему. Если у вас есть настройка мониторинга, обратите внимание на задержки координатора чтения/записи с высоким процентилем. Вы также можете использовать nodetool proxyhistograms. В вашей модели данных или запросах может быть что-то, что вызывает проблемы.

person Chris Lohfink    schedule 20.05.2018
comment
Спасибо за ответ. У меня все еще есть несколько вопросов: 1) Почему это значение (все время заблокировано) не уменьшается? 2) Нужно ли устанавливать этот параметр -Dcassandra.max_queued_native_transport_requests=4096 в опциях jvm? 3) Я использую Apache Cassandra. Не могли бы вы указать мне на настройку инструмента мониторинга, доступную для Apache Cassandra? - person Harry; 20.05.2018
comment
Также вы думаете, что это может вызвать RequestTime Out? - person Harry; 20.05.2018
comment
Каково оптимальное значение для этого: cassandra.max_queued_native_transport_requests - person Harry; 20.05.2018
comment
Все время блокировки — это показатель того, сколько задач было заблокировано с момента последнего запуска Cassandra, уменьшать его не имеет смысла. Вам не нужно, но это может помочь. Это может быть частью причины тайм-аута запроса, но неправильный запрос/таблица также может быть причиной его блокировки. Посмотрите на прокси-гистограммы и табличные гистограммы, чтобы найти таблицу с медленными запросами и выполнить отладку оттуда. Оптимальное значение: зависит от того, было ли бы одно оптимальное значение, оно было бы установлено на него. Это зависит от варианта использования и модели данных. - person Chris Lohfink; 21.05.2018