LOADING_NCI状态说明及其影响

本文介绍了列存节点上的LOADING_NCI状态及其对列存读一致性的影响。

重启列存节点之后,在一段时间内,您可能会通过information_schema.imci_indexes表看到有一部分列存索引处于LOADING_NCI状态,该状态表示当前索引正在重建列存索引与行存的映射关系。该映射关系用于HTAP服务的实时高并发数据更新能力中。根据具体列存数据量的大小和集群的规格,LOADING_NCI状态持续时间为几秒到数小时不等。

LOADING_NCI状态对事务更新的影响

处于LOADING_NCI状态的索引依然可以实时更新列存索引中的数据,但由于该状态下列存索引与行存的映射没有完全建立,因此,数据更新仅缓存在列存索引上,您将无法实时查询更新后的数据。

LOADING_NCI状态对读一致性的影响

处于LOADING_NCI状态的索引中的数据依然可读,列存索引会根据您不同的参数配置提供不同的一致性级别的读服务。详情见下表:

索引状态

参数配置

可读性(读一致性)

LOADING_NCI

imci_enable_read_during_load_nci=ON

可读,快照读(全局任一列存索引处于该状态,则对所有列存索引提供快照读服务)。

imci_enable_read_during_load_nci=OFF

自上一个快照后存在数据变更(增删改)的列存索引不可读、自上一个快照后不存在数据变更的列存索引可读。

COMMITTED

N/A

可读,会读取实时更新的数据。

其他状态

N/A

不可读。

更多关于读一致性的内容请参见列存节点的事务一致性说明

参数配置说明

  • 若列存索引中的imci_enable_read_during_load_nci参数配置为ON,则在全部的列存索引状态由LOADING_NCI变为COMMITTED状态之前,列存索引默认提供快照读服务,读取的数据版本为列存宕机前的最后一次完整快照。此时,无论当前的列存索引状态处于LOADING_NCI还是COMMITTED,均支持通过列存索引加速复杂查询。

    说明

    imci_enable_read_during_load_nci参数配置为ON后,只要全局存在一个LOADING_NCI状态的列存索引,就会提供快照读服务。

  • 若列存索引中的imci_enable_read_during_load_nci参数配置为OFF。则列存索引会提供更严格的一致性读服务。即:

    • 对于COMMITTED状态的列存索引,可以通过列存数据加速复杂查询,并读取最新的列存数据。

    • 对于LOADING_NCI状态的列存索引,由于索引无法读取最新实时数据,因此只能读行存,特别的,自上一个快照后不存在数据变更的列存索引,等同于COMMITTED状态的列存索引,可以提供列存查询。用户可以根据具体的业务场景选择是否开启或关闭处于LOADING_NCI状态下的列存节点的快照读服务。

参数级别及默认值说明

  • 企业版集群的版本位于8.0.1.1.29至8.0.1.1.36之间时,imci_enable_read_during_load_nci参数为全局级别的参数。默认值为OFF,但存量集群中的默认值可能为ON。修改该参数值后,需要重启集群才能生效。

  • 企业版集群的版本为8.0.1.1.37及之后的版本时,imci_enable_read_during_load_nci参数为Session级别的参数。默认值为OFF