MySQL 5.6.14 Source Code Document
|
#include "univ.i"
#include "ut0byte.h"
#include "ut0lst.h"
#include "sync0sync.h"
#include "sync0rw.h"
#include "log0log.ic"
Go to the source code of this file.
Classes | |
struct | log_group_t |
struct | log_t |
Macros | |
#define | LSN_MAX IB_UINT64_MAX |
#define | LSN_PF UINT64PF |
#define | log_do_write TRUE |
#define | LOG_MAX_N_GROUPS 32 |
#define | LOG_FLUSH 7652559 |
#define | LOG_CHECKPOINT 78656949 |
#define | LOG_RECOVER 98887331 |
#define | LOG_START_LSN ((lsn_t) (16 * OS_FILE_LOG_BLOCK_SIZE)) |
#define | LOG_BUFFER_SIZE (srv_log_buffer_size * UNIV_PAGE_SIZE) |
#define | LOG_ARCHIVE_BUF_SIZE (srv_log_buffer_size * UNIV_PAGE_SIZE / 4) |
#define | LOG_BLOCK_HDR_NO |
#define | LOG_BLOCK_FLUSH_BIT_MASK 0x80000000UL |
#define | LOG_BLOCK_HDR_DATA_LEN |
#define | LOG_BLOCK_FIRST_REC_GROUP |
#define | LOG_BLOCK_CHECKPOINT_NO |
#define | LOG_BLOCK_HDR_SIZE |
#define | LOG_BLOCK_CHECKSUM |
#define | LOG_BLOCK_TRL_SIZE 4 /* trailer size in bytes */ |
#define | LOG_CHECKPOINT_NO 0 |
#define | LOG_CHECKPOINT_LSN 8 |
#define | LOG_CHECKPOINT_OFFSET_LOW32 16 |
#define | LOG_CHECKPOINT_LOG_BUF_SIZE 20 |
#define | LOG_CHECKPOINT_ARCHIVED_LSN 24 |
#define | LOG_CHECKPOINT_GROUP_ARRAY 32 |
#define | LOG_CHECKPOINT_ARCHIVED_FILE_NO 0 |
#define | LOG_CHECKPOINT_ARCHIVED_OFFSET 4 |
#define | LOG_CHECKPOINT_ARRAY_END |
#define | LOG_CHECKPOINT_CHECKSUM_1 LOG_CHECKPOINT_ARRAY_END |
#define | LOG_CHECKPOINT_CHECKSUM_2 (4 + LOG_CHECKPOINT_ARRAY_END) |
#define | LOG_CHECKPOINT_OFFSET_HIGH32 (16 + LOG_CHECKPOINT_ARRAY_END) |
#define | LOG_CHECKPOINT_SIZE (20 + LOG_CHECKPOINT_ARRAY_END) |
#define | LOG_GROUP_ID 0 /* log group number */ |
#define | LOG_FILE_START_LSN |
#define | LOG_FILE_NO |
#define | LOG_FILE_WAS_CREATED_BY_HOT_BACKUP 16 |
#define | LOG_FILE_ARCH_COMPLETED OS_FILE_LOG_BLOCK_SIZE |
#define | LOG_FILE_END_LSN (OS_FILE_LOG_BLOCK_SIZE + 4) |
#define | LOG_CHECKPOINT_1 OS_FILE_LOG_BLOCK_SIZE |
#define | LOG_CHECKPOINT_2 (3 * OS_FILE_LOG_BLOCK_SIZE) |
#define | LOG_FILE_HDR_SIZE (4 * OS_FILE_LOG_BLOCK_SIZE) |
#define | LOG_GROUP_OK 301 |
#define | LOG_GROUP_CORRUPTED 302 |
#define | log_flush_order_mutex_own() mutex_own(&log_sys->log_flush_order_mutex) |
#define | log_flush_order_mutex_enter() |
#define | log_flush_order_mutex_exit() |
#define | LOG_NO_WAIT 91 |
#define | LOG_WAIT_ONE_GROUP 92 |
#define | LOG_WAIT_ALL_GROUPS 93 |
Typedefs | |
typedef ib_uint64_t | lsn_t |
Functions | |
UNIV_INTERN ulint | log_calc_where_lsn_is (ib_int64_t *log_file_offset, ib_uint64_t first_header_lsn, ib_uint64_t lsn, ulint n_log_files, ib_int64_t log_file_size) |
UNIV_INLINE lsn_t | log_reserve_and_write_fast (const void *str, ulint len, lsn_t *start_lsn) |
UNIV_INLINE void | log_release (void) |
UNIV_INLINE void | log_free_check (void) |
UNIV_INTERN lsn_t | log_reserve_and_open (ulint len) |
UNIV_INTERN void | log_write_low (byte *str, ulint str_len) |
UNIV_INTERN lsn_t | log_close (void) |
UNIV_INLINE lsn_t | log_get_lsn (void) |
UNIV_INLINE lsn_t | log_get_capacity (void) |
UNIV_INLINE lsn_t | log_get_max_modified_age_async (void) |
UNIV_INTERN void | log_init (void) |
UNIV_INTERN void | log_group_init (ulint id, ulint n_files, lsn_t file_size, ulint space_id, ulint archive_space_id) |
UNIV_INTERN void | log_io_complete (log_group_t *group) |
UNIV_INTERN void | log_write_up_to (lsn_t lsn, ulint wait, ibool flush_to_disk) |
UNIV_INTERN void | log_buffer_flush_to_disk (void) |
UNIV_INTERN void | log_buffer_sync_in_background (ibool flush) |
UNIV_INTERN ibool | log_checkpoint (ibool sync, ibool write_always) |
UNIV_INTERN void | log_make_checkpoint_at (lsn_t lsn, ibool write_always) |
UNIV_INTERN void | logs_empty_and_mark_files_at_shutdown (void) |
UNIV_INTERN void | log_group_read_checkpoint_info (log_group_t *group, ulint field) |
UNIV_INTERN void | log_checkpoint_get_nth_group_info (const byte *buf, ulint n, ulint *file_no, ulint *offset) |
UNIV_INTERN void | log_groups_write_checkpoint_info (void) |
UNIV_INTERN ibool | log_archive_do (ibool sync, ulint *n_bytes) |
UNIV_INTERN ulint | log_archive_stop (void) |
UNIV_INTERN ulint | log_archive_start (void) |
UNIV_INTERN ulint | log_archive_noarchivelog (void) |
UNIV_INTERN ulint | log_archive_archivelog (void) |
UNIV_INTERN void | log_archived_file_name_gen (char *buf, ulint id, ulint file_no) |
UNIV_INTERN void | log_check_margins (void) |
UNIV_INTERN void | log_group_read_log_seg (ulint type, byte *buf, log_group_t *group, lsn_t start_lsn, lsn_t end_lsn) |
UNIV_INTERN void | log_group_write_buf (log_group_t *group, byte *buf, ulint len, lsn_t start_lsn, ulint new_data_offset) |
UNIV_INTERN void | log_group_set_fields (log_group_t *group, lsn_t lsn) |
UNIV_INTERN lsn_t | log_group_get_capacity (const log_group_t *group) |
UNIV_INLINE ibool | log_block_get_flush_bit (const byte *log_block) |
UNIV_INLINE ulint | log_block_get_hdr_no (const byte *log_block) |
UNIV_INLINE ulint | log_block_get_data_len (const byte *log_block) |
UNIV_INLINE void | log_block_set_data_len (byte *log_block, ulint len) |
UNIV_INLINE ulint | log_block_calc_checksum (const byte *block) |
UNIV_INLINE ulint | log_block_get_checksum (const byte *log_block) |
UNIV_INLINE void | log_block_set_checksum (byte *log_block, ulint checksum) |
UNIV_INLINE ulint | log_block_get_first_rec_group (const byte *log_block) |
UNIV_INLINE void | log_block_set_first_rec_group (byte *log_block, ulint offset) |
UNIV_INLINE ulint | log_block_get_checkpoint_no (const byte *log_block) |
UNIV_INLINE void | log_block_init (byte *log_block, lsn_t lsn) |
UNIV_INLINE void | log_block_init_in_old_format (byte *log_block, lsn_t lsn) |
UNIV_INLINE ulint | log_block_convert_lsn_to_no (lsn_t lsn) |
UNIV_INTERN void | log_print (FILE *file) |
UNIV_INTERN ibool | log_peek_lsn (lsn_t *lsn) |
UNIV_INTERN void | log_refresh_stats (void) |
UNIV_INTERN void | log_group_close_all (void) |
UNIV_INTERN void | log_shutdown (void) |
UNIV_INTERN void | log_mem_free (void) |
Variables | |
log_t * | log_sys |
#define LOG_BLOCK_CHECKPOINT_NO |
#define LOG_BLOCK_CHECKSUM |
#define LOG_BLOCK_FIRST_REC_GROUP |
#define LOG_BLOCK_HDR_DATA_LEN |
#define LOG_BLOCK_HDR_NO |
#define LOG_BLOCK_HDR_SIZE |
#define LOG_CHECKPOINT_ARRAY_END |
#define LOG_FILE_NO |
#define LOG_FILE_START_LSN |
#define log_flush_order_mutex_enter | ( | ) |
Acquire the flush order mutex.
#define log_flush_order_mutex_exit | ( | ) |
Release the flush order mutex.
#define log_flush_order_mutex_own | ( | ) | mutex_own(&log_sys->log_flush_order_mutex) |
#define LOG_MAX_N_GROUPS 32 |
Maximum number of log groups in log_group_t::checkpoint_buf
UNIV_INTERN ulint log_archive_archivelog | ( | void | ) |
Start archiving the log so that a gap may occur in the archived log files.
UNIV_INTERN ibool log_archive_do | ( | ibool | sync, |
ulint * | n_bytes | ||
) |
Starts an archiving operation.
sync | in: TRUE if synchronous operation is desired |
UNIV_INTERN ulint log_archive_noarchivelog | ( | void | ) |
Stop archiving the log so that a gap may occur in the archived log files.
UNIV_INTERN ulint log_archive_start | ( | void | ) |
Starts again archiving which has been stopped.
UNIV_INTERN ulint log_archive_stop | ( | void | ) |
Writes the log contents to the archive up to the lsn when this function was called, and stops the archiving. When archiving is started again, the archived log file numbers start from a number one higher, so that the archiving will not write again to the archived log files which exist when this function returns.
UNIV_INTERN void log_archived_file_name_gen | ( | char * | buf, |
ulint | id, | ||
ulint | file_no | ||
) |
Generates an archived log file name. in: file number
buf | in: buffer where to write |
id | in: group id |
UNIV_INLINE ulint log_block_calc_checksum | ( | const byte * | block | ) |
Calculates the checksum for a log block.
UNIV_INLINE ulint log_block_convert_lsn_to_no | ( | lsn_t | lsn | ) |
Converts a lsn to a log block number.
UNIV_INLINE ulint log_block_get_checkpoint_no | ( | const byte * | log_block | ) |
Gets a log block checkpoint number field (4 lowest bytes).
UNIV_INLINE ulint log_block_get_checksum | ( | const byte * | log_block | ) |
Gets a log block checksum field value.
UNIV_INLINE ulint log_block_get_data_len | ( | const byte * | log_block | ) |
Gets a log block data length.
UNIV_INLINE ulint log_block_get_first_rec_group | ( | const byte * | log_block | ) |
Gets a log block first mtr log record group offset.
UNIV_INLINE ibool log_block_get_flush_bit | ( | const byte * | log_block | ) |
Gets a log block flush bit.
UNIV_INLINE ulint log_block_get_hdr_no | ( | const byte * | log_block | ) |
Gets a log block number stored in the header.
UNIV_INLINE void log_block_init | ( | byte * | log_block, |
lsn_t | lsn | ||
) |
Initializes a log block in the log buffer. in: lsn within the log block
log_block | in: pointer to the log buffer |
UNIV_INLINE void log_block_init_in_old_format | ( | byte * | log_block, |
lsn_t | lsn | ||
) |
Initializes a log block in the log buffer in the old, < 3.23.52 format, where there was no checksum yet. in: lsn within the log block
log_block | in: pointer to the log buffer |
UNIV_INLINE void log_block_set_checksum | ( | byte * | log_block, |
ulint | checksum | ||
) |
Sets a log block checksum field value. in: checksum
log_block | in/out: log block |
UNIV_INLINE void log_block_set_data_len | ( | byte * | log_block, |
ulint | len | ||
) |
Sets the log block data length. in: data length
log_block | in/out: log block |
UNIV_INLINE void log_block_set_first_rec_group | ( | byte * | log_block, |
ulint | offset | ||
) |
Sets the log block first mtr log record group offset. in: offset, 0 if none
log_block | in/out: log block |
UNIV_INTERN void log_buffer_flush_to_disk | ( | void | ) |
Does a syncronous flush of the log buffer to disk.
Definition at line 1549 of file log0log.cc.
UNIV_INTERN void log_buffer_sync_in_background | ( | ibool | flush | ) |
This functions writes the log buffer to the log file and if 'flush' is set it forces a flush of the log file as well. This is meant to be called from background master thread only as it does not wait for the write (+ possible flush) to finish.
flush | in: flush the logs to disk |
Definition at line 1571 of file log0log.cc.
UNIV_INTERN ulint log_calc_where_lsn_is | ( | ib_int64_t * | log_file_offset, |
ib_uint64_t | first_header_lsn, | ||
ib_uint64_t | lsn, | ||
ulint | n_log_files, | ||
ib_int64_t | log_file_size | ||
) |
Calculates where in log files we find a specified lsn.
Calculates where in log files we find a specified lsn.
log_file_offset | out: offset in that file (including the header) |
first_header_lsn | in: first log file start lsn |
lsn | in: lsn whose position to determine |
n_log_files | in: total number of log files |
log_file_size | in: log file size (including the header) |
Definition at line 567 of file log0log.cc.
UNIV_INTERN void log_check_margins | ( | void | ) |
Checks that there is enough free space in the log to start a new query step. Flushes the log buffer or makes a new checkpoint if necessary. NOTE: this function may only be called if the calling thread owns no synchronization objects!
Definition at line 3054 of file log0log.cc.
UNIV_INTERN ibool log_checkpoint | ( | ibool | sync, |
ibool | write_always | ||
) |
Makes a checkpoint. Note that this function does not flush dirty blocks from the buffer pool: it only checks what is lsn of the oldest modification in the pool, and writes information about the lsn in log files. Use log_make_checkpoint_at to flush also the pool.
Makes a checkpoint. Note that this function does not flush dirty blocks from the buffer pool: it only checks what is lsn of the oldest modification in the pool, and writes information about the lsn in log files. Use log_make_checkpoint_at to flush also the pool.
sync | in: TRUE if synchronous operation is desired |
write_always | in: the function normally checks if the the new checkpoint would have a greater lsn than the previous one: if not, then no physical write is done; by setting this parameter TRUE, a physical write will always be made to log files |
Definition at line 1966 of file log0log.cc.
UNIV_INTERN void log_checkpoint_get_nth_group_info | ( | const byte * | buf, |
ulint | n, | ||
ulint * | file_no, | ||
ulint * | offset | ||
) |
Gets info from a checkpoint about a log group. out: archived file offset
Gets info from a checkpoint about a log group.
buf | in: buffer containing checkpoint info |
n | in: nth slot |
file_no | out: archived file number |
offset | out: archived file offset |
Definition at line 1726 of file log0log.cc.
UNIV_INTERN lsn_t log_close | ( | void | ) |
Closes the log.
Definition at line 338 of file log0log.cc.
UNIV_INLINE void log_free_check | ( | void | ) |
Checks if there is need for a log buffer flush or a new checkpoint, and does this if yes. Any database operation should call this when it has modified more than about 4 pages. NOTE that this function may only be called when the OS thread owns no synchronization objects except the dictionary mutex.
UNIV_INLINE lsn_t log_get_lsn | ( | void | ) |
Gets the current lsn.
UNIV_INTERN void log_group_close_all | ( | void | ) |
Closes all log groups.
Definition at line 3555 of file log0log.cc.
UNIV_INTERN lsn_t log_group_get_capacity | ( | const log_group_t * | group | ) |
Calculates the data capacity of a log group, when the log file headers are not included.
Calculates the data capacity of a log group, when the log file headers are not included.
group | in: log group |
Definition at line 467 of file log0log.cc.
UNIV_INTERN void log_group_init | ( | ulint | id, |
ulint | n_files, | ||
lsn_t | file_size, | ||
ulint | space_id, | ||
ulint | archive_space_id | ||
) |
Inits a log group to the log system. in: space id of the file space which contains some archived log files for this group; currently, only for the first log group this is used
id | in: group id |
n_files | in: number of log files |
file_size | in: log file size in bytes |
space_id | in: space id of the file space which contains the log files of this group |
UNIV_INTERN void log_group_read_checkpoint_info | ( | log_group_t * | group, |
ulint | field | ||
) |
Reads a checkpoint info from a log group header to log_sys->checkpoint_buf. in: LOG_CHECKPOINT_1 or LOG_CHECKPOINT_2
Reads a checkpoint info from a log group header to log_sys->checkpoint_buf.
group | in: log group |
field | in: LOG_CHECKPOINT_1 or LOG_CHECKPOINT_2 |
Definition at line 1921 of file log0log.cc.
UNIV_INTERN void log_group_read_log_seg | ( | ulint | type, |
byte * | buf, | ||
log_group_t * | group, | ||
lsn_t | start_lsn, | ||
lsn_t | end_lsn | ||
) |
Reads a specified log segment to a buffer. in: read area end
Reads a specified log segment to a buffer.
type | in: LOG_ARCHIVE or LOG_RECOVER |
buf | in: buffer where to read |
group | in: log group |
start_lsn | in: read area start |
end_lsn | in: read area end |
Definition at line 2181 of file log0log.cc.
UNIV_INTERN void log_group_set_fields | ( | log_group_t * | group, |
lsn_t | lsn | ||
) |
Sets the field values in group to correspond to a given lsn. For this function to work, the values must already be correctly initialized to correspond to some lsn, for instance, a checkpoint lsn. in: lsn for which the values should be set
Sets the field values in group to correspond to a given lsn. For this function to work, the values must already be correctly initialized to correspond to some lsn, for instance, a checkpoint lsn.
group | in/out: group |
lsn | in: lsn for which the values should be set |
Definition at line 609 of file log0log.cc.
UNIV_INTERN void log_group_write_buf | ( | log_group_t * | group, |
byte * | buf, | ||
ulint | len, | ||
lsn_t | start_lsn, | ||
ulint | new_data_offset | ||
) |
Writes a buffer to a log file group. in: start offset of new data in buf: this parameter is used to decide if we have to write a new log file header
Writes a buffer to a log file group.
group | in: log group |
buf | in: buffer |
len | in: buffer len; must be divisible by OS_FILE_LOG_BLOCK_SIZE |
start_lsn | in: start lsn of the buffer; must be divisible by OS_FILE_LOG_BLOCK_SIZE |
new_data_offset | in: start offset of new data in buf: this parameter is used to decide if we have to write a new log file header |
Definition at line 1190 of file log0log.cc.
UNIV_INTERN void log_groups_write_checkpoint_info | ( | void | ) |
Writes checkpoint info to groups.
Definition at line 1941 of file log0log.cc.
UNIV_INTERN void log_init | ( | void | ) |
Initializes the log.
Definition at line 732 of file log0log.cc.
UNIV_INTERN void log_io_complete | ( | log_group_t * | group | ) |
Completes an i/o to a log file. in: log group
Completes an i/o to a log file.
< We currently use synchronous writing of the logs and cannot end up here!
group | in: log group or a dummy pointer |
Definition at line 1054 of file log0log.cc.
UNIV_INTERN void log_make_checkpoint_at | ( | lsn_t | lsn, |
ibool | write_always | ||
) |
Makes a checkpoint at a given lsn or later. in: the function normally checks if the new checkpoint would have a greater lsn than the previous one: if not, then no physical write is done; by setting this parameter TRUE, a physical write will always be made to log files
Makes a checkpoint at a given lsn or later.
lsn | in: make a checkpoint at this or a later lsn, if LSN_MAX, makes a checkpoint at the latest lsn |
write_always | in: the function normally checks if the new checkpoint would have a greater lsn than the previous one: if not, then no physical write is done; by setting this parameter TRUE, a physical write will always be made to log files |
Definition at line 2062 of file log0log.cc.
UNIV_INTERN void log_mem_free | ( | void | ) |
Free the log system data structures.
Definition at line 3611 of file log0log.cc.
UNIV_INTERN ibool log_peek_lsn | ( | lsn_t * | lsn | ) |
Peeks the current lsn.
Peeks the current lsn.
lsn | out: if returns TRUE, current lsn is here |
Definition at line 3448 of file log0log.cc.
UNIV_INTERN void log_print | ( | FILE * | file | ) |
Prints info of the log. in: file where to print
Prints info of the log.
file | in: file where to print |
Definition at line 3467 of file log0log.cc.
UNIV_INTERN void log_refresh_stats | ( | void | ) |
Refreshes the statistics used to print per-second averages.
Definition at line 3514 of file log0log.cc.
UNIV_INLINE void log_release | ( | void | ) |
Releases the log mutex.
UNIV_INTERN lsn_t log_reserve_and_open | ( | ulint | len | ) |
Opens the log for log_write_low. The log must be closed with log_close and released with log_release.
Opens the log for log_write_low. The log must be closed with log_close and released with log_release.
len | in: length of data to be catenated |
Definition at line 192 of file log0log.cc.
UNIV_INLINE lsn_t log_reserve_and_write_fast | ( | const void * | str, |
ulint | len, | ||
lsn_t * | start_lsn | ||
) |
Writes to the log the string given. The log must be released with log_release.
str | in: string |
len | in: string length |
UNIV_INTERN void log_shutdown | ( | void | ) |
Shutdown the log system but do not release all the memory.
Definition at line 3576 of file log0log.cc.
UNIV_INTERN void log_write_low | ( | byte * | str, |
ulint | str_len | ||
) |
Writes to the log the string given. It is assumed that the caller holds the log mutex. in: string length
Writes to the log the string given. It is assumed that the caller holds the log mutex.
str | in: string |
str_len | in: string length |
Definition at line 266 of file log0log.cc.
UNIV_INTERN void log_write_up_to | ( | lsn_t | lsn, |
ulint | wait, | ||
ibool | flush_to_disk | ||
) |
This function is called, e.g., when a transaction wants to commit. It checks that the log has been written to the log file up to the last log entry written by the transaction. If there is a flush running, it waits and checks if the flush flushed enough. If not, starts a new flush. in: TRUE if we want the written log also to be flushed to disk
This function is called, e.g., when a transaction wants to commit. It checks that the log has been written to the log file up to the last log entry written by the transaction. If there is a flush running, it waits and checks if the flush flushed enough. If not, starts a new flush.
< We assume here that we have only one log group!
lsn | in: log sequence number up to which the log should be written, LSN_MAX if not specified |
wait | in: LOG_NO_WAIT, LOG_WAIT_ONE_GROUP, or LOG_WAIT_ALL_GROUPS |
flush_to_disk | in: TRUE if we want the written log also to be flushed to disk |
Definition at line 1321 of file log0log.cc.
UNIV_INTERN void logs_empty_and_mark_files_at_shutdown | ( | void | ) |
Makes a checkpoint at the latest lsn and writes it to first page of each data file in the database, so that we know that the file spaces contain all modifications up to that lsn. This can only be called at database shutdown. This function also writes all log in log files to the log archive.
Definition at line 3086 of file log0log.cc.