ALTER и рост worker приводящий к зависанию Manticore

Добрый день!
Версия: 6.2.12
1 node не в режиме cluster (был ранее в cluster, но отключили из-за падений и выхода node из cluster).

Есть следующий индекс:

CREATE TABLE IF NOT EXISTS products(
   id int, -- Идентификатор товара
   name text stored, -- Название товара
   slug text stored, -- Slug для товара
   image string, -- Обложка (основное изображение товара) - относительная ссылка

   price_retail float, -- Розничная цена товара
   price_discounted_for_guest float, -- Цена со скидкой для неавторизованного
   price_discount_percent_for_guest float, -- Процент скидки для неавторизованного
   price_discounted_for_authorized float, -- Цена со скидкой для авторизованного
   price_discount_percent_for_authorized float, -- Процент скидки для авторизованного
   price_discounted_for_subscriber float, -- Цена со скидкой для подписчика
   price_discount_percent_for_subscriber float, -- Процент скидки для подписчика

   marketing_status_list multi, -- Список маркетинговых статусов: «Новинка», «Бестселлер», «Рекомендуем», «Эксклюзив», «Распродажа»

   availability_status int, -- Признак доступности товара (наличие/предзаказ/информационная)
   availability_quantity int, -- Количество доступное для покупки

   vendor_id int, -- Идентификатор вендора (как сущность не существует - только для сервиса скидок)
   nds int, -- НДС, %

   description text stored, -- Описание товара
   reasons_to_buy text stored, -- 3 причины купить

   literature_work_publishing_year int, -- Год издания произведения
   preorder_available_at timestamp, -- Дата предзаказа
   released_at timestamp, -- Дата релиза

   isbns string, -- Список ISBN, разделенных запятой

   printing_page_count int, -- Количество страниц в книге
   printing_page_format string, -- Размер/формат книги
   printing_copy_count int, -- Тираж (количество копий книги)

   weight int, -- Вес в граммах
   height int, -- Высота в мм
   width int, -- Ширина в мм
   length int, -- Длина (толщина) в мм

   excerpts json, -- Отрывки книги (упорядоченный список объектов, поля: тип файла, относительная ссылка)
   additional_images text stored, -- Дополнительные изображения товара (упорядоченные относительные ссылки через запятую)

   rating_average float, -- Общая пользовательская оценка
   rating_weight int, -- Расчетное значение для сортировки "С высокой оценкой"
   rating_star int, -- Пользовательская оценка в "звездочках"
   rating_count int, -- Количество оценок
   review_count int, -- Количество отзывов

   purchase_stats_week_count int, -- Количество продаж за неделю
   purchase_stats_month_count int, -- Количество продаж за месяц
   purchase_stats_year_count int, -- Количество продаж за год
   purchase_stats_day_avg_count int, -- Среднее количество продаж за день в последние 180 дней (умноженное на 1000)

   is_school_prepare bool, -- Флаг «Подготовка к школе»
   is_out_of_class_reading bool, -- Флаг «Внеклассное чтение»
   school_education_system_id int, -- Идентификатор системы обучения (ссылка на school_attribute_values)
   school_umk_id int, -- Идентификатор УМК - учебно-методического комплекса (ссылка на school_attribute_values)
   school_umk_title text indexed stored, -- УМК (например, География. «Классическая линия» (5-9))
   school_grade_id_list multi, -- Список идентификаторов классов (ссылка на school_attribute_values)
   school_subject_id_list multi, -- Список идентификаторов предмета (ссылка на school_attribute_values)
   school_material_type_id_list multi, -- Список идентификаторов типа материала
   school_exam_id_list multi, -- Список идентификаторов экзаменов (ссылка на school_attribute_values)
   school_exam_year_id int, -- Идентификатор года экзамена (ссылка на school_attribute_values)

   seo_title string, -- Заголовок страницы для SEO
   seo_description text stored, -- Описание страницы для SEO

   main_category_id_list multi, -- Список идентификаторов основных категорий товара для построения ХК - всех, начиная с исходной (ссылка на categories)
   category_id_list multi, -- Список идентификаторов категорий товара для фильтрации - всех, начиная с исходной (ссылка на categories)
   tbk_id_list multi, -- Список идентификаторов ТБК - всех, начиная с исходной (ссылка на tbk)
   ekn_id_list multi, -- Список идентификаторов ЕКН - всех, начиная с исходной (ссылка на ekn)

   author_id_list multi, -- Список идентификаторов авторов (ссылка на persons)
   translator_id_list multi, -- Список идентификаторов переводчиков (ссылка на persons)
   illustrator_id_list multi, -- Список идентификаторов иллюстраторов (ссылка на persons)

   publisher_series_id int, -- Идентификатор серии (ссылка на publisher_series)
   publisher_id int, -- Идентификатор издательства (ссылка на publishers)
   publisher_brand_id int, -- Идентификатор издательского брэнда (ссылка на publisher_brands)
   manufacturer_id int, -- Идентификатор производителя (ссылка на publishers)
   manufacturer_brand_id int, -- Идентификатор брэнда производителя (ссылка на publisher_brands)

   literature_work_cycle_id int, -- Идентификатор книжного цикла (ссылка на literature_work_cycles)
   literature_work_cycle_volume_id int, -- Идентификатор тома книжного цикла (ссылка на literature_work_cycle_volumes)
   age_restriction bigint, -- Возрастное ограничение - прямо значение в годах (bigint т.к. int не умеет в отрицательные числа)
   binding_id int, -- Идентификатор типа переплета (ссылка на bindings)
   tag_id_list multi, -- Список идентификаторов тегов/подборок (ссылка на tags)

   product_set_id_list multi, -- Связь с наборами товаров
   relations_set text indexed stored, -- Связь с наборами товаров - одно поле полнотекстовое куда через пробел кидать uuid набора

   author_full_name_list text indexed stored, -- Список полных имем авторов (для фильтрации подсказок фасета)
   publisher_series_name text indexed stored, -- Название книжной серии (для фильтрации подсказок фасета)
   publisher_name text indexed stored, -- Название издательства (для фильтрации подсказок фасета)
   publisher_brand_name text indexed stored, -- Название издательского бренда (для фильтрации подсказок фасета)
   manufacturer_name text indexed stored, -- Название производителя (для фильтрации подсказок фасета)
   manufacturer_brand_name text indexed stored, -- Название брэнда производителя (для фильтрации подсказок фасета)

   product_type_id int, -- Идентификатор типа продукта
   article_number_id int, -- Идентификатор артикула продукта

   stationery_format_id int, -- Идентификатор формата (для канцелярских товаров)
   stationery_line_type_id int, -- Идентификатор вида линовки (для канцелярских товаров)
   stationery_ink_color_id int, -- Идентификатор цвета чернил (для канцелярских товаров)
   stationery_lead_diameter_id int, -- Идентификатор диаметра грифеля (для канцелярских товаров)
   stationery_case_shape_id int, -- Идентификатор формы корпуса (для канцелярских товаров)
   stationery_mechanism_type_id int, -- Идентификатор типа механизма (для канцелярских товаров)
   stationery_diameter_id int, -- Идентификатор диаметра (для канцелярских товаров)
   stationery_feature_id int, -- Идентификатор особенности (для канцелярских товаров)
   stationery_colors_quantity_id int, -- Идентификатор количества цветов (для канцелярских товаров)
   stationery_gender_id int, -- Идентификатор гендерного признака (для канцелярских товаров)
   stationery_length_id int, -- Идентификатор длины (для канцелярских товаров)
   stationery_staple_number_id int, -- Идентификатор № скоб (для канцелярских товаров)
   stationery_stapler_number_id int, -- Идентификатор № степлера (для канцелярских товаров)
   stationery_material_id int, -- Идентификатор материала (для канцелярских товаров)
   stationery_punched_sheets_quantity_id int, -- Идентификатор количества пробиваемых листов (для канцелярских товаров)
   stationery_brush_shape_id_list multi, -- Список идентификаторов форм кисти (для канцелярских товаров)
   stationery_brush_material_id_list multi, -- Список идентификаторов материалов кисти (для канцелярских товаров)
   stationery_brush_number_id_list multi, -- Список идентификаторов номеров кисти (для канцелярских товаров)
   stationery_painting_technique_id_list multi, -- Список идентификаторов техник рисования (для канцелярских товаров)
   stationery_pen_thickness_id int, -- Идентификатор толщины пера (для канцелярских товаров)
   stationery_mounting_type_id int, -- Идентификатор типа крепления (для канцелярских товаров)
   stationery_pen_tip_shape_id int, -- Идентификатор формы наконечника (для канцелярских товаров)
   stationery_lead_hardness_id_list multi, -- Список идентификаторов твердости грифеля (для канцелярских товаров)
   stationery_ink_base_id int, -- Идентификатор основы чернил (для канцелярских товаров)
   stationery_calculator_capacity_id int, -- Идентификатор разрядности калькулятора (для канцелярских товаров)
   stationery_calendar_year_id int, -- Идентификатор года календаря (для канцелярских товаров)
   stationery_calendar_type_id int, -- Идентификатор вида календаря (для канцелярских товаров)
   stationery_calendar_subject_id int, -- Идентификатор тематики календаря (для канцелярских товаров)
   stationery_clasp_type_id int, -- Идентификатор типа застежки (для канцелярских товаров)
   stationery_compartments_quantity_id int, -- Идентификатор количества отделений (для канцелярских товаров)
   stationery_cover_binding_id int, -- Идентификатор переплета обложки (для канцелярских товаров)
   stationery_package_type_id int, -- Идентификатор типа упаковки (для канцелярских товаров)
   stationery_cover_surface_id int, -- Идентификатор поверхности обложки (для канцелярских товаров)
   stationery_universal_id int, -- Идентификатор вселенной (для канцелярских товаров)
   stationery_sheets_quantity_id int, -- Идентификатор количества листов (для канцелярских товаров)
   stationery_color_id int, -- Идентификатор цвета (для канцелярских товаров)
   stationery_volume_id int, -- Идентификатор объема (для канцелярских товаров)

   comic_universal_id_list multi, -- Список идентификаторов вселенной комикса
   comic_character_id_list multi, -- Список идентификаторов персонажей комикса
   comic_genre_id_list multi, -- Список идентификаторов жанра комикса
   comic_series_id_list multi, -- Список идентификаторов серии комикса
   comic_type_id_list multi, -- Список идентификаторов типа комикса
   comic_line_id_list multi, -- Список идентификаторов линейки комикса
   comic_section_id_list multi, -- Список идентификаторов раздела комикса
   comic_subject_id_list multi, -- Список идентификаторов тематик комикса

   game_player_quantity_id_list multi, -- Список идентификаторов количества игроков
   game_audience_id int, -- Идентификатор аудитории
   game_child_age_id int, -- Идентификатор возраста ребенка
   game_series_id int, -- Идентификатор серии игр
   game_use_case_id_list multi, -- Список идентификаторов применения (семейная, для компании и т.д.)
   game_skill_id_list multi, -- Список идентификаторов тренируемых навыков
   game_duration_id int, -- Идентификатор времени игры

   constructor_nation_id int, -- Идентификатор нации конструктора
   constructor_detail_quantity_id_list multi, -- Список идентификаторов количества деталей конструктора
   constructor_equipment_type_id int, -- Идентификатор вида техники конструктора
   souvenir_reason_id_list multi, -- Список идентификаторов повода для покупки
   souvenir_format_id int, -- Идентификатор размера сувенира
   souvenir_set_quantity_id int, -- Идентификатор количества товаров в сувенирном наборе

   toy_type_id int, -- Идентификатор вида фигурки
   toy_height_id int, -- Идентификатор высоты фигурки

   gift_hobby_id_list multi, -- Список идентификаторов увлечений и хобби для подарков
   gift_for_children_id_list multi, -- Список идентификаторов идей подарков для детей
   gift_new_year_id_list multi, -- Список идентификаторов идей подарков к Новому году
   gift_section_id_list multi, -- Список идентификаторов разделов подарков
   gift_books_on_interest_id_list multi, -- Список идентификаторов наборов книг по интересам для подарка

   shop_id_list multi, -- Список идентификаторов магазинов, где товар в наличии
   city_id_list multi, -- Список идентификаторов городов, где товар в наличии
   shop_brand_id_list multi, -- Список идентификаторов брендов магазинов, где товар в наличии

   school_purpose_id_list multi -- Список идентификаторов назначения учебной литературы
-- !!! Добавляешь поля? не забудь добавить в api/src/Model/Product/RetailProduct/Resources/manticore/retail_products.sql
)
charset_table='0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+0401->U+0435, U+0451->U+0435, U+401->U+0435, U+451->U+0435'
ignore_chars='U+002E, U+002D, U+005C'
index_exact_words='1'
expand_keywords='1'
min_prefix_len='3'
min_word_len='1'
min_stemming_len='4'
morphology='lemmatize_ru_all, lemmatize_en_all'
;

