2022-01-15 18:50:22 +03:00
|
|
|
.\" Copyright 2015-2022 Leonid Yuriev <leo@yuriev.ru>.
|
2017-05-24 01:07:15 +03:00
|
|
|
.\" Copyright 2014-2015 Howard Chu, Symas Corp. All Rights Reserved.
|
2017-01-01 14:56:00 +03:00
|
|
|
.\" Copyright 2015,2016 Peter-Service R&D LLC <http://billing.ru/>.
|
2015-01-07 16:49:50 +03:00
|
|
|
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
|
mdbx: выпуск v0.12.2 (Иван Ярыгин)
Выпуск с существенными доработками и новой функциональностью
в память о российском борце [Иване Сергеевиче Ярыгине](https://ru.wikipedia.org/wiki/Ярыгин,_Иван_Сергеевич).
На Олимпийских играх в Мюнхене в 1972 году Иван Ярыгин уложил всех соперников на лопатки,
суммарно затратив менее 9 минут. Этот рекорд никем не побит до сих пор.
Новое:
------
- Поддержка всех основных опций при сборке посредством CMake.
- Требования к CMake понижены до версии 3.0.2 для возможности сборки для устаревших платформ.
- Добавлена возможность профилирования работы GC в сложных и/или нагруженных
сценариях (например Ethereum/Erigon). По-умолчанию соответствующий код отключен,
а для его активации необходимо указать опцию сборки `MDBX_ENABLE_PROFGC=1`.
- Добавлена функция `mdbx_env_warmup()` для "прогрева" БД с возможностью
закрепления страниц в памяти.
В утилиты `mdbx_chk`, `mdbx_copy` и `mdbx_dump` добавлены опции `-u` и `-U`
для активации соответствующего функционала.
- Отключение учета «грязных» страниц в не требующих этого режимах
(`MDBX_WRITEMAP` при `MDBX_AVOID_MSYNC=0`). Доработка позволяет снизить
накладные расходы и была запланирована давно, но откладывалась так как
требовала других изменений.
- Вытеснение из памяти (спиллинг) «грязных» страниц с учетом размера
large/overflow-страниц. Доработка позволяет корректно соблюдать политику
задаваемую опциями `MDBX_opt_txn_dp_limit`,
`MDBX_opt_spill_max_denominator`, `MDBX_opt_spill_min_denominator` и
была запланирована давно, но откладывалась так как требовала других
изменений.
- Для Windows в API добавлены UNICODE-зависимые определения макросов
`MDBX_DATANAME`, `MDBX_LOCKNAME` и `MDBX_LOCK_SUFFIX`.
- Переход на преимущественное использование типа `size_t` для
уменьшения накладных расходов на платформе Эльбрус.
- В API добавлены функции `mdbx_limits_valsize4page_max()` и
`mdbx_env_get_valsize4page_max()` возвращающие максимальный размер в
байтах значения, которое может быть размещена в одной
large/overflow-странице, а не последовательности из двух или более таких
страниц. Для таблиц с поддержкой дубликатов вынос значений на
large/overflow-страницы не поддерживается, поэтому результат совпадает с
`mdbx_limits_valsize_max()`.
- В API добавлены функции `mdbx_limits_pairsize4page_max()`и
`mdbx_env_get_pairsize4page_max()` возвращающие в байтах максимальный
суммарный размер пары ключ-значение для их размещения на одной листовой
страницы, без выноса значения на отдельную large/overflow-страницу. Для
таблиц с поддержкой дубликатов вынос значений на large/overflow-страницы
не поддерживается, поэтому результат определяет максимальный/допустимый
суммарный размер пары ключ-значение.
- Реализовано использование асинхронной (overlapped) записи в Windows,
включая использования небуфферизированного ввода-вывода и `WriteGather()`.
Это позволяет сократить накладные расходы и частично обойти проблемы
Windows с низкой производительностью ввода-вывода, включая большие
задержки `FlushFileBuffers()`. Новый код также обеспечивает консолидацию
записываемых регионов на всех платформах, а на Windows использование
событий (events) сведено к минимум, одновременно с автоматических
использованием `WriteGather()`. Поэтому ожидается существенное снижение
накладных расходов взаимодействия с ОС, а в Windows это ускорение, в
некоторых сценариях, может быть кратным в сравнении с LMDB.
- Добавлена опция сборки `MDBX_AVOID_MSYNC`, которая определяет
поведение libmdbx в режиме `MDBX_WRITE_MAP` (когда данные изменяются
непосредственно в отображенных в ОЗУ страницах БД):
* Если `MDBX_AVOID_MSYNC=0` (по умолчанию на всех системах кроме Windows),
то (как прежде) сохранение данных выполняется посредством `msync()`,
либо `FlushViewOfFile()` на Windows. На платформах с полноценной
подсистемой виртуальной памяти и адекватным файловым вводом-выводом
это обеспечивает минимум накладных расходов (один системный вызов)
и максимальную производительность. Однако, на Windows приводит
к значительной деградации, в том числе из-за того что после
`FlushViewOfFile()` требуется также вызов `FlushFileBuffers()`
с массой проблем и суеты внутри ядра ОС.
* Если `MDBX_AVOID_MSYNC=1` (по умолчанию только на Windows), то
сохранение данных выполняется явной записью в файл каждой измененной
страницы БД. Это требует дополнительных накладных расходов, как
на отслеживание измененных страниц (ведение списков "грязных"
страниц), так и на системные вызовы для их записи.
Кроме этого, с точки зрения подсистемы виртуальной памяти ядра ОС,
страницы БД измененные в ОЗУ и явно записанные в файл, могут либо
оставаться "грязными" и быть повторно записаны ядром ОС позже,
либо требовать дополнительных накладных расходов для отслеживания
PTE (Page Table Entries), их модификации и дополнительного копирования
данных. Тем не менее, по имеющейся информации, на Windows такой путь
записи данных в целом обеспечивает более высокую производительность.
- Улучшение эвристики включения авто-слияния записей GC.
- Изменение формата LCK и семантики некоторых внутренних полей. Версии
libmdbx использующие разный формат не смогут работать с одной БД
одновременно, а только поочередно (LCK-файл переписывается при открытии
первым открывающим БД процессом).
- В `C++` API добавлены методы фиксации транзакции с получением информации
о задержках.
- Added `MDBX_HAVE_BUILT IN_CPU_SUPPORTS` build option to control use GCC's
`__builtin_cpu_supports()` function, which could be unavailable on a fake
OSes (macos, ios, android, etc).
Исправления (без корректировок вышеперечисленных новых функций):
----------------------------------------------------------------
- Устранения ряда предупреждений при сборке посредством MinGW.
- Устранение ложно-положительных сообщений от Valgrind об использовании
не инициализированных данных из-за выравнивающих зазоров в `struct troika`.
- Исправлен возврат неожиданной ошибки `MDBX_BUSY` из функций `mdbx_env_set_option()`,
`mdbx_env_set_syncbytes()` и `mdbx_env_set_syncperiod()`.
- Небольшие исправления для совместимости с CMake 3.8
- Больше контроля и осторожности (паранойи) для страховки от дефектов `mremap()`.
- Костыль для починки сборки со старыми версиями `stdatomic.h` из GNU Lib C,
где макросы `ATOMIC_*_LOCK_FREE` ошибочно переопределяются через функции.
- Использование `fcntl64(F_GETLK64/F_SETLK64/F_SETLKW64)` при наличии.
Это решает проблему срабатывания проверочного утверждения при сборке для
платформ где тип `off_t` шире соответствующих полей `структуры flock`,
используемой для блокировки файлов.
- Доработан сбор информации о задержках при фиксации транзакций:
* Устранено искажение замеров длительности обновления GC
при включении отладочного внутреннего аудита;
* Защита от undeflow-нуля только общей задержки в метриках,
чтобы исключить ситуации, когда сумма отдельных стадий
больше общей длительности.
- Ряд исправлений для устранения срабатываний проверочных утверждения в
отладочных сборках.
- Более осторожное преобразование к типу `mdbx_tid_t` для устранения
предупреждений.
- Исправление лишнего сброса данных на диск в режиме `MDBX_SAFE_NOSYNC`
при обновлении GC.
- Fixed an extra check for `MDBX_APPENDDUP` inside `mdbx_cursor_put()`
which could result in returning `MDBX_EKEYMISMATCH` for valid cases.
- Fixed nasty `clz()` bug (by using `_BitScanReverse()`, only MSVC builds affected).
Мелочи:
-------
- Исторические ссылки cвязанные с удалённым на ~~github~~ проектом перенаправлены на [web.archive.org](https://web.archive.org/web/https://github.com/erthink/libmdbx).
- Синхронизированны конструкции CMake между проектами.
- Добавлено предупреждение о небезопасности RISC-V.
- Добавлено описание параметров `MDBX_debug_func` и `MDBX_debug_func`.
- Добавлено обходное решение для минимизации ложно-положительных
конфликтов при использовании файловых блокировок в Windows.
- Проверка атомарности C11-операций c 32/64-битными данными.
- Уменьшение в 42 раза значения по-умолчанию для `me_options.dp_limit`
в отладочных сборках.
- Добавление платформы `gcc-riscv64-linux-gnu` в список для цели `cross-gcc`.
- Небольшие правки скрипта `long_stochastic.sh` для работы в Windows.
- Удаление ненужного вызова `LockFileEx()` внутри `mdbx_env_copy()`.
- Добавлено описание использования файловых дескрипторов в различных режимах.
- Добавлено использование `_CrtDbgReport()` в отладочных сборках.
- Fixed an extra ensure/assertion check of `oldest_reader` inside `txn_end()`.
- Removed description of deprecated usage of `MDBX_NODUPDATA`.
- Fixed regression ASAN/Valgring-enabled builds.
- Fixed minor MingGW warning.
64 files changed, 5573 insertions(+), 2510 deletions(-)
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
2022-11-11 17:35:32 +03:00
|
|
|
.TH MDBX_LOAD 1 "2022-11-11" "MDBX 0.12.2"
|
2015-01-07 16:49:50 +03:00
|
|
|
.SH NAME
|
2017-05-24 01:42:10 +03:00
|
|
|
mdbx_load \- MDBX environment import tool
|
2015-01-07 16:49:50 +03:00
|
|
|
.SH SYNOPSIS
|
2017-02-21 20:16:54 +03:00
|
|
|
.B mdbx_load
|
2015-01-07 16:49:50 +03:00
|
|
|
[\c
|
|
|
|
.BR \-V ]
|
|
|
|
[\c
|
2019-12-05 01:43:57 +03:00
|
|
|
.BR \-q ]
|
2015-01-07 16:49:50 +03:00
|
|
|
[\c
|
2019-12-05 01:43:57 +03:00
|
|
|
.BR \-a ]
|
|
|
|
[\c
|
|
|
|
.BI \-f \ file\fR]
|
2015-01-07 16:49:50 +03:00
|
|
|
[\c
|
|
|
|
.BI \-s \ subdb\fR]
|
|
|
|
[\c
|
|
|
|
.BR \-N ]
|
|
|
|
[\c
|
|
|
|
.BR \-T ]
|
2019-12-05 01:43:57 +03:00
|
|
|
[\c
|
|
|
|
.BR \-r ]
|
|
|
|
[\c
|
|
|
|
.BR \-n ]
|
|
|
|
.BR \ dbpath
|
2015-01-07 16:49:50 +03:00
|
|
|
.SH DESCRIPTION
|
|
|
|
The
|
2017-02-21 20:16:54 +03:00
|
|
|
.B mdbx_load
|
2015-01-07 16:49:50 +03:00
|
|
|
utility reads from the standard input and loads it into the
|
2017-05-24 01:42:10 +03:00
|
|
|
MDBX environment
|
2019-12-05 01:43:57 +03:00
|
|
|
.BR dbpath .
|
2015-01-07 16:49:50 +03:00
|
|
|
|
|
|
|
The input to
|
2017-02-21 20:16:54 +03:00
|
|
|
.B mdbx_load
|
2015-01-07 16:49:50 +03:00
|
|
|
must be in the output format specified by the
|
2017-02-21 20:16:54 +03:00
|
|
|
.BR mdbx_dump (1)
|
2015-01-07 16:49:50 +03:00
|
|
|
utility or as specified by the
|
|
|
|
.B -T
|
|
|
|
option below.
|
2020-09-25 02:10:55 +03:00
|
|
|
|
|
|
|
A simple escape mechanism, where newline and backslash (\\) characters are special, is
|
|
|
|
applied to the text input. Newline characters are interpreted as record separators.
|
|
|
|
Backslash characters in the text will be interpreted in one of two ways: If the backslash
|
|
|
|
character precedes another backslash character, the pair will be interpreted as a literal
|
|
|
|
backslash. If the backslash character precedes any other character, the two characters
|
|
|
|
following the backslash will be interpreted as a hexadecimal specification of a single
|
|
|
|
character; for example, \\0a is a newline character in the ASCII character set.
|
|
|
|
|
|
|
|
For this reason, any backslash or newline characters that naturally occur in the text
|
|
|
|
input must be escaped to avoid misinterpretation by
|
|
|
|
.BR mdbx_load .
|
|
|
|
|
2015-01-07 16:49:50 +03:00
|
|
|
.SH OPTIONS
|
|
|
|
.TP
|
|
|
|
.BR \-V
|
|
|
|
Write the library version number to the standard output, and exit.
|
|
|
|
.TP
|
2019-12-05 01:43:57 +03:00
|
|
|
.BR \-q
|
|
|
|
Be quiet.
|
|
|
|
.TP
|
2019-02-03 15:49:40 +03:00
|
|
|
.BR \-a
|
|
|
|
Append all records in the order they appear in the input. The input is assumed to already be
|
|
|
|
in correctly sorted order and no sorting or checking for redundant values will be performed.
|
|
|
|
This option must be used to reload data that was produced by running
|
|
|
|
.B mdbx_dump
|
|
|
|
on a database that uses custom compare functions.
|
|
|
|
.TP
|
2015-01-07 16:49:50 +03:00
|
|
|
.BR \-f \ file
|
|
|
|
Read from the specified file instead of from the standard input.
|
|
|
|
.TP
|
|
|
|
.BR \-s \ subdb
|
|
|
|
Load a specific subdatabase. If no database is specified, data is loaded into the main database.
|
|
|
|
.TP
|
|
|
|
.BR \-N
|
|
|
|
Don't overwrite existing records when loading into an already existing database; just skip them.
|
|
|
|
.TP
|
|
|
|
.BR \-T
|
|
|
|
Load data from simple text files. The input must be paired lines of text, where the first
|
|
|
|
line of the pair is the key item, and the second line of the pair is its corresponding
|
|
|
|
data item.
|
2019-12-05 01:43:57 +03:00
|
|
|
.TP
|
|
|
|
.BR \-r
|
|
|
|
Rescure mode. Ignore errors to load corrupted DB dump.
|
|
|
|
.TP
|
|
|
|
.BR \-n
|
|
|
|
Load an MDBX database which does not use subdirectories.
|
2020-09-25 02:10:55 +03:00
|
|
|
This is legacy option. For now MDBX handles this automatically.
|
2020-09-28 15:37:47 +03:00
|
|
|
|
2015-01-07 16:49:50 +03:00
|
|
|
.SH DIAGNOSTICS
|
|
|
|
Exit status is zero if no errors occur.
|
|
|
|
Errors result in a non-zero exit status and
|
|
|
|
a diagnostic message being written to standard error.
|
|
|
|
|
|
|
|
.SH "SEE ALSO"
|
2019-09-10 16:08:21 +03:00
|
|
|
.BR mdbx_dump (1),
|
|
|
|
.BR mdbx_chk (1),
|
|
|
|
.BR mdbx_stat (1),
|
|
|
|
.BR mdbx_copy (1)
|
2021-03-10 14:43:49 +03:00
|
|
|
.BR mdbx_drop (1)
|
2015-01-07 16:49:50 +03:00
|
|
|
.SH AUTHOR
|
2019-12-05 01:43:57 +03:00
|
|
|
Howard Chu of Symas Corporation <http://www.symas.com>,
|
2022-04-20 06:42:16 +03:00
|
|
|
Leonid Yuriev <https://gitflic.ru/user/erthink>
|