Apache Ignite 中索引 INLINE_SIZE 和索引列数据(字符串类型)之间有关联吗?

问题描述 投票:0回答:1
  1. Apache Ignite 中索引 INLINE_SIZE 和索引列数据(字符串类型)之间有关联吗?

  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+tree 创建过程中发生了什么导致页面锁定并导致节点宕机?

其他数据集不会发生这种情况。但我可以针对特定数据集重现相同的情况(不可能共享数据集......)

我正在尝试理解代码,但是有人可以帮忙吗...?

  1. 使用不同的数据集进行测试

  2. 导致问题的数据集包含特殊字符,因此我尝试删除它们。

  3. 将 PK 列的大小更改为固定(archer -> varchar(2000)

  4. 将 PK 列从 3 变为 2,但是。一样....

exception indexing structure ignite b-tree
1个回答
0
投票

原因是你的索引内联大小太大。目前

Ignite
过于宽松并允许错误配置。在这种配置的情况下,b+tree 可能会退化为太多层并遇到您面临的内部检查(内部深度限制为128)。有一张票据可以改进验证和日志记录。

问题是一个page只能包含一个大元素。内嵌项目的尺寸均相同,并且每个项目都适合一页。对于某些数据集,这使得它很快就会失败 - 例如,当尝试插入按字典顺序排序(甚至“几乎”排序)的字符串时。它还取决于影响页面布局的一些因素,例如TDE。这不是你的情况,因为你有纯内存。

你需要减少你的索引内联size以使其更加合理。如果您确实需要这样,请考虑增加页面size

© www.soinside.com 2019 - 2024. All rights reserved.