22// / \author Леонид Юрьев aka Leonid Yuriev <leo@yuriev.ru> \date 2015-2026
33/* clang-format off */
44
5- #define MDBX_BUILD_SOURCERY bceb4cffb452beb8b344b66517dbfcc12ae8e80220a05240377f9d076620e4d6_v0_14_1_342_g630b73ee
5+ #define MDBX_BUILD_SOURCERY 35d50f8f41a42bcd4706e4e134e18c3639c68e07baedf49e507e3d9102ae445e_v0_14_1_345_g29db3c1c
66
77#define LIBMDBX_INTERNALS
88#define MDBX_DEPRECATED
@@ -2566,7 +2566,7 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline bool is_subpage(const
25662566}
25672567
25682568/* The version number for a database's lockfile format. */
2569- #define MDBX_LOCK_VERSION 6
2569+ #define MDBX_LOCK_VERSION 7
25702570
25712571#if MDBX_LOCKING == MDBX_LOCKING_WIN32FILES
25722572
@@ -2646,8 +2646,7 @@ typedef struct pgops {
26462646 gc_prof_stat_t work;
26472647 /* Затраты на поддержку и обновления самой GC */
26482648 gc_prof_stat_t self;
2649- /* Итераций обновления GC,
2650- * больше 1 если были повторы/перезапуски */
2649+ /* Итераций обновления GC, больше 1 если были повторы/перезапуски */
26512650 uint32_t wloops;
26522651 /* Итерации слияния записей GC */
26532652 uint32_t coalescences;
@@ -2657,6 +2656,10 @@ typedef struct pgops {
26572656 uint32_t flushes;
26582657 /* Попытки пнуть тормозящих читателей */
26592658 uint32_t kicks;
2659+ /* Максимальная замеченная разница между последним и самым старым читаемым MVCC-снимками */
2660+ uint32_t max_reader_lag;
2661+ /* Максимальное замеченное количество страниц удерживаемых от переработки из-за чтения старых MVCC-снимков */
2662+ uint32_t max_retained_pages;
26602663 } gc_prof;
26612664} pgop_stat_t ;
26622665
@@ -2792,19 +2795,22 @@ typedef struct shared_lck {
27922795 osal_ipclock_t wrt_lock;
27932796#endif /* MDBX_LOCKING > 0 */
27942797
2795- atomic_txnid_t cached_oldest;
2798+ /* Number un-synced-with-disk pages for auto-sync feature. */
2799+ mdbx_atomic_uint64_t unsynced_pages;
27962800
27972801 /* Timestamp of entering an out-of-sync state. Value is represented in a
27982802 * suitable system-dependent form, for example clock_gettime(CLOCK_BOOTTIME)
27992803 * or clock_gettime(CLOCK_MONOTONIC). */
28002804 mdbx_atomic_uint64_t eoos_timestamp;
28012805
2802- /* Number un-synced-with-disk pages for auto-sync feature. */
2803- mdbx_atomic_uint64_t unsynced_pages;
2804-
28052806 /* Timestamp of the last readers check. */
28062807 mdbx_atomic_uint64_t readers_check_timestamp;
28072808
2809+ struct {
2810+ atomic_txnid_t txnid;
2811+ mdbx_atomic_uint64_t retired;
2812+ } cached_oldest;
2813+
28082814 /* Number of page which was discarded last time by madvise(DONTNEED). */
28092815 atomic_pgno_t discarded_tail;
28102816
@@ -3825,10 +3831,14 @@ MDBX_INTERNAL int audit_ex(MDBX_txn *txn, size_t retired_stored, bool dont_filte
38253831/* mvcc-readers.c */
38263832MDBX_INTERNAL bsr_t mvcc_bind_slot (MDBX_env *env);
38273833MDBX_MAYBE_UNUSED MDBX_INTERNAL pgno_t mvcc_largest_this (MDBX_env *env, pgno_t largest);
3828- MDBX_INTERNAL txnid_t mvcc_shapshot_oldest (MDBX_env *const env, const txnid_t steady);
38293834MDBX_INTERNAL pgno_t mvcc_snapshot_largest (const MDBX_env *env, pgno_t last_used_page);
38303835MDBX_INTERNAL int mvcc_cleanup_dead (MDBX_env *env, int rlocked, int *dead);
3831- MDBX_INTERNAL bool mvcc_kick_laggards (MDBX_env *env, const txnid_t laggard);
3836+ MDBX_INTERNAL bool mvcc_kick_laggards (MDBX_txn *txn, const txnid_t laggard);
3837+ typedef struct oldest_readed_shapshot_into {
3838+ txnid_t oldest_txnid, steady_txnid;
3839+ } orsi_t ;
3840+
3841+ MDBX_INTERNAL orsi_t mvcc_shapshot_oldest (const MDBX_txn *const txn);
38323842
38333843/* dxb.c */
38343844MDBX_INTERNAL int dxb_setup (MDBX_env *env, const int lck_rc, const mdbx_mode_t mode_bits);
@@ -4870,7 +4880,7 @@ MDBX_MAYBE_UNUSED static void static_checks(void) {
48704880 STATIC_ASSERT (offsetof (lck_t , wrt_lock) % MDBX_CACHELINE_SIZE == 0 );
48714881 STATIC_ASSERT (offsetof (lck_t , rdt_lock) % MDBX_CACHELINE_SIZE == 0 );
48724882#else
4873- STATIC_ASSERT (offsetof (lck_t , cached_oldest ) % MDBX_CACHELINE_SIZE == 0 );
4883+ STATIC_ASSERT (offsetof (lck_t , unsynced_pages ) % MDBX_CACHELINE_SIZE == 0 );
48744884 STATIC_ASSERT (offsetof (lck_t , rdt_length) % MDBX_CACHELINE_SIZE == 0 );
48754885#endif /* MDBX_LOCKING */
48764886#if FLEXIBLE_ARRAY_MEMBERS
0 commit comments