Добрый день!
Версия: 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:
И вопросы:
- Чем отличается последняя попытка (рабочая) от второй (провальная)? структура же там одинакова получается
- Может ли как-то порядок типов данных полей влиять на описанное поведение? разница в последней и предпоследней попытке только в этом
- С чем связан рост worker приводящий к зависанию?