Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / NoSQL, Big Data Новый топик    Ответить
 Поиск блокирующих запросов в Монго  [new]
Eleanor
Member

Откуда:
Сообщений: 3049
Добрый вечер,

Подскажите, пожалуйста, как искать запрос, который привел к очередям?
У меня периодически на произвольной шарде Монго 2.6, возникает очередь из нескольких сотен запросов. Очередь сама рассасывается за 1-2 часа.

Может, у кого-нибудь есть удобные скрипты? Потому что с таким количеством запросов простой db.currentOp() не слишком нагляден.
Конкретного блокирующего запроса не вижу, т.к. текущий выполняющийся запрос непрерывно меняется.

Убивание десятка самых длинных не помогает. Вручную от очереди можно избавиться через более масштабные жертвы.
23 ноя 15, 18:11    [18461112]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28173
Eleanor, хм, как-то ручками писали bash скрипт, складывающий вывод db.currentOp() в лог.
Потом этот лог через mongoimport загрузил в отдельную коллекцию, проанализировал, используя aggregation framework и построил необходимые идексы.

Вы бы уточнили очередь на что у Вас? На запись, чтение? Чем смотрите, mongostat?

А вообще есть плагин для zabbix для мониторинга.
23 ноя 15, 18:25    [18461167]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28173
И на 3.0 переходите, там collection-level locking в MMAPv1.
23 ноя 15, 18:27    [18461173]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28173
А вообще можно профилирование медленных запросов включить: db.setProfilingLevel().
И получить всё тоже самое, что и при выполнение db.currentOp() только в коллеции system.profile.

Мне этого тогда не дали сделать на проде, поэтому писали bash скрипт.

Также запросы дольше 100мс должны в лог падать.
23 ноя 15, 18:40    [18461225]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28173
Real-time Profiling a MongoDB Sharded Cluster
23 ноя 15, 18:43    [18461233]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
Eleanor
Member

Откуда:
Сообщений: 3049
skyANA,

Спасибо за подсказку с mongostat. С mms про него забыла.
Получилось убивать запросы по одному и смотреть на уменьшение очереди (на чтение).

Оказались виноваты несколько курсоров.

Теперь буду обновляться до 2.6.11, чтобы вместо getmore увидеть настоящий текст запроса.
На 3.0 пока не получится - переход запланирован после НГ. И 3.0 тут не поможет, все блокировки возникают на одной коллекции.
23 ноя 15, 21:38    [18461792]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28173
Eleanor
На 3.0 пока не получится - переход запланирован после НГ. И 3.0 тут не поможет, все блокировки возникают на одной коллекции.
Если перейдёте ещё и на WiredTiger, то получите document level concurrency control :)
24 ноя 15, 09:44    [18462632]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
Eleanor
Member

Откуда:
Сообщений: 3049
skyANA,
а вы на WT уже перешли? проблемы были?

Первый раз тестировала переход на WT почти год назад.
После 2 Тб скорость процесса конвертации упала практически до нуля, почти никаких подвижек за неделю.

Ладно, согласовали на будущее разбиение данных на маленькие базы. Стала оценивать степень сжатия на маленькой базе.
Со Snappy всё было отлично. А zlib показал, что при попытке сжатия возникло 300 тыс ошибок.
Доверия WT не вызывает.
24 ноя 15, 13:48    [18464432]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28173
Eleanor, пока нет, 3.2 будем ждать :)

А вот в Parse уже перешли на MongoDB + RocksDB
25 ноя 15, 08:43    [18468750]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
Eleanor
Member

Откуда:
Сообщений: 3049
Итого:
Оказалось, столкнулась с багом https://jira.mongodb.org/browse/SERVER-13866
Запросы берут не тот индекс.
Раньше брался индекс, поиск по которому занимает 0.01 сек, а теперь тот, по которому час.
Причем, при запуске запросов вручную берется правильный индекс.
27 ноя 15, 15:19    [18482114]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28173
Eleanor, в planSummary же видно какой индекс использовался. И в логе и в currentOp.

А запросы в ручную при такой же нагрузке выполнялись?
27 ноя 15, 16:38    [18482557]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28173
На тех же данных?
27 ноя 15, 16:39    [18482559]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
Eleanor
Member

Откуда:
Сообщений: 3049
skyANA,

индекс смотрела в planSummary:

периодически несколько десятков запросов вместо индекса с почти уникальным полем выбирают индекс, у которого надо проверить 10 млн записей.
Это происходит только на одной из шард. Запрос scatter/gather. Другая шарда берет уникальный индекс.

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

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

Буду пробовать:
- явно сделать индекс уникальным... сижу удаляю дубли.
- хэшированный индекс, т.к. поисковое поле достаточно широкое
- hint на стороне клиента, чего не хотелось бы
27 ноя 15, 20:43    [18483621]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
DrGonzo
Member

Откуда: ex-IBM
Сообщений: 191
Eleanor,

Есть еще вот такая штука - https://docs.mongodb.org/manual/reference/command/planCacheSetFilter/#dbcmd.planCacheSetFilter
4 дек 15, 00:57    [18511535]     Ответить | Цитировать Сообщить модератору
 Re: Поиск блокирующих запросов в Монго  [new]
Eleanor
Member

Откуда:
Сообщений: 3049
В итоге пришлось на клиенте делать постоянный hint, и, пока не прошло обновление, использовать фильтр на стороне Монго.
Хэшированный индекс, не смотря на то, что он в 2 раза меньше обычного, вообще не используется. Запросы с ним работают на несколько процентов медленнее.
8 дек 15, 17:10    [18531265]     Ответить | Цитировать Сообщить модератору
Все форумы / NoSQL, Big Data Ответить