Текущие выполняемые запросы и статистика по запросу

Существует ли какой-то механизм посмотреть текущее выполнение запросов в режиме онлайн. например в mysql processlist
и можно как то посмотреть статистику по выполнению запроса? т.е. выявить в каком месте имеется проблема.

Имеется база с 80 млн строками. разбито на 8 шардов. все это работает на 5 нодах в одном кластере.
в основном запросы выполняются моментально но иногда возникает заторможенность и с интервалом 1-5 мин появляется задержка в 10-50 запросов которые выполняются 1-2 сек
на текущий момент мантикора обрабатывает порядка 300 запросов в сек.

Пробовал настроить распределенный индекс. обещали огромную производительность. но к сожалению получил наоборот огромное снижение производительности. в место 0,1 сек запросы работали по 0,5-0,8 сек

В общем вопрос, существуют ли какие то методы анализа запроса?

Существует ли какой-то механизм посмотреть текущее выполнение запросов в режиме онлайн

Да, есть SHOW THREADS - Manticore Search Manual

и можно как то посмотреть статистику по выполнению запроса? т.е. выявить в каком месте имеется проблема.

Manticore Search Manual , но выводы будет сделать сложно. Легче модифицировать запрос итеративно, отрезая от него какие-то части, пока он не станет быстрым. Тогда будет понятно что именно делает его тяжёлым.

Пробовал настроить распределенный индекс. обещали огромную производительность. но к сожалению получил наоборот огромное снижение производительности. в место 0,1 сек запросы работали по 0,5-0,8 сек

Так вы пишете “разбито на 8 шардов. все это работает на 5 нодах в одном кластере.”. Это без распределённого (distributed) индекса работает?

Спасибо за функционал, не знал. Вот смотрю и вижу что у меня на сервере создается до 35 потоков. на один запрос. это нормально? (количество ядер на сервере 36). И есть такой момент. иногда встречается что один и тот же запрос выполняется 0,01 сек а иногда 0,5 сек. причем имеются запросы и другие и они также подвисают до 0,5 сек.

работает все на основе локальных индексов. т.е. на каждой ноде создан составной индекс по локальным индексам 8 штукам.

Еще такой вопрос.
UPDATE ind1 SET type_id=30 WHERE id=601319959;
простой запрос на обновление данных одной записи. а вот время выполнения прыгает от 0,1 до 0,7 сек

Подскажите в какую сторону смотреть?
да и попробовал сделать профилирование запроса апдейта.
±----------±---------±---------±--------+
| Status | Duration | Switches | Percent |
±----------±---------±---------±--------+
| unknown | 0.569335 | 3 | 99.99 |
| sql_parse | 0.000049 | 1 | 0.01 |
| net_write | 0.000022 | 1 | 0.00 |
| total | 0.569406 | 5 | 0 |
±----------±---------±---------±--------+

unknown - что это может быть?

Да, это вероятно из-за т.н. псевдошардинга. Можете попробовать поиграться с опцией select’а threads или отключить псевдошардинг глобально (set global pseudo_sharding=0)

работает все на основе локальных индексов. т.е. на каждой ноде создан составной индекс по локальным индексам 8 штукам.

Простите, но я не понял когда было 0.1 сек, а когда стало 0.5

простой запрос на обновление данных одной записи. а вот время выполнения прыгает от 0,1 до 0,7 сек

Подскажите в какую сторону смотреть?

А какая у вас версия мантикоры?

Это повлияет на все индексы сразу? у меня не только эти 8 индексов но есть еще и другие.

0.1 сек когда составной индекс работает на локальных индексах
0.5 сек если составной индекс берет часть локальных и часть из других нод по ip адресам

при входе в мантикору в консоли пишет:
Server version: 5.0.0 b4cb7da@220518 release (columnar 1.15.4 2fef34e@220522) (secondary 1.15.4 2fef34e@220522) git branch HEAD (no branch)

Еще такой момент заметил. я делаю очень частные insert и update из разных скриптов и иногда возникает ситуация что количество insert штук 10 с одним полем. есть смысл сделать какой то буфер? т.е. добавляем в него сначала записи для вставки и только потом одним запросом добавляем сразу 10 элементов в индекс? Только вот что использовать в виде буфера пока не знаю. в кликхаусе есть специальная таблица буферная куда данные добавляются и в последствии вливаются в основную таблицу. В мантикоре случайно нет такого?

threads есть в виде опции поиска.

0.5 сек если составной индекс берет часть локальных и часть из других нод по ip адресам

Нужно смотреть тогда во все query log’и. Дистрибутивная таблица не может работать быстрее, чем самая медленная из таблицы, на которые она указывает.

т.е. добавляем в него сначала записи для вставки и только потом одним запросом добавляем сразу 10 элементов в индекс?

Да, есть. insert into ... values(1,2,3),(1,2,3). Как в mysql в общем. Такой же синтаксис. Буферной таблицы в самой мантикоре нет.