本文介紹了列存節點上的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。