Note
This issue was generated by Claude AI (Claude Code CLI), acting as an AI agent to analyze and optimize LMDB Sail performance.
Summary
This issue tracks performance optimizations for the LMDB Sail store. 17 optimizations implemented.
Latest Benchmark Results (2026-02-03, 5-run average)
Concurrent Read (ops/sec)
Threads
Baseline
Current
Change
1
1,931,190
2,093,069
+8.4%
2
3,123,939
3,418,351
+9.4%
4
4,298,965
4,695,918
+9.2%
8
2,736,509
2,634,715
-3.7%
Concurrent Write (ops/sec)
Threads
Baseline
Current
Change
1
73,099
71,303
-2.5%
2
81,192
79,176
-2.5%
4
74,778
76,816
+2.7%
Bug Fixes
Bug
File
Fix
Unsafe ConcurrentHashMap iteration
TxnManager.java
Use .toArray() snapshot
Non-thread-safe HashMap
TripleStore.java
Use ConcurrentHashMap
Stack overflow in flushContextIncrements
TripleStore.java
Pre-allocate buffers outside loop
Optimizations (17 total)
#
Optimization
File
1
Index Selection Caching
TripleStore.java
2
Iterator Lock Batching (256)
LmdbRecordIterator.java
3
GroupMatcher Pre-creation
LmdbRecordIterator.java
4
Larger Default Caches
LmdbStoreConfig.java
5
Context Counter Batching
TripleStore.java
6
Fast Quad Read Path
Varint.java
7
ConcurrentHashMap in TxnManager
TxnManager.java
8
Thread-Local Transaction Cache
TxnManager.java
9
Record Object Pooling
TxnRecordCache.java
10
Fast Quad Write Path
Varint.java
11
LmdbStatementIterator optimization
LmdbStatementIterator.java
12
PointerBuffer Pooling
Pool.java
13
Specialized KeyReader
TripleStore.java
14
Quad Array Pooling
Pool.java
15
Optimistic Cache Lookup
ValueStore.java
Key Optimization Details
Specialized KeyReader (#13 ): Pre-compute skip pattern at iterator creation. Eliminates 12 array lookups per record.
Optimistic Cache Lookup (#15 ): getValue() tries cache without lock first, with revision check for MVCC safety.
Iterator Lock Batching (#2 ): Hold read lock for 256 records before releasing.
Fast Varint Paths (#6 , #10 ): If all 4 quad values ≤240, read/write directly without full varint decode/encode.
Test Results
816 tests passing (2 skipped)
No regressions
Note
This issue was generated by Claude AI (Claude Code CLI), acting as an AI agent to analyze and optimize LMDB Sail performance.
Summary
This issue tracks performance optimizations for the LMDB Sail store. 17 optimizations implemented.
Latest Benchmark Results (2026-02-03, 5-run average)
Concurrent Read (ops/sec)
Concurrent Write (ops/sec)
Bug Fixes
TxnManager.java.toArray()snapshotTripleStore.javaConcurrentHashMapTripleStore.javaOptimizations (17 total)
TripleStore.javaLmdbRecordIterator.javaLmdbRecordIterator.javaLmdbStoreConfig.javaTripleStore.javaVarint.javaTxnManager.javaTxnManager.javaTxnRecordCache.javaVarint.javaLmdbStatementIterator.javaPool.javaTripleStore.javaPool.javaValueStore.javaKey Optimization Details
Specialized KeyReader (#13): Pre-compute skip pattern at iterator creation. Eliminates 12 array lookups per record.
Optimistic Cache Lookup (#15):
getValue()tries cache without lock first, with revision check for MVCC safety.Iterator Lock Batching (#2): Hold read lock for 256 records before releasing.
Fast Varint Paths (#6, #10): If all 4 quad values ≤240, read/write directly without full varint decode/encode.
Test Results