libmdbx/src/bits.md
Леонид Юрьев (Leonid Yuriev) e6af7d7c53 mdbx: переработка инициализации, проверки и импорта dbi-хендлов в транзакциях.
Ранее инициализация в транзакциях структур данных, связанных с
dbi-хендлами и subDb, выполнялась непосредственно при запуске
транзакций. Что в сценариях с большим кол-вом dbi-дексприторов (например
libfpta) порождало заметные накладные расходы, которые расли линейно от
общего кол-ва открытых subDb, а не от реально используемых в транзакции.
При использовании одной-двух сотен хендлов, при старте каждой транзакции
могли копироваться и/или обнуляться десятки килобайт. Теперь этот
недостаток устранен.

Изменена схема инициализации, валидации и импорта хендлов открытых после
старта транзакции:

1) Инициализация теперь выполняется отложенна, а при старте транзации
   обнуляется только массив с однобайтовыми статустами dbi-хендлов.
   При этом доступнва опция сборки `MDBX_ENABLE_DBI_SPARSE`, при активации
   которой используется битовая карты, что снижает объем инициализации
   при старте транзакции в 8 раз (CHAR_BIT).

2) Переработана валидация dbi-хендлов на входах API, с уменьшением кол-ва
   проверок и ветвлений до теоретического минимума.

3) Переработ импорт dbi-хендов открытых после старта транзакци, теперь
   при этом не захватывается мьютекс.
2023-11-11 12:29:10 +03:00

3.6 KiB

N MASK ENV TXN DB PUT DBI NODE PAGE MRESIZE
0 0000 0001 ALLOC_RSRV TXN_FINISHED DBI_DIRTY F_BIGDATA P_BRANCH
1 0000 0002 ALLOC_UNIMP TXN_ERROR REVERSEKEY F_SUBDATA DBI_STALE F_SUBDATA P_LEAF
2 0000 0004 ALLOC_COLSC TXN_DIRTY DUPSORT DBI_FRESH F_DUPDATA P_OVERFLOW
3 0000 0008 ALLOC_SSCAN TXN_SPILLS INTEGERKEY DBI_CREAT P_META
4 0000 0010 ALLOC_FIFO TXN_HAS_CHILD DUPFIXED NOOVERWRITE DBI_VALID P_BAD
5 0000 0020 TXN_DRAINED_GC INTEGERDUP NODUPDATA P_LEAF2
6 0000 0040 REVERSEDUP CURRENT DBI_OLDEN P_SUBP
7 0000 0080 ALLDUPS DBI_LINDO
8 0000 0100 _MAY_MOVE <=
9 0000 0200 _MAY_UNMAP <=
10 0000 0400
11 0000 0800
12 0000 1000
13 0000 2000 VALIDATION P_SPILLED
14 0000 4000 NOSUBDIR P_LOOSE
15 0000 8000 DB_VALID P_FROZEN
16 0001 0000 SAFE_NOSYNC TXN_NOSYNC RESERVE RESERVE
17 0002 0000 RDONLY TXN_RDONLY APPEND APPEND <=
18 0004 0000 NOMETASYNC TXN_NOMETASYNC CREATE APPENDDUP
19 0008 0000 WRITEMAP <= MULTIPLE <=
20 0010 0000 UTTERLY <=
21 0020 0000 NOTLS <=
22 0040 0000 EXCLUSIVE
23 0080 0000 NORDAHEAD
24 0100 0000 NOMEMINIT TXN_PREPARE
25 0200 0000 COALESCE
26 0400 0000 LIFORECLAIM
27 0800 0000 PAGEPERTURB
28 1000 0000 ENV_TXKEY TXN_TRY
29 2000 0000 ENV_ACTIVE
30 4000 0000 ACCEDE SHRINK_ALLOWED DB_ACCEDE
31 8000 0000 FATAL_ERROR