本文介绍了列存节点上的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。