Была необходимость выполнить ALTERT с добавлением нового поля school_purpose_id_list с типом multi.

Первая попытка: выполняем просто альтер - падаем с ошибкой
Вторая попытка: удаляем индекс, создаем новый, проводим альтер, запускаем реиндекс - какое-то время все ок, но через полчаса начинают копиться воркеры (см. скрин) при это показатели самого мантикора в норме, но он перестает отвечать
Третья попытка: повторяем пересоздание + альтер, все ок, но через несколько часов снова копятся воркеры, перезагрузка мантикора не помогает, в итоге пересоздаем индекс без нового поля - все ок
Четвертая попытка: удаляем индекс, создаем новый сразу с новым полем в середине индекса (по логическому положению), запускаем реиндекс - через 15 минут после альтера и 2 минуты после заполнения индекса падаем по воркерам, в итоге пересоздаем индекс без нового поля - все ок
Пятая попытка: удаляем индекс, создаем новый сразу с новым полем в конце индекса, запускаем реиндекс - все ок, но через 5 часов снова падаем по воркерам, перезагрузкой сбрасываем воркеры и живем дальше

Рост worker:

И вопросы:

  1. Чем отличается последняя попытка (рабочая) от второй (провальная)? структура же там одинакова получается
  2. Может ли как-то порядок типов данных полей влиять на описанное поведение? разница в последней и предпоследней попытке только в этом
  3. С чем связан рост worker приводящий к зависанию?

