diff --git a/src/gausskernel/storage/access/ubtree/ubtpage.cpp b/src/gausskernel/storage/access/ubtree/ubtpage.cpp index a3166ae6d..b22ce67b3 100644 --- a/src/gausskernel/storage/access/ubtree/ubtpage.cpp +++ b/src/gausskernel/storage/access/ubtree/ubtpage.cpp @@ -165,7 +165,7 @@ Buffer UBTreeGetRoot(Relation rel, int access) BufferDesc *buf = GetBufferDescriptor(rootbuf - 1); // caveat for GetBufferDescriptor for -1! valid = PinBuffer(buf, NULL); if (valid && TryLockBuffer(rootbuf, BT_READ, false)) { - isRootCacheValid = buf->tag.forkNum == MAIN_FORKNUM && + isRootCacheValid = (!IS_EXRTO_STANDBY_READ) && (buf->tag.forkNum == MAIN_FORKNUM) && RelFileNodeEquals(buf->tag.rnode, rel->rd_node) && (buf->tag.blockNum == rootblkno); if (!isRootCacheValid) { UnlockReleaseBuffer(rootbuf); diff --git a/src/gausskernel/storage/access/ubtree/ubtree.cpp b/src/gausskernel/storage/access/ubtree/ubtree.cpp index 1708d06e1..1f93835b1 100644 --- a/src/gausskernel/storage/access/ubtree/ubtree.cpp +++ b/src/gausskernel/storage/access/ubtree/ubtree.cpp @@ -905,6 +905,11 @@ restart: if (minoff <= maxoff) { stats->num_index_tuples += maxoff - minoff + 1; } + + if(vstate->cycleid !=0 && opaque->btpo_cycleid == vstate->cycleid + && !(opaque->btpo_flags & BTP_SPLIT_END) && !P_RIGHTMOST(opaque) && opaque->btpo_next < origBlkno){ + recurseTo = opaque->btpo_next; + } } if (deleteNow) {