Существует ли корреляция между индексом INLINE_SIZE и данными столбца индекса (тип строки) в Apache Ignite?

  1. Существует ли корреляция между индексом INLINE_SIZE и данными столбца индекса (тип строки) в Apache Ignite?

  2. В следующей ситуации, когда я вставляю данные, возникает исключение, связанное с отсортированным индексом, появляется сообщение о блокировке/разблокировке, и узел отключается.

  • Чистая память

  • PK_INLINE_SIZE=2000,AFFINITY_INLINE_SIZE=200 (с использованием SQL With)

  • Создано 3 столбца типа varchar в качестве первичного ключа.

  • Apache Ignite 2.16.0 (H2 DB Engine, я тестировал Calcite DB Engine, та же проблема)

  • Таблица имеет 20 столбцов (все типы varchar)

Исключение произошло в

Когда я наблюдал соответствующие переменные с помощью отладчика, значение p.rootlvl продолжало увеличиваться (исключение возникает при p.btmlvl=129, p.rootlvl=129).

Когда для PK_INLINE_SIZE было установлено значение 200, значение p.rootlvl не увеличивалось так сильно, как раньше.

Что происходит с созданием индексного b+дерева, которое вызывает блокировку страниц и приводит к отключению узла?

С другими наборами данных этого не происходит. Но я могу воспроизвести ту же ситуацию для конкретного набора данных (совместное использование набора данных невозможно...)

Я пытаюсь понять код, но может ли кто-нибудь помочь...?

  1. протестировано с использованием разных наборов данных

  2. набор данных, вызывающий проблему, содержит специальные символы, поэтому я попытался удалить их.

  3. изменил размер столбца PK на фиксированный (archer -> varchar(2000)

  4. сделал ПК колонки 3 на 2 но. такой же....

Поделитесь полной трассировкой стека исключений, схемой таблицы и фрагментом кода, который вставляет данные. В идеале добавить репродуктор.

Pavel Tupitsyn 30.08.2024 15:27

Мне трудно поделиться тем, что вы сказали, потому что я не на месте, поэтому я надеюсь, что вы понимаете.

Hyungjo Suh 02.09.2024 17:34
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
2
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина в том, что встроенный размер вашего индекса слишком велик. В настоящее время Ignite слишком либерален и допускает неправильную настройку. В случае такой конфигурации возможно, что b+tree разложится на слишком много слоев и столкнется с внутренними проверками, с которыми вы столкнулись (внутренний предел глубины равен 128). Есть билет для улучшения проверки и регистрации.

Проблема в том, что страница может содержать только один большой элемент. Все встроенные элементы имеют одинаковый размер и помещаются на одной странице каждый. Для некоторых наборов данных это приводит к очень быстрому сбою — например, при попытке вставить лексикографически отсортированные (или даже «почти» отсортированные) строки. Это также зависит от нескольких факторов, влияющих на макет страницы, например. ТДЭ. Это не ваш случай, у вас чистый In-Memory.

Вам нужно уменьшить размер встроенного индекса , чтобы сделать его более разумным. Если вам действительно нужно, чтобы это было так, подумайте об увеличении размера страницы.

Другие вопросы по теме