нужно сначала выложить searchd.log где был бы crash log

Так же было бы хорошо сделать backup таблиц перед ALTER и после падения \ зависания восстановить таблицу из backup проверить indextool что таблица валидная и если при повторном ALTER повторяется креш или зависание - то создать тикет на Github куда приложить конфиг \ таблицу и команду которая приводит к крешу \ зависанию.

Как заливать данные для расследования инцидента вы можете почитать в нашем manual

Посмотрю по searchd.log, приложу если остался.

А по п.2 и п.3. можете подсказать?

похоже на плохие данные в индексе или испорченный индекс, который на некоторых запросах приводит к зависанию

Вот как. Попробуем на следующем ALTER проверить.

Дополню по свежим проблемам.

Индекс products.
Нужно было выполнить несколько ALTER:

ALTER TABLE products ADD COLUMN reasons_to_buy_list json;
ALTER TABLE products ADD COLUMN selling_text text stored;
ALTER TABLE products ADD COLUMN product_collection_id_list multi;

Перед выполнением ALTER был выполнен скриптом manticore-backup и indextool check по каждому индексу.
Проверка индексов и backup, к счастью, прошли успешно.
Далее была запущен запрос и сразу падение:

mysql> ALTER TABLE products ADD COLUMN reasons_to_buy_list json;
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id:    152
Current database: *** NONE ***

ERROR 1064 (42000): index products: unknown local table in ALTER request

Проверили индексы:

