Skip to content

Commit e142922

Browse files
committed
fix
1 parent 11837bc commit e142922

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

paimon-common/src/main/java/org/apache/paimon/lookup/sort/db/SimpleLsmKvDb.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,21 @@ public class SimpleLsmKvDb implements Closeable {
7272
/** Maximum number of levels in the LSM tree. */
7373
static final int MAX_LEVELS = 4;
7474

75+
/**
76+
* Estimated per-entry memory overhead in the MemTable's TreeMap, beyond the raw key/value
77+
* bytes. This accounts for:
78+
*
79+
* <ul>
80+
* <li>TreeMap.Entry node: ~64 bytes (object header + left/right/parent/key/value refs +
81+
* color)
82+
* <li>MemorySlice wrapper: ~32 bytes (object header + segment ref + offset + length)
83+
* <li>MemorySegment backing the key: ~48 bytes (object header + heapMemory/offHeapBuffer refs
84+
* + address + size)
85+
* <li>byte[] value array header: ~16 bytes (object header + length)
86+
* </ul>
87+
*/
88+
static final long PER_ENTRY_OVERHEAD = 160;
89+
7590
private final File dataDirectory;
7691
private final SortLookupStoreFactory storeFactory;
7792
private final Comparator<MemorySlice> keyComparator;
@@ -180,6 +195,8 @@ public void put(byte[] key, byte[] value) throws IOException {
180195
long delta = key.length + value.length;
181196
if (oldValue != null) {
182197
delta -= (key.length + oldValue.length);
198+
} else {
199+
delta += PER_ENTRY_OVERHEAD;
183200
}
184201
memTableSize += delta;
185202
maybeFlushMemTable();
@@ -197,6 +214,8 @@ public void delete(byte[] key) throws IOException {
197214
long delta = key.length;
198215
if (oldValue != null) {
199216
delta -= (key.length + oldValue.length);
217+
} else {
218+
delta += PER_ENTRY_OVERHEAD;
200219
}
201220
memTableSize += delta;
202221
maybeFlushMemTable();

0 commit comments

Comments
 (0)