MySQL 8.4.2
Source Code Documentation
|
physical_capacity
(total size on disk except tmp files) | +- *2/LOG_N_FILES
| ("snake's head&tail cages") | +- *FREE_RATIO
("the snake's body") | +- OVERHEAD
| (space which shouldn't be used for deltas) | | | +- (LOG_N_FILES - 1) * LOG_FILE_HDR_SIZE
| | (file headers in cages with snake's body) | | | +- LOG_EXTRA_SAFETY_MARGIN
| (just in case) | +- lsn_capacity
(space to use for deltas) | +- next_file_earlier_margin
| ("snake's tongue" - we want to never need more than LOG_N_FILES-1) | +- hard_logical_capacity
(this is how log writer sees the capacity) | +- *LOG_EXTRA_WRITER_MARGIN_PCT/100
| (log writer's private workspace to pull of "desperate rescue") | +- soft_logical_capacity
(this is how threads other than log writer see the capacity) | +- free_check_margin
| (it's "reserved" - you may write to it, if you did reservation) | | | +- concurrency_margin
More...
#include <cmath>
#include "arch0arch.h"
#include "log0chkp.h"
#include "log0files_capacity.h"
#include "log0log.h"
#include "log0sys.h"
#include "log0test.h"
#include "log0types.h"
#include "srv0conc.h"
#include "srv0mon.h"
#include "srv0start.h"
#include "ut0byte.h"
Functions | |
void | log_files_capacity_get_limits (const log_t &log, lsn_t &limit_for_free_check, lsn_t &limit_for_dirty_page_age) |
Retrieves limitations determined by the current state of log.m_capacity. More... | |
physical_capacity
(total size on disk except tmp files) | +- *2/LOG_N_FILES
| ("snake's head&tail cages") | +- *FREE_RATIO
("the snake's body") | +- OVERHEAD
| (space which shouldn't be used for deltas) | | | +- (LOG_N_FILES - 1) * LOG_FILE_HDR_SIZE
| | (file headers in cages with snake's body) | | | +- LOG_EXTRA_SAFETY_MARGIN
| (just in case) | +- lsn_capacity
(space to use for deltas) | +- next_file_earlier_margin
| ("snake's tongue" - we want to never need more than LOG_N_FILES-1) | +- hard_logical_capacity
(this is how log writer sees the capacity) | +- *LOG_EXTRA_WRITER_MARGIN_PCT/100
| (log writer's private workspace to pull of "desperate rescue") | +- soft_logical_capacity
(this is how threads other than log writer see the capacity) | +- free_check_margin
| (it's "reserved" - you may write to it, if you did reservation) | | | +- concurrency_margin
(space jointly reserved by threads in log_free_check_wait) | |
---|---|
+- margin_per_thread * max_total_threads | |
+- LOG_FILES_DUMMY_INTAKE_SIZE |
| | | (dummy intake which might be required during redo resize) | | | | | +- LOG_EXTRA_CONC_MARGIN_PCT / 100.0 * soft_logical_capacity
| | (just in case) | | | +- dict_persist_margin
| (reserved for future dd metadata changes writes on checkpoint) | +- log_free_check_capacity
(if redo is this long threads should wait in log_free_check_wait)
void log_files_capacity_get_limits | ( | const log_t & | log, |
lsn_t & | limit_for_free_check, | ||
lsn_t & | limit_for_dirty_page_age | ||
) |
Retrieves limitations determined by the current state of log.m_capacity.
These values are retrieved atomically (are consistent with each other).
[in] | log | redo log |
[out] | limit_for_free_check | soft capacity of the redo decreased by the current free check margin; this is limit for size of redo until which the log_free_check calls do not force waits |
[out] | limit_for_dirty_page_age | limit for the oldest dirty page until which the async (adaptive) flushing is not forced to be started (it might be started if turned on explicitly by the innodb_adaptive_flushing); note that computation of this value include doing the subtraction of the current log free check margin |