mysql> show tables;
+-------------------------------+------+
| Index                         | Type |
+-------------------------------+------+
| bindings                      | rt   |
| categories                    | rt   |
| ekns                          | rt   |
| literature_work_cycle_volumes | rt   |
| literature_work_cycles        | rt   |
| persons                       | rt   |
| product_collections           | rt   |
| product_properties_values     | rt   |
| product_tags                  | rt   |
| products_for_autocorrect      | rt   |
| publisher_brands              | rt   |
| publisher_series              | rt   |
| publishers                    | rt   |
| school_properties_values      | rt   |
| shops                         | rt   |
| tbks                          | rt   |
+-------------------------------+------+
16 rows in set (0.00 sec)

и products пропал.

В логах:

[Tue Jun 18 22:00:58.650 2024] [730317] rt: table products: diskchunk 9930(92), segments 18  saved in 8.509819 (8.510413) sec, RAM saved/new 141631025/0 ratio 0.950000 (soft limit 127506841, conf limit 134217728)
[Tue Jun 18 22:03:51.602 2024] [730288] rt: table products: diskchunk 9931(93), segments 14  saved in 8.089081 (8.089569) sec, RAM saved/new 137951202/0 ratio 0.950000 (soft limit 127506841, conf limit 134217728)
[Tue Jun 18 22:06:08.887 2024] [730290] WARNING: got ident_all
[Tue Jun 18 22:06:08.888 2024] [730290] last message repeated 16 times
[Tue Jun 18 22:06:08.888 2024] [730290] rt: table bindings: ramchunk saved ok (mode=forced, last TID=90, current TID=90, ram=0.001 Mb, time delta=6877 sec, took=0.000 sec)
[Tue Jun 18 22:06:08.889 2024] [730282] rt: table categories: ramchunk saved ok (mode=forced, last TID=91, current TID=91, ram=0.075 Mb, time delta=6877 sec, took=0.000 sec)
[Tue Jun 18 22:06:08.896 2024] [730282] rt: table ekns: ramchunk saved ok (mode=forced, last TID=0, current TID=0, ram=0.310 Mb, time delta=6871 sec, took=0.007 sec)
[Tue Jun 18 22:06:08.898 2024] [730282] rt: table literature_work_cycle_volumes: ramchunk saved ok (mode=forced, last TID=180, current TID=180, ram=0.562 Mb, time delta=6877 sec, took=0.001 sec)
[Tue Jun 18 22:06:08.913 2024] [730282] rt: table literature_work_cycles: ramchunk saved ok (mode=forced, last TID=90, current TID=90, ram=3.025 Mb, time delta=6876 sec, took=0.014 sec)
[Tue Jun 18 22:06:09.002 2024] [730304] rt: table persons: ramchunk saved ok (mode=forced, last TID=2844, current TID=2844, ram=30.713 Mb, time delta=6871 sec, took=0.088 sec)
[Tue Jun 18 22:06:09.004 2024] [730319] rt: table product_collections: ramchunk saved ok (mode=forced, last TID=90, current TID=90, ram=0.228 Mb, time delta=6877 sec, took=0.001 sec)
[Tue Jun 18 22:06:09.008 2024] [730302] rt: table product_properties_values: ramchunk saved ok (mode=forced, last TID=0, current TID=0, ram=0.601 Mb, time delta=6877 sec, took=0.003 sec)
[Tue Jun 18 22:06:09.009 2024] [730300] rt: table product_tags: ramchunk saved ok (mode=forced, last TID=90, current TID=90, ram=0.072 Mb, time delta=6877 sec, took=0.001 sec)
[Tue Jun 18 22:06:09.159 2024] [730300] rt: table products: ramchunk saved ok (mode=forced, last TID=0, current TID=0, ram=84.139 Mb, time delta=137 sec, took=0.149 sec)
[Tue Jun 18 22:06:09.280 2024] [730300] rt: table products_for_autocorrect: ramchunk saved ok (mode=forced, last TID=13561, current TID=13561, ram=26.114 Mb, time delta=546 sec, took=0.078 sec)
[Tue Jun 18 22:06:09.291 2024] [730300] rt: table publisher_brands: ramchunk saved ok (mode=forced, last TID=7, current TID=7, ram=0.263 Mb, time delta=6877 sec, took=0.001 sec)
[Tue Jun 18 22:06:09.311 2024] [730300] rt: table publisher_series: ramchunk saved ok (mode=forced, last TID=108, current TID=108, ram=10.699 Mb, time delta=6875 sec, took=0.019 sec)
[Tue Jun 18 22:06:09.317 2024] [730290] rt: table publishers: ramchunk saved ok (mode=forced, last TID=21, current TID=21, ram=1.327 Mb, time delta=6877 sec, took=0.005 sec)
[Tue Jun 18 22:06:09.319 2024] [730290] rt: table school_properties_values: ramchunk saved ok (mode=forced, last TID=4, current TID=4, ram=0.286 Mb, time delta=6878 sec, took=0.001 sec)
[Tue Jun 18 22:06:09.322 2024] [730290] rt: table shops: ramchunk saved ok (mode=forced, last TID=0, current TID=0, ram=0.083 Mb, time delta=6878 sec, took=0.001 sec)
[Tue Jun 18 22:06:09.325 2024] [730290] rt: table tbks: ramchunk saved ok (mode=forced, last TID=180, current TID=180, ram=0.475 Mb, time delta=6878 sec, took=0.002 sec)
[Tue Jun 18 22:06:09.405 2024] [730313] WARNING: got ident_all
[Tue Jun 18 22:06:11.511 2024] [730279] WARNING: last message repeated 4 times
[Tue Jun 18 22:06:14.232 2024] [730318] WARNING: got ident_all
[Tue Jun 18 22:06:15.515 2024] [730279] WARNING: last message repeated 1 times
[Tue Jun 18 22:06:18.422 2024] [730311] WARNING: got ident_all
[Tue Jun 18 22:06:19.520 2024] [730279] WARNING: last message repeated 1 times
[Tue Jun 18 22:06:19.914 2024] [730286] WARNING: got ident_all
[Tue Jun 18 22:06:21.021 2024] [730279] WARNING: last message repeated 1 times
[Tue Jun 18 22:06:22.721 2024] [730283] WARNING: got ident_all
[Tue Jun 18 22:06:24.025 2024] [730279] WARNING: last message repeated 1 times
[Tue Jun 18 22:06:24.055 2024] [730288] WARNING: got ident_all
[Tue Jun 18 22:06:25.435 2024] [730308] WARNING: last message repeated 3 times
[Tue Jun 18 22:06:25.435 2024] [730308] WARNING: got ident_all
[Tue Jun 18 22:06:26.527 2024] [730279] WARNING: last message repeated 1 times
[Tue Jun 18 22:14:52.075 2024] [730283] WARNING: got ident_all
[Tue Jun 18 22:14:53.082 2024] [730279] WARNING: last message repeated 1 times
[Tue Jun 18 22:19:08.290 2024] [730309] WARNING: got ident_all
[Tue Jun 18 22:19:10.364 2024] [730279] WARNING: last message repeated 3 times
[Tue Jun 18 22:19:11.231 2024] [730311] WARNING: got ident_all
[Tue Jun 18 22:19:12.779 2024] [730285] WARNING: last message repeated 5 times
[Tue Jun 18 22:19:12.779 2024] [730285] WARNING: got ident_all
[Tue Jun 18 22:19:13.868 2024] [730279] WARNING: last message repeated 1 times
[Tue Jun 18 22:19:16.014 2024] [730296] WARNING: got ident_all
[Tue Jun 18 22:19:17.873 2024] [730279] WARNING: last message repeated 17 times
------- FATAL: CRASH DUMP -------
[Tue Jun 18 22:20:13.432 2024] [730279]

