2022-01-15 18:50:22 +03:00
|
|
|
.\" Copyright 2015-2022 Leonid Yuriev <leo@yuriev.ru>.
|
2019-09-10 16:08:21 +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_CHK 1 "2022-11-11" "MDBX 0.12.2"
|
2019-09-10 16:08:21 +03:00
|
|
|
.SH NAME
|
|
|
|
mdbx_chk \- MDBX checking tool
|
|
|
|
.SH SYNOPSIS
|
|
|
|
.B mdbx_chk
|
|
|
|
[\c
|
|
|
|
.BR \-V ]
|
|
|
|
[\c
|
|
|
|
.BR \-v [ v [ v ]]]
|
|
|
|
[\c
|
|
|
|
.BR \-n ]
|
|
|
|
[\c
|
|
|
|
.BR \-q ]
|
|
|
|
[\c
|
2019-12-05 01:43:57 +03:00
|
|
|
.BR \-c ]
|
|
|
|
[\c
|
2019-09-10 16:08:21 +03:00
|
|
|
.BR \-w ]
|
|
|
|
[\c
|
|
|
|
.BR \-d ]
|
|
|
|
[\c
|
|
|
|
.BR \-i ]
|
2019-12-05 01:43:57 +03:00
|
|
|
[\c
|
|
|
|
.BI \-s \ subdb\fR]
|
|
|
|
.BR \ dbpath
|
2019-09-10 16:08:21 +03:00
|
|
|
.SH DESCRIPTION
|
|
|
|
The
|
|
|
|
.B mdbx_chk
|
|
|
|
utility intended to check an MDBX database file.
|
|
|
|
.SH OPTIONS
|
|
|
|
.TP
|
|
|
|
.BR \-V
|
|
|
|
Write the library version number to the standard output, and exit.
|
|
|
|
.TP
|
|
|
|
.BR \-v
|
|
|
|
Produce verbose output, including summarize space and page usage statistics.
|
|
|
|
If \fB\-vv\fP is given, be more verbose, show summarized B-tree info
|
|
|
|
and space allocation.
|
|
|
|
If \fB\-vvv\fP is given, be more verbose, include summarized statistics
|
|
|
|
of leaf B-tree pages.
|
|
|
|
If \fB\-vvvv\fP is given, be even more verbose, show info of each page
|
|
|
|
during B-tree traversal and basic info of each GC record.
|
|
|
|
If \fB\-vvvvv\fP is given, turn maximal verbosity, display the full list
|
|
|
|
of page IDs in the GC records and size of each key-value pair of database(s).
|
|
|
|
.TP
|
|
|
|
.BR \-q
|
|
|
|
Be quiet; do not output anything even if an error was detected.
|
|
|
|
.TP
|
2019-12-05 01:43:57 +03:00
|
|
|
.BR \-c
|
|
|
|
Force using cooperative mode while opening environment, i.e. don't try to open
|
|
|
|
in exclusive/monopolistic mode. Only exclusive/monopolistic mode allow complete
|
|
|
|
check, including full check of all meta-pages and actual size of database file.
|
|
|
|
.TP
|
2019-09-10 16:08:21 +03:00
|
|
|
.BR \-w
|
|
|
|
Open environment in read-write mode and lock for writing while checking.
|
|
|
|
This could be impossible if environment already used by another process(s)
|
|
|
|
in an incompatible read-write mode. This allow rollback to last steady commit
|
|
|
|
(in case environment was not closed properly) and then check transaction IDs
|
|
|
|
of meta-pages. Otherwise, without \fB\-w\fP option environment will be
|
|
|
|
opened in read-only mode.
|
|
|
|
.TP
|
|
|
|
.BR \-d
|
|
|
|
Disable page-by-page traversal of B-tree. In this case, without B-tree
|
|
|
|
traversal, it is unable to check for lost-unused pages nor for double-used
|
|
|
|
pages.
|
|
|
|
.TP
|
|
|
|
.BR \-i
|
|
|
|
Ignore wrong order errors, which will likely false-positive if custom
|
|
|
|
comparator(s) was used.
|
2019-12-05 01:43:57 +03:00
|
|
|
.TP
|
|
|
|
.BR \-s \ subdb
|
|
|
|
Verify and show info only for a specific subdatabase.
|
2020-09-25 02:10:55 +03:00
|
|
|
.TP
|
|
|
|
.BR \-0 | \-1 | \-2
|
|
|
|
Using specific meta-page 0, or 2 for checking.
|
|
|
|
.TP
|
|
|
|
.BR \-t
|
|
|
|
Turn to a specified meta-page on successful check.
|
|
|
|
.TP
|
|
|
|
.BR \-T
|
|
|
|
Turn to a specified meta-page EVEN ON UNSUCCESSFUL CHECK!
|
|
|
|
.TP
|
2022-11-11 16:44:51 +03:00
|
|
|
.BR \-u
|
|
|
|
Warms up the DB before checking via notifying OS kernel of subsequent access to the database pages.
|
|
|
|
.TP
|
|
|
|
.BR \-U
|
|
|
|
Warms up the DB before checking, notifying the OS kernel of subsequent access to the database pages,
|
|
|
|
then forcibly loads ones by sequential access and tries to lock database pages in memory.
|
|
|
|
.TP
|
2020-09-25 02:10:55 +03:00
|
|
|
.BR \-n
|
|
|
|
Open MDBX environment(s) which do not use subdirectories.
|
|
|
|
This is legacy option. For now MDBX handles this automatically.
|
2020-09-28 15:37:47 +03:00
|
|
|
|
2019-09-10 16:08:21 +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
|
|
|
|
if no quiet mode was requested.
|
|
|
|
.SH "SEE ALSO"
|
|
|
|
.BR mdbx_stat (1),
|
|
|
|
.BR mdbx_copy (1),
|
|
|
|
.BR mdbx_dump (1),
|
|
|
|
.BR mdbx_load (1)
|
2021-03-10 14:43:49 +03:00
|
|
|
.BR mdbx_drop (1)
|
2019-09-10 16:08:21 +03:00
|
|
|
.SH AUTHOR
|
2022-04-20 06:42:16 +03:00
|
|
|
Leonid Yuriev <https://gitflic.ru/user/erthink>
|