1、流程:
row_purge_remove_sec_if_poss
if (row_purge_remove_sec_if_poss_leaf(node, index, entry)) {
return;
}
retry:
success = row_purge_remove_sec_if_poss_tree(node, index, entry);
if (!success && n_tries < BTR_CUR_RETRY_DELETE_N_TIMES) {
n_tries++;
os_thread_sleep(BTR_CUR_RETRY_SLEEP_TIME);
goto retry;
}
二级索引purge时,同样先乐观删除,乐观删除失败再进行悲观删除。由于缺少空间导致悲观删除失败,再进行删除的次数是100次。
2、purge不会造成树结构改变
row_purge_remove_sec_if_poss_leaf
//搜索二级索引树中是否有undo log构造的二级索引记录
search_result = row_search_index_entry(index, entry, mode, &pcur, &mtr);
switch (search_result) {
case ROW_FOUND:
if (row_purge_poss_sec(node, index, entry)) {//判断二级索