--- crashed SphinxQL request dump ---
SELECT
    id,
    name,
    slug,
    image,

    price_retail,
    price_discounted_for_guest,

    price_discount_percent_for_guest,
    price_discounted_for_authorized,
    price_discount_percent_for_authorized,

    price_discounted_for_subscriber,
    price_discount_percent_for_subscriber,


    marketing_status_list,

    IF (
        availability_status != 40 AND availability_status 
!= 50 AND GREATEST(shop_id_list) > 0,
        20,
        availability_status
    
) as availability_status,
    availability_status as availability_status_online,
 
   availability_quantity,
    GREATEST(shop_id_list) > 0 as is_available_offline,

    IN(city_id_list, -1) as is_available_in_customer_city,
    IN(shop_id_list, -1) 
as is_available_in_customer_shop,
    IF (
        availability_status IN (40, 50),

        100,
        IF (
            IN(shop_id_list, -1),
            35,
     
       IF (
                IN(city_id_list, -1),
                30,
            
    IF (
                    GREATEST(shop_id_list) > 0,
                    20,
 
                   availability_status
                )
            )
        )
 
   ) as availability,  /* статус для сортировки */

    vendor_id,

    nds,

    main_category_id_list,
    author_id_list,

    product_type_id,
  
  article_number_id,

    1000000000000 * literature_work_publishing_year + released_at 
as newness

    , literature_work_publishing_year, preorder_available_at, released_at

    
FROM products
WHERE ALL(tbk_id_list) NOT IN (32, 30) AND id IN (205376) AND ANY(shop_id_list) 
IN (0)
ORDER BY availability DESC, purchase_stats_day_avg_count DESC, newness DESC,
 price_retail ASC
LIMIT 1
OFFSET 0
OPTION
    max_matches = 1
