2012-02-14 3 views
3

Мы запускаем redis и делаем сотни шагов в секунду ключей в отсортированном наборе и в то же время делаем тысячи чтений на отсортированном наборе каждую секунду.Производительность процессора Redis на отсортированных наборах

Это, похоже, работает хорошо, но при пиковой нагрузке процессор становится довольно высоким, 80% от одного ядра. Сортированный набор сам по себе является небольшим объемом памяти в несколько тысяч ключей.

- это увеличение использования процессора, вероятно, из-за сотен шагов в секунду или тысяч чтений? понимать как эффективность удара, но и оказывает большее влияние?

Учитывая это, некоторые из лучших показателей для мониторинга на моем экземпляре производства, чтобы просмотреть эти узкие места?

ответ

2

Одно очко для проверки - достаточно ли сортированные наборы для сериализации Redis или нет. Например, «объект отладки» можно применить к образцу отсортированных наборов, чтобы проверить, закодированы ли они как ziplist или нет.

ziplist использует торговую память против процессора, особенно если размер отсортированного набора близок к порогу (zset-max-ziplist-entries, zset-max-ziplist-value, в файле конфигурации).

Предположим, что отсортированные наборы не кодируются ziplist, я бы сказал, что использование ЦП, вероятно, связано с тысячами чтений в секунду, а не сотнями обновлений в секунду. Обновление zset - это операция log (n). Это очень быстро, и с Redis нет блокировки, связанной с задержкой. Чтение элементов zset - это операция O (n) и может привести к созданию большого буфера и возврату клиенту.

Конечно, вы можете создать трафик только для чтения, проверить CPU, затем остановить его, создать трафик обновления, снова проверить CPU и сравнить его.

Производительность операций чтения zset должна быть близка к производительности LRANGE, которую вы можете найти в Redis benchmark. Несколько тысяч TPS для zsets с тысячей предметов, похоже, соответствуют типичной работе Redis.

Смежные вопросы