Follow on work from WT-7264 which is adding a new cursor flag, the flag allows the search near to exit early instead of walking numerous not visible entries.
The patch I was using when testing the change is:
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp index 87bda0ace9..7eef9c8528 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_index.cpp @@ -1520,9 +1520,11 @@ Status WiredTigerIndexUnique::_insert(OperationContext* opCtx, setKey(c, prefixKeyItem.Get()); ret = WT_OP_CHECK(wiredTigerCursorRemove(opCtx, c)); invariantWTOK(ret); - + c->reconfigure(c, "prefix_key=true"); // Second phase looks up for existence of key to avoid insertion of duplicate key - if (_keyExists(opCtx, c, keyString.getBuffer(), sizeWithoutRecordId)) { + auto key_exists = _keyExists(opCtx, c, keyString.getBuffer(), sizeWithoutRecordId); + c->reconfigure(c, "prefix_key=false"); + if (key_exists) { auto key = KeyString::toBson( keyString.getBuffer(), sizeWithoutRecordId, _ordering, keyString.getTypeBits()); auto entry = _desc->getEntry();
I think that should be all the required changes.
- causes
-
SERVER-58936 Unique index constraints may not be enforced
- Closed
- depends on
-
WT-7264 Creating a new configuration for search near that allows it to exit quickly when searching for prefixes
- Closed
- is depended on by
-
SERVER-57095 Increase number of zones in resharding_large_number_of_initial_chunks.js
- Closed
- is related to
-
SERVER-56274 TTL deletes are much slower on descending indexes than ascending indexes
- Closed
-
SERVER-61185 Use prefix_search for unique index lookup
- Closed
- related to
-
SERVER-57221 Inconsistent delete performance on collections with multiple secondary indexes on same key
- Closed
-
WT-7653 Inconsistent update performance on unique indexes
- Closed
-
SERVER-58943 Add more test coverage for unique indexes
- Closed