--- request dump end ---
--- local index:��.2�
Manticore 6.2.12 dc5144d35@230822 (columnar 2.2.4 5aec342@230822) (secondary 2.2.4 5aec342@230822)
Handling signal 11
-------------- backtrace begins here ---------------
Program compiled with Clang 15.0.7
Configured with flags: Configured with these definitions: -DDISTR_BUILD=jammy -DUSE_SYSLOG=1 -DWITH_GALERA=1 -DWITH_RE2=1 -DWITH_RE2_FORCE_STATIC=1 -DWITH_STEMMER=1 -DWITH_STEMMER_FORCE_STATIC=1 -DWITH_NLJSON=1 -DWITH_UNIALGO=1 -DWITH_ICU=1 -DWITH_ICU_FORCE_STATIC=1 -DWITH_SSL=1 -DWITH_ZLIB=1 -DWITH_ZSTD=1 -DDL_ZSTD=1 -DZSTD_LIB=libzstd.so.1 -DWITH_CURL=1 -DDL_CURL=1 -DCURL_LIB=libcurl.so.4 -DWITH_ODBC=1 -DDL_ODBC=1 -DODBC_LIB=libodbc.so.2 -DWITH_EXPAT=1 -DDL_EXPAT=1 -DEXPAT_LIB=libexpat.so.1 -DWITH_ICONV=1 -DWITH_MYSQL=1 -DDL_MYSQL=1 -DMYSQL_LIB=libmysqlclient.so.21 -DWITH_POSTGRESQL=1 -DDL_POSTGRESQL=1 -DPOSTGRESQL_LIB=libpq.so.5 -DLOCALDATADIR=/var/lib/manticore -DFULL_SHARE_DIR=/usr/share/manticore
Built on Linux x86_64 (jammy) (cross-compiled)
Stack bottom = 0x7fe400043ca0, thread stack size = 0x20000
Trying manual backtrace:
Something wrong with thread stack, manual backtrace may be incorrect (fp=0x1)
Wrong stack limit or frame pointer, manual backtrace failed (fp=0x1, stack=0x7fe400040000, stacksize=0x20000)
Trying system backtrace:
begin of system symbols:
/usr/bin/searchd(_Z12sphBacktraceib+0x22a)[0x5615cca799fa]
/usr/bin/searchd(_ZN11CrashLogger11HandleCrashEi+0x355)[0x5615cc8f82b5]
/lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7fe99fd86520]
/lib/x86_64-linux-gnu/libc.so.6(+0x1aedcd)[0x7fe99fef2dcd]
/usr/bin/searchd(_ZN18IndexAlterHelper_c26Alter_AddRemoveRowwiseAttrERK10CSphSchemaS2_PKjjPKhR14WriteWrapper_cS8_bRK10CSphString+0x293)[0x5615cd7f09d3]
/usr/bin/searchd(_ZN13CSphIndex_VLN18AddRemoveAttributeEbRK18AttrAddRemoveCtx_tR10CSphString+0x66a)[0x5615cc98822a]
/usr/bin/searchd(_ZN9RtIndex_c18AddRemoveAttributeEbRK18AttrAddRemoveCtx_tR10CSphString+0x3d5)[0x5615cd6aeb35]
/usr/bin/searchd(+0xea8142)[0x5615cc946142]
/usr/bin/searchd(_ZN15ClientSession_c7ExecuteESt4pairIPKciER11RowBuffer_i+0x193b)[0x5615cc942c3b]
/usr/bin/searchd(_Z20ProcessSqlQueryBuddySt4pairIPKciERhR21GenericOutputBuffer_c+0x52)[0x5615cc8a2d52]
/usr/bin/searchd(_Z8SqlServeSt10unique_ptrI16AsyncNetBuffer_cSt14default_deleteIS0_EE+0x105d)[0x5615cc88819d]
/usr/bin/searchd(_Z10MultiServeSt10unique_ptrI16AsyncNetBuffer_cSt14default_deleteIS0_EESt4pairIitE7Proto_e+0x43)[0x5615cc883f13]
/usr/bin/searchd(+0xde6af2)[0x5615cc884af2]
/usr/bin/searchd(_ZZN7Threads11CoRoutine_c13CreateContextESt8functionIFvvEESt4pairIN5boost7context13stack_contextENS_14StackFlavour_EEEENUlNS6_6detail10transfer_tEE_8__invokeESB_+0x1c)[0x5615cdbc8dac]
/usr/bin/searchd(make_fcontext+0x37)[0x5615cdbe9167]
Trying boost backtrace:
 0# sphBacktrace(int, bool) in /usr/bin/searchd
 1# CrashLogger::HandleCrash(int) in /usr/bin/searchd
 2# 0x00007FE99FD86520 in /lib/x86_64-linux-gnu/libc.so.6
 3# 0x00007FE99FEF2DCD in /lib/x86_64-linux-gnu/libc.so.6
 4# IndexAlterHelper_c::Alter_AddRemoveRowwiseAttr(CSphSchema const&, CSphSchema const&, unsigned int const*, unsigned int, unsigned char const*, WriteWrapper_c&, WriteWrapper_c&, bool, CSphString const&) in /usr/bin/searchd
 5# CSphIndex_VLN::AddRemoveAttribute(bool, AttrAddRemoveCtx_t const&, CSphString&) in /usr/bin/searchd
 6# RtIndex_c::AddRemoveAttribute(bool, AttrAddRemoveCtx_t const&, CSphString&) in /usr/bin/searchd
 7# 0x00005615CC946142 in /usr/bin/searchd
 8# ClientSession_c::Execute(std::pair<char const*, int>, RowBuffer_i&) in /usr/bin/searchd
 9# ProcessSqlQueryBuddy(std::pair<char const*, int>, unsigned char&, GenericOutputBuffer_c&) in /usr/bin/searchd
10# SqlServe(std::unique_ptr<AsyncNetBuffer_c, std::default_delete<AsyncNetBuffer_c> >) in /usr/bin/searchd
11# MultiServe(std::unique_ptr<AsyncNetBuffer_c, std::default_delete<AsyncNetBuffer_c> >, std::pair<int, unsigned short>, Proto_e) in /usr/bin/searchd
12# 0x00005615CC884AF2 in /usr/bin/searchd
13# Threads::CoRoutine_c::CreateContext(std::function<void ()>, std::pair<boost::context::stack_context, Threads::StackFlavour_E>)::{lambda(boost::context::detail::transfer_t)#1}::__invoke(boost::context::detail::transfer_t) in /usr/bin/searchd
14# make_fcontext in /usr/bin/searchd

