Существует ли какой-то механизм посмотреть текущее выполнение запросов в режиме онлайн. например в mysql processlist
и можно как то посмотреть статистику по выполнению запроса? т.е. выявить в каком месте имеется проблема.
Имеется база с 80 млн строками. разбито на 8 шардов. все это работает на 5 нодах в одном кластере.
в основном запросы выполняются моментально но иногда возникает заторможенность и с интервалом 1-5 мин появляется задержка в 10-50 запросов которые выполняются 1-2 сек
на текущий момент мантикора обрабатывает порядка 300 запросов в сек.
Пробовал настроить распределенный индекс. обещали огромную производительность. но к сожалению получил наоборот огромное снижение производительности. в место 0,1 сек запросы работали по 0,5-0,8 сек
В общем вопрос, существуют ли какие то методы анализа запроса?
и можно как то посмотреть статистику по выполнению запроса? т.е. выявить в каком месте имеется проблема.
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 |
±----------±---------±---------±--------+
Да, это вероятно из-за т.н. псевдошардинга. Можете попробовать поиграться с опцией 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 элементов в индекс? Только вот что использовать в виде буфера пока не знаю. в кликхаусе есть специальная таблица буферная куда данные добавляются и в последствии вливаются в основную таблицу. В мантикоре случайно нет такого?