mirror of
				https://github.com/isar/libmdbx.git
				synced 2025-10-31 03:29:01 +08:00 
			
		
		
		
	Ранее инициализация в транзакциях структур данных, связанных с dbi-хендлами и subDb, выполнялась непосредственно при запуске транзакций. Что в сценариях с большим кол-вом dbi-дексприторов (например libfpta) порождало заметные накладные расходы, которые расли линейно от общего кол-ва открытых subDb, а не от реально используемых в транзакции. При использовании одной-двух сотен хендлов, при старте каждой транзакции могли копироваться и/или обнуляться десятки килобайт. Теперь этот недостаток устранен. Изменена схема инициализации, валидации и импорта хендлов открытых после старта транзакции: 1) Инициализация теперь выполняется отложенна, а при старте транзации обнуляется только массив с однобайтовыми статустами dbi-хендлов. При этом доступнва опция сборки `MDBX_ENABLE_DBI_SPARSE`, при активации которой используется битовая карты, что снижает объем инициализации при старте транзакции в 8 раз (CHAR_BIT). 2) Переработана валидация dbi-хендлов на входах API, с уменьшением кол-ва проверок и ветвлений до теоретического минимума. 3) Переработ импорт dbi-хендов открытых после старта транзакци, теперь при этом не захватывается мьютекс.
		
			
				
	
	
	
		
			3.6 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			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 |