-------------- backtrace ends here ---------------
Please, create a bug report in our bug tracker (https://github.com/manticoresoftware/manticore/issues)
and attach there:
a) searchd log, b) searchd binary, c) searchd symbols.
Look into the chapter 'Reporting bugs' in the manual
(https://manual.manticoresearch.com/Reporting_bugs)
Dump with GDB via watchdog
--- active threads ---
thd 0 (work_24), proto mysql, state query, command alter_add
--- Totally 2 threads, and 1 client-working threads ---
------- CRASH DUMP END -------
[Tue Jun 18 22:20:17.463 2024] [730278] watchdog: main process 730279 crashed via CRASH_EXIT (exit code 2), will be restarted
[Tue Jun 18 22:20:17.463 2024] [730278] watchdog: main process 153386 forked ok
[Tue Jun 18 22:20:17.466 2024] [153386] starting daemon version '6.2.12 dc5144d35@230822 (columnar 2.2.4 5aec342@230822) (secondary 2.2.4 5aec342@230822)' ...
[Tue Jun 18 22:20:17.466 2024] [153386] listening on 10.9.2.19:9312 for sphinx and http(s)
[Tue Jun 18 22:20:17.466 2024] [153386] listening on 10.9.2.19:9306 for mysql
[Tue Jun 18 22:20:17.466 2024] [153386] listening on 10.9.2.19:9308 for sphinx and http(s)
[Tue Jun 18 22:20:17.572 2024] [153387] WARNING: table 'persons': table 'persons': morphology option changed from config has no effect, ignoring
[Tue Jun 18 22:20:17.718 2024] [153387] WARNING: table 'publisher_brands': table 'publisher_brands': morphology option changed from config has no effect, ignoring
[Tue Jun 18 22:20:17.731 2024] [153387] WARNING: table 'publisher_series': table 'publisher_series': morphology option changed from config has no effect, ignoring
[Tue Jun 18 22:20:17.733 2024] [153387] WARNING: table 'publishers': table 'publishers': morphology option changed from config has no effect, ignoring
[Tue Jun 18 22:20:17.733 2024] [153387] WARNING: table 'school_properties_values': table 'school_properties_values': morphology option changed from config has no effect, ignoring
[Tue Jun 18 22:20:17.735 2024] [153387] WARNING: table 'product_properties_values': table 'product_properties_values': morphology option changed from config has no effect, ignoring
[Tue Jun 18 22:20:17.747 2024] [153387] WARNING: table 'products': table 'products': morphology option changed from config has no effect, ignoring
[Tue Jun 18 22:20:17.747 2024] [153387] WARNING: table 'products': disabled at the JSON config
[Tue Jun 18 22:20:17.747 2024] [153387] WARNING: table 'products': prealloc: attribute count mismatch (me=(nameless), in=/var/lib/manticore/products/products.8262, myattrs=136, inattrs=137) - NOT SERVING
[Tue Jun 18 22:20:17.748 2024] [153397] prereading 16 tables
[Tue Jun 18 22:20:17.761 2024] [153386] accepting connections
[Tue Jun 18 22:20:17.781 2024] [153397] preread 16 tables in 0.033 sec
[Tue Jun 18 22:20:17.803 2024] [153415] [BUDDY] started v1.0.18 '/usr/share/manticore/modules/manticore-buddy/bin/manticore-buddy --listen=http://10.9.2.19:9312 --disable-telemetry --threads=46' at http://127.0.0.1:33171
[Tue Jun 18 22:20:18.220 2024] [153414] [BUDDY] Loaded plugins:
[Tue Jun 18 22:20:18.220 2024] [153414] [BUDDY]   core: empty-string, backup, emulate-elastic, insert, select, show, cli-table, plugin, test, insert-mva
[Tue Jun 18 22:20:18.220 2024] [153414] [BUDDY]   local: 
[Tue Jun 18 22:20:18.220 2024] [153414] [BUDDY]   extra: 
[Tue Jun 18 22:31:02.231 2024] [153429] rt: table products: diskchunk 0(1), segments 11  saved in 3.369889 (3.370304) sec, RAM saved/new 50799766/0 ratio 0.950000 (soft limit 127506841, conf limit 134217728)
[Tue Jun 18 22:34:19.635 2024] [153388] rt: table products: diskchunk 1(2), segments 20  saved in 6.915910 (6.916248) sec, RAM saved/new 132302311/0 ratio 0.950000 (soft limit 127506841, conf limit 134217728)
[Tue Jun 18 22:37:30.777 2024] [153400] rt: table products: diskchunk 2(3), segments 22  saved in 7.458110 (7.458451) sec, RAM saved/new 133730243/0 ratio 0.950000 (soft limit 127506841, conf limit 134217728)
[Tue Jun 18 22:40:08.393 2024] [153391] rt: table products: diskchunk 3(4), segments 16  saved in 5.645655 (5.646104) sec, RAM saved/new 130421351/0 ratio 0.950000 (soft limit 127506841, conf limit 134217728)
[Tue Jun 18 22:42:41.882 2024] [153404] rt: table products: diskchunk 4(5), segments 17  saved in 5.120781 (5.121964) sec, RAM saved/new 131723730/0 ratio 0.950000 (soft limit 127506841, conf limit 134217728)
[Tue Jun 18 22:45:25.867 2024] [153391] rt: table products: diskchunk 5(6), segments 24  saved in 5.585427 (5.585890) sec, RAM saved/new 127523764/0 ratio 0.950000 (soft limit 127506841, conf limit 134217728)
[Tue Jun 18 22:48:00.705 2024] [153412] rt: table products: diskchunk 6(7), segments 22  saved in 5.109252 (5.109653) sec, RAM saved/new 130608878/2896 ratio 0.950000 (soft limit 127506841, conf limit 134217728)
[Tue Jun 18 22:50:36.451 2024] [153422] rt: table products: diskchunk 7(8), segments 22  saved in 5.132279 (5.132690) sec, RAM saved/new 138075721/0 ratio 0.950000 (soft limit 127506841, conf limit 134217728)
[Tue Jun 18 22:53:04.960 2024] [153425] rt: table products: diskchunk 8(9), segments 19  saved in 5.484085 (5.484479) sec, RAM saved/new 129817825/154795 ratio 0.950000 (soft limit 127506841, conf limit 134217728)
[Tue Jun 18 22:55:41.383 2024] [153413] rt: table products: diskchunk 9(10), segments 24  saved in 5.645060 (5.645532) sec, RAM saved/new 139659205/0 ratio 0.950000 (soft limit 127506841, conf limit 134217728)

А при запуске indextool --check products даже прошел проверку:

check passed, 23.0 sec elapsed
checking disk chunk, extension 9931, 92(93)...
checking schema...
checking dictionary...
checking data...
checking rows...
checking attribute blocks index...
checking kill-list...
checking docstore...
checking dead row map...
checking doc-id lookup...
check passed, 23.3 sec elapsed
check passed, 23.3 sec elapsed

Как так?

Далее пришлось восстанавливать:

  1. удалить каталог products из /var/lib/manticore/
  2. создать схему SQL запросом
  3. выполнить все 3 ALTER - тут произошло странное, для одной колонки вышел дубликат:
$ mysql -h10.9.2.19 -P9306 -e "describe products" | grep "selling"
selling_text    text    stored
selling_text    text    stored

Как так вышло, что можно добавить одну и ту же колонку?
4) запустить job для реиндекса, чтобы заполнить данными products

После этого индекс пока работает.
И все еще вопросы:

  1. почему ALTER приводит к сбою и crash выкидыванием индекса?
  2. проверка индексов ничего не выявила, как проверять тогда?
  3. как безопасно проводить ALTER, если то проходит, то нет? По логам же ничего.

backup + логи могу загрузить на S3.

ALTER TABLE products ADD COLUMN reasons_to_buy_list json;
ERROR 2013 (HY000): Lost connection to MySQL server during query

В 6.3.0 фиксили крэш ALTER’а. Не знаю, может то же самое - fix crash on add attribute with absent file · manticoresoftware/manticoresearch@b7c3384 · GitHub . Бэктрэйс похож crash on alter table tbl add column col uint · Issue #1692 · manticoresoftware/manticoresearch · GitHub

  1. почему ALTER приводит к сбою и crash выкидыванием индекса?

Таблица перестала обслуживаться, потому что:

[Tue Jun 18 22:20:17.747 2024] [153387] WARNING: table 'products': prealloc: attribute count mismatch (me=(nameless), in=/var/lib/manticore/products/products.8262, myattrs=136, inattrs=137) - NOT SERVING

А при запуске indextool --check products даже прошел проверку:

indextool’у видимо тонкости типа “attribute count mismatch” неважны.

Как так вышло, что можно добавить одну и ту же колонку?

Баг. Если повторяется в dev или в 6.3.0, то заведите issue - пофиксим.

Вы правильно сделали, что забэкапили перед альтером. В 6.3.0 появились дополнительные инструменты, которые можно использовать, чтоб ещё больше себя обезопасить:

  • ALTER TABLE RENAME - для переименования таблицы
  • CREATE TABLE LIKE ... WITH DATA - для копирования таблицы

Ну а если есть баг (а он по всей видимости в той версии есть, раз получились дубликаты полей), то надо фиксить (если он есть и в новой версии).

Хорошо, запланируем обновление на 6.3.0 и там проверим.

Выходит, не всегда можно полагаться на проверку. Может быть не ОК.

Хорошо, проверим как обновимся.

Но правда не всегда может быть выполнен backup, там возможно тоже баг при UNFREEZE. Вот тут тикет: manticore-backup Failed to send query to the Manticore Search daemon - #7 by tomat
Т.е. как вариант сначала сделать RENAME, выполнить ALTER, а затем перенести данные?

Ждём там от вас информации по нагрузке, чтоб воспроизвести проблему. В 6.2.12, кстати, была проблема, что UNFREEZE не анфризил, но у вас там 6.3.0, так что видимо что-то другое.

Т.е. как вариант сначала сделать RENAME, выполнить ALTER, а затем перенести данные?

Сделать копию (что и будет бэкапом), там ALTER, а затем если всё ок, то ALTER RENAME.

1 Like

Хорошо, уже передал разработчикам. Как соберем все предоставлю вместе с backup.

Ок, проверим этот вариант. Есть может примерно предоставление на сколько по времени затратно будет копирование данных?

Есть может примерно предоставление на сколько по времени затратно будет копирование данных?

Примерно с такой же скоростью, с какой диск может читать и писать в тот же partition.