MySQL 8.4.0
Source Code Documentation
log0sys.h
Go to the documentation of this file.
1/*****************************************************************************
2
3Copyright (c) 2013, 2024, Oracle and/or its affiliates.
4
5This program is free software; you can redistribute it and/or modify it under
6the terms of the GNU General Public License, version 2.0, as published by the
7Free Software Foundation.
8
9This program is designed to work with certain software (including
10but not limited to OpenSSL) that is licensed under separate terms,
11as designated in a particular file or component or in included license
12documentation. The authors of MySQL hereby grant you an additional
13permission to link the program and your derivative works with the
14separately licensed software that they have either included with
15the program or referenced in the documentation.
16
17This program is distributed in the hope that it will be useful, but WITHOUT
18ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
19FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0,
20for more details.
21
22You should have received a copy of the GNU General Public License along with
23this program; if not, write to the Free Software Foundation, Inc.,
2451 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25
26*****************************************************************************/
27
28/**************************************************/ /**
29 @file include/log0sys.h
30
31 Redo log - the log_sys.
32
33 *******************************************************/
34
35#ifndef log0sys_h
36#define log0sys_h
37
38#include "univ.i"
39
40/* Log_consumer */
41#include "log0consumer.h"
42
43/* Log_files_capacity */
44#include "log0files_capacity.h"
45
46/* Log_files_dict */
47#include "log0files_dict.h"
48
49/* lsn_t, Log_clock, ... */
50#include "log0types.h"
51
52/* os_event_t */
53#include "os0event.h"
54
55/* OS_FILE_LOG_BLOCK_SIZE, os_offset_t */
56#include "os0file.h"
57
58/* rw_lock_t */
59#include "sync0rw.h"
60
61/* ut::INNODB_CACHE_LINE_SIZE */
62#include "ut0cpu_cache.h"
63
64/* Link_buf */
65#include "ut0link_buf.h"
66
67/* ib_mutex_t */
68#include "ut0mutex.h"
69
70/* aligned_array_pointer, ut::vector */
71#include "ut0new.h"
72
73class THD;
74
75/** Redo log - single data structure with state of the redo log system.
76In future, one could consider splitting this to multiple data structures. */
77struct alignas(ut::INNODB_CACHE_LINE_SIZE) log_t {
78#ifndef UNIV_HOTBACKUP
79
80 /**************************************************/ /**
81
82 @name Users writing to log buffer
83
84 *******************************************************/
85
86 /** @{ */
87
88 /** Event used for locking sn */
90
91#ifdef UNIV_DEBUG
92 /** The rw_lock instance only for the debug info list */
93 /* NOTE: Just "rw_lock_t sn_lock_inst;" and direct minimum initialization
94 seem to hit the bug of Sun Studio of Solaris. */
96#endif /* UNIV_DEBUG */
97
98 /** Current sn value. Used to reserve space in the redo log,
99 and used to acquire an exclusive access to the log buffer.
100 Represents number of data bytes that have ever been reserved.
101 Bytes of headers and footers of log blocks are not included.
102 Its highest bit is used for locking the access to the log buffer. */
104
105 /** Intended sn value while x-locked. */
107
108 /** Mutex which can be used for x-lock sn value */
109 mutable ib_mutex_t sn_x_lock_mutex;
110
111 /** Aligned log buffer. Committing mini-transactions write there
112 redo records, and the log_writer thread writes the log buffer to
113 disk in background.
114 Protected by: locking sn not to add. */
117
118 /** Size of the log buffer expressed in number of data bytes,
119 that is excluding bytes for headers and footers of log blocks. */
121
122 /** Size of the log buffer expressed in number of total bytes,
123 that is including bytes for headers and footers of log blocks. */
124 size_t buf_size;
125
126#ifdef UNIV_PFS_RWLOCK
127 /** The instrumentation hook.
128 @remarks This field is rarely modified, so can not be the cause of
129 frequent cache line invalidations. However, user threads read it only during
130 mtr.commit(), which in some scenarios happens rarely enough, that the cache
131 line containing pfs_psi is evicted between mtr.commit()s causing a cache miss,
132 a stall and in consequence MACHINE_CLEARS during mtr.commit(). As this miss
133 seems inevitable, we at least want to make it really worth it. So, we put the
134 pfs_psi in the same cache line which contains buf, buf_size_sn and buf_size,
135 which are also needed during mtr.commit(). This way instead of two separate
136 cache misses, we have just one.
137 TBD: We could additionally use `lfence` to limit MACHINE_CLEARS.*/
139#endif /* UNIV_PFS_RWLOCK */
140
141 /** The recent written buffer.
142 Protected by: locking sn not to add. */
144
145 /** Used for pausing the log writer threads.
146 When paused, each user thread should write log as in the former version. */
147 std::atomic_bool writer_threads_paused;
148
149 /** Some threads waiting for the ready for write lsn by closer_event. */
151
152 /** current_ready_waiting_lsn is waited using this sig_count. */
154
155 /** The recent closed buffer.
156 Protected by: locking sn not to add. */
158
159 /** @} */
160
161 /**************************************************/ /**
162
163 @name Users <=> writer
164
165 *******************************************************/
166
167 /** @{ */
168
169 /** Maximum sn up to which there is free space in both the log buffer
170 and the log files. This is limitation for the end of any write to the
171 log buffer. Threads, which are limited need to wait, and possibly they
172 hold latches of dirty pages making a deadlock possible.
173 Protected by: writer_mutex (writes). */
175
176 /** Up to this lsn, data has been written to disk (fsync not required).
177 Protected by: writer_mutex (writes). */
179
180 /** Unaligned pointer to array with events, which are used for
181 notifications sent from the log write notifier thread to user threads.
182 The notifications are sent when write_lsn is advanced. User threads
183 wait for write_lsn >= lsn, for some lsn. Log writer advances the
184 write_lsn and notifies the log write notifier, which notifies all users
185 interested in nearby lsn values (lsn belonging to the same log block).
186 Note that false wake-ups are possible, in which case user threads
187 simply retry waiting. */
189
190 /** Number of entries in the array with writer_events. */
192
193 /** Approx. number of requests to write/flush redo since startup. */
195 std::atomic<uint64_t> write_to_file_requests_total;
196
197 /** How often redo write/flush is requested in average.
198 Measures in microseconds. Log threads do not spin when
199 the write/flush requests are not frequent. */
201 std::atomic<std::chrono::microseconds> write_to_file_requests_interval;
202 static_assert(decltype(write_to_file_requests_interval)::is_always_lock_free);
203
204 /** @} */
205
206 /**************************************************/ /**
207
208 @name Users <=> flusher
209
210 *******************************************************/
211
212 /** @{ */
213
214 /** Unaligned pointer to array with events, which are used for
215 notifications sent from the log flush notifier thread to user threads.
216 The notifications are sent when flushed_to_disk_lsn is advanced.
217 User threads wait for flushed_to_disk_lsn >= lsn, for some lsn.
218 Log flusher advances the flushed_to_disk_lsn and notifies the
219 log flush notifier, which notifies all users interested in nearby lsn
220 values (lsn belonging to the same log block). Note that false
221 wake-ups are possible, in which case user threads simply retry
222 waiting. */
224
225 /** Number of entries in the array with events. */
227
228 /** This event is in the reset state when a flush is running;
229 a thread should wait for this without owning any of redo mutexes,
230 but NOTE that to reset this event, the thread MUST own the writer_mutex */
232
233 /** Up to this lsn data has been flushed to disk (fsynced). */
235
236 /** @} */
237
238 /**************************************************/ /**
239
240 @name Log flusher thread
241
242 *******************************************************/
243
244 /** @{ */
245
246 /** Last flush start time. Updated just before fsync starts. */
248
249 /** Last flush end time. Updated just after fsync is finished.
250 If smaller than start time, then flush operation is pending. */
252
253 /** Flushing average time (in microseconds). */
255
256 /** Mutex which can be used to pause log flusher thread. */
257 mutable ib_mutex_t flusher_mutex;
258
260
261 /** @} */
262
263 /**************************************************/ /**
264
265 @name Log writer thread
266
267 *******************************************************/
268
269 /** @{ */
270
271 /** Size of buffer used for the write-ahead (in bytes). */
273
274 /** Aligned buffer used for some of redo log writes. Data is copied
275 there from the log buffer and written to disk, in following cases:
276 - when writing ahead full kernel page to avoid read-on-write issue,
277 - to copy, prepare and write the incomplete block of the log buffer
278 (because mini-transactions might be writing new redo records to
279 the block in parallel, when the block is being written to disk) */
282
283 /** Up to this file offset in the log files, the write-ahead
284 has been done or is not required (for any other reason). */
286
287 /** File within which write_lsn is located, so the newest file in m_files
288 in the same time - updates are protected by the m_files_mutex. This field
289 exists, because the log_writer thread needs to locate offsets each time
290 it writes data blocks to disk, but we do not want to acquire and release
291 the m_files_mutex for each such write, because that would slow down the
292 log_writer thread a lot. Instead of that, the log_writer uses this object
293 to locate the offsets.
294
295 Updates of this field require two mutexes: writer_mutex and m_files_mutex.
296 Its m_id is updated only when the write_lsn moves to the next log file. */
298
299 /** Handle for the opened m_current_file. The log_writer uses this handle
300 to do writes (protected by writer_mutex). The log_flusher uses this handle
301 to do fsyncs (protected by flusher_mutex). Both these threads might use
302 this handle in parallel. The required synchronization between writes and
303 fsyncs will happen on the OS side. When m_current_file is repointed to
304 other file, this field is also updated, in the same critical section.
305 Updates of this field are protected by: writer_mutex, m_files_mutex
306 and flusher_mutex acquired all together. The reason for flusher_mutex
307 is to avoid a need to acquire / release m_files_mutex in the log_flusher
308 thread for each fsync. Instead of that, the log_flusher thread keeps the
309 log_flusher_mutex, which is released less often, but still prevents from
310 updates of this field. */
312
313 /** True iff the log writer has entered extra writer margin and still
314 hasn't exited since then. Each time the log_writer enters that margin,
315 it pauses all user threads at log_free_check() calls and emits warning
316 to the log. When the writer exits the extra margin, notice is emitted.
317 Protected by: log_limits_mutex and writer_mutex. */
319
320#endif /* !UNIV_HOTBACKUP */
321
322 /** Number of performed IO operations (only for printing stats). */
323 uint64_t n_log_ios;
324
325#ifndef UNIV_HOTBACKUP
326
327 /** Mutex which can be used to pause log writer thread. */
328 mutable ib_mutex_t writer_mutex;
329
330#ifdef UNIV_DEBUG
331 /** THD used by the log_writer thread. */
333#endif /* UNIV_DEBUG */
334
336
337 /** A recently seen value of log_consumer_get_oldest()->get_consumed_lsn().
338 It serves as a lower bound for future values of this expression, because it is
339 guaranteed to be monotonic in time: each individual consumer can only go
340 forward, and new consumers must start at least from checkpoint lsn, and the
341 checkpointer is always one of the consumers.
342 Protected by: writer_mutex. */
344
345 /** @} */
346
347 /**************************************************/ /**
348
349 @name Log closer thread
350
351 *******************************************************/
352
353 /** @{ */
354
355 /** Event used by the log closer thread to wait for tasks. */
357
358 /** Mutex which can be used to pause log closer thread. */
359 mutable ib_mutex_t closer_mutex;
360
361 /** @} */
362
363 /**************************************************/ /**
364
365 @name Log flusher <=> flush_notifier
366
367 *******************************************************/
368
369 /** @{ */
370
371 /** Event used by the log flusher thread to notify the log flush
372 notifier thread, that it should proceed with notifying user threads
373 waiting for the advanced flushed_to_disk_lsn (because it has been
374 advanced). */
376
377 /** The next flushed_to_disk_lsn can be waited using this sig_count. */
379
380 /** Mutex which can be used to pause log flush notifier thread. */
381 mutable ib_mutex_t flush_notifier_mutex;
382
383 /** @} */
384
385 /**************************************************/ /**
386
387 @name Log writer <=> write_notifier
388
389 *******************************************************/
390
391 /** @{ */
392
393 /** Mutex which can be used to pause log write notifier thread. */
395
396 /** Event used by the log writer thread to notify the log write
397 notifier thread, that it should proceed with notifying user threads
398 waiting for the advanced write_lsn (because it has been advanced). */
400
401 /** @} */
402
403 /**************************************************/ /**
404
405 @name Log files management
406
407 *******************************************************/
408
409 /** @{ */
410
411 /** Mutex protecting set of existing log files and their meta data. */
412 alignas(ut::INNODB_CACHE_LINE_SIZE) mutable ib_mutex_t m_files_mutex;
413
414 /** Context for all operations on redo log files from log0files_io.h. */
416
417 /** The in-memory dictionary of log files.
418 Protected by: m_files_mutex. */
420
421 /** Number of existing unused files (those with _tmp suffix).
422 Protected by: m_files_mutex. */
424
425 /** Size of each unused redo log file, to which recently all unused
426 redo log files became resized. Expressed in bytes. */
428
429 /** Capacity limits for the redo log. Responsible for resize.
430 Mutex protection is decided per each Log_files_capacity method. */
432
433 /** True iff log_writer is waiting for a next log file available.
434 Protected by: m_files_mutex. */
436
437 /** Statistics related to redo log files consumption and creation.
438 Protected by: m_files_mutex. */
440
441 /** Event used by log files governor thread to wait. */
443
444 /** Mutex which can be used to pause log governor thread. */
445 alignas(ut::INNODB_CACHE_LINE_SIZE) mutable ib_mutex_t
447
448 /** Event used by other threads to wait until log files governor finished
449 its next iteration. This is useful when some sys_var gets changed to wait
450 until log files governor re-computed everything and then check if the
451 concurrency_margin is safe to emit warning if needed (the warning would
452 still belong to the sys_var's SET GLOBAL statement then). */
454
455 /** False if log files governor thread is allowed to add new redo records.
456 This is set as intention, to tell the log files governor about what it is
457 allowed to do. To ensure that the log_files_governor is aware of what has
458 been told, user needs to wait on @see m_no_more_dummy_records_promised. */
460
461 /** False if the log files governor thread is allowed to add new dummy redo
462 records. This is set to true only by the log_files_governor thread, and
463 after it observed @see m_no_more_dummy_records_requested being true.
464 It can be used to wait until the log files governor thread promises not to
465 generate any more dummy redo records. */
467
468#ifdef UNIV_DEBUG
469 /** THD used by the log_files_governor thread. */
471#endif /* UNIV_DEBUG */
472
473 /** Event used for waiting on next file available. Used by log writer
474 thread to wait when it needs to produce a next log file but there are
475 no free (consumed) log files available. */
477
478 /** Buffer that contains encryption meta data encrypted with master key.
479 Protected by: m_files_mutex */
481
482#endif /* !UNIV_HOTBACKUP */
483
484 /** Encryption metadata. This member is passed to Log_file_handle objects
485 created for redo log files. In particular, the m_current_file_handle has
486 a reference to this field. When encryption metadata is updated, it needs
487 to be written to the redo log file's header. Also, each write performed
488 by the log_writer thread needs to use m_encryption_metadata (it's passed
489 by reference to the m_current_file_handle) and the log_writer does not
490 acquire m_files_mutex for its writes (it is a hot path and it's better to
491 keep it shorter). Therefore it's been decided that updates of this field
492 require both m_files_mutex and writer_mutex.
493 Protected by: m_files_mutex, writer_mutex */
495
496#ifndef UNIV_HOTBACKUP
497
498 /** @} */
499
500 /**************************************************/ /**
501
502 @name Consumers
503
504 *******************************************************/
505
506 /** @{ */
507
508 /** Set of registered redo log consumers. Note, that this object
509 is not responsible for freeing them (does not claim to be owner).
510 If you wanted to register or unregister a redo log consumer, then
511 please use following functions: @see log_consumer_register() and
512 @see log_consumer_unregister(). The details of implementation
513 related to redo log consumers can be found in log0consumer.cc.
514 Protected by: m_files_mutex (unless it is the startup phase or
515 the shutdown phase). */
517
518 /** @} */
519
520 /**************************************************/ /**
521
522 @name Maintenance
523
524 *******************************************************/
525
526 /** @{ */
527
528 /** Used for stopping the log background threads. */
530
531 /** Event used for pausing the log writer threads. */
533
534 /** Used for resuming write notifier thread */
536
537 /** Used for resuming flush notifier thread */
539
540 /** Number of total I/O operations performed when we printed
541 the statistics last time. */
542 mutable uint64_t n_log_ios_old;
543
544 /** Wall time when we printed the statistics last time. */
545 mutable time_t last_printout_time;
546
547 /** @} */
548
549 /**************************************************/ /**
550
551 @name Recovery
552
553 *******************************************************/
554
555 /** @{ */
556
557 /** Lsn from which recovery has been started. */
559
560 /** Format of the redo log: e.g., Log_format::CURRENT. */
562
563 /** Log creator name */
564 std::string m_creator_name;
565
566 /** Log flags */
568
569 /** Log UUID */
571
572 /** Used only in recovery: recovery scan succeeded up to this lsn. */
574
575#ifdef UNIV_DEBUG
576
577 /** When this is set, writing to the redo log should be disabled.
578 We check for this in functions that write to the redo log. */
580
581#endif /* UNIV_DEBUG */
582
583 /** @} */
584
585 /**************************************************/ /**
586
587 @name Fields protected by the log_limits_mutex.
588 Related to free space in the redo log.
589
590 *******************************************************/
591
592 /** @{ */
593
594 /** Mutex which protects fields: available_for_checkpoint_lsn,
595 requested_checkpoint_lsn. It also synchronizes updates of:
596 free_check_limit_lsn, concurrency_margin, dict_persist_margin.
597 It protects reads and writes of m_writer_inside_extra_margin.
598 It also protects the srv_checkpoint_disabled (together with the
599 checkpointer_mutex). */
600 alignas(ut::INNODB_CACHE_LINE_SIZE) mutable ib_mutex_t limits_mutex;
601
602 /** A new checkpoint could be written for this lsn value.
603 Up to this lsn value, all dirty pages have been added to flush
604 lists and flushed. Updated in the log checkpointer thread by
605 taking minimum oldest_modification out of the last dirty pages
606 from each flush list. However it will not be bigger than the
607 current value of log.buf_dirty_pages_added_up_to_lsn.
608 Read by: user threads when requesting fuzzy checkpoint
609 Read by: log_print() (printing status of redo)
610 Updated by: log_checkpointer
611 Protected by: limits_mutex. */
613
614 /** When this is larger than the latest checkpoint, the log checkpointer
615 thread will be forced to write a new checkpoint (unless the new latest
616 checkpoint lsn would still be smaller than this value).
617 Read by: log_checkpointer
618 Updated by: user threads (log_free_check() or for sharp checkpoint)
619 Protected by: limits_mutex. */
621
622 /** Maximum lsn allowed for checkpoint by dict_persist or zero.
623 This will be set by dict_persist_to_dd_table_buffer(), which should
624 be always called before really making a checkpoint.
625 If non-zero, up to this lsn value, dynamic metadata changes have been
626 written back to mysql.innodb_dynamic_metadata under dict_persist->mutex
627 protection. All dynamic metadata changes after this lsn have to
628 be kept in redo logs, but not discarded. If zero, just ignore it.
629 Updated by: DD (when persisting dynamic meta data)
630 Updated by: log_checkpointer (reset when checkpoint is written)
631 Protected by: limits_mutex. */
633
634 /** If should perform checkpoints every innodb_log_checkpoint_every ms.
635 Disabled during startup / shutdown. Enabled in srv_start_threads.
636 Updated by: starting thread (srv_start_threads)
637 Read by: log_checkpointer */
639
640 /** If checkpoints are allowed. When this is set to false, neither new
641 checkpoints might be written nor lsn available for checkpoint might be
642 updated. This is useful in recovery period, when neither flush lists can
643 be trusted nor DD dynamic metadata redo records might be reclaimed.
644 This is never set from true to false after log_start(). */
645 std::atomic_bool m_allow_checkpoints;
646
647 /** Maximum lsn up to which there is free space in the redo log.
648 Threads check this limit and compare to current lsn, when they
649 are outside mini-transactions and hold no latches. The formula used
650 to compute the limitation takes into account maximum size of mtr and
651 thread concurrency to include proper margins and avoid issues with
652 race condition (in which all threads check the limitation and then
653 all proceed with their mini-transactions). Also extra margin is
654 there for dd table buffer cache (dict_persist_margin).
655 Read by: user threads (log_free_check())
656 Updated by: log_checkpointer (after update of checkpoint_lsn)
657 Updated by: log_writer (after pausing/resuming user threads)
658 Updated by: DD (after update of dict_persist_margin)
659 Protected by (updates only): limits_mutex. */
661
662 /** Margin used in calculation of @see free_check_limit_lsn.
663 Protected by (updates only): limits_mutex. */
665
666 /** True iff current concurrency_margin isn't truncated because of too small
667 redo log capacity.
668 Protected by (updates only): limits_mutex. */
669 std::atomic<bool> concurrency_margin_is_safe;
670
671 /** Margin used in calculation of @see free_check_limit_lsn.
672 Read by: page_cleaners, log_checkpointer
673 Updated by: DD
674 Protected by (updates only): limits_mutex. */
676
677 /** @} */
678
679 /**************************************************/ /**
680
681 @name Log checkpointer thread
682
683 *******************************************************/
684
685 /** @{ */
686
687 /** Event used by the log checkpointer thread to wait for requests. */
689
690 /** Mutex which can be used to pause log checkpointer thread.
691 This is used by log_position_lock() together with log_buffer_x_lock(),
692 to pause any changes to current_lsn or last_checkpoint_lsn. */
693 mutable ib_mutex_t checkpointer_mutex;
694
695 /** Latest checkpoint lsn.
696 Read by: user threads, log_print (no protection)
697 Read by: log_writer (under writer_mutex)
698 Updated by: log_checkpointer (under both mutexes)
699 Protected by (updates only): checkpointer_mutex + writer_mutex. */
701
702 /** Next checkpoint header to use.
703 Updated by: log_checkpointer
704 Protected by: checkpointer_mutex */
706
707 /** Event signaled when last_checkpoint_lsn is advanced by
708 the log_checkpointer thread. */
710
711 /** Latest checkpoint wall time.
712 Used by (private): log_checkpointer. */
714
715 /** Redo log consumer which is always registered and which is responsible
716 for protecting redo log records at lsn >= last_checkpoint_lsn. */
718
719#ifdef UNIV_DEBUG
720 /** THD used by the log_checkpointer thread. */
722#endif /* UNIV_DEBUG */
723
724 /** @} */
725
726#endif /* !UNIV_HOTBACKUP */
727};
728
729/** Redo log system (singleton). */
730extern log_t *log_sys;
731
732#ifdef UNIV_PFS_MEMORY
733/* PFS key for the redo log buffer's memory */
735#endif /* UNIV_PFS_MEMORY */
736
737#endif /* !log0sys_h */
Definition: log0consumer.h:82
Handle which allows to do reads / writes for the opened file.
Definition: log0types.h:309
Responsible for the redo log capacity computations.
Definition: log0files_capacity.h:56
In-memory dictionary of meta data of existing log files.
Definition: log0files_dict.h:57
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
Lightweight convenience wrapper which manages a dynamically allocated array of over-aligned types.
Definition: ut0new.h:2017
unsigned int PSI_memory_key
Instrumented memory key.
Definition: psi_memory_bits.h:49
Redo log functions and types related to the log consumption.
Redo log management of capacity.
In-memory dictionary of log files (keeps their meta data).
PSI_memory_key log_buffer_memory_key
log_t * log_sys
Redo log system (singleton).
Definition: log0log.cc:435
Redo log basic types.
Log_checkpoint_header_no
Enumerates checkpoint headers in the redo log file.
Definition: log0types.h:95
std::chrono::time_point< Log_clock > Log_clock_point
Time point defined by the Log_clock.
Definition: log0types.h:135
uint32_t Log_uuid
Number which tries to uniquely identify a created set of redo log files.
Definition: log0types.h:76
Log_format
Supported redo log formats.
Definition: log0types.h:138
std::atomic< lsn_t > atomic_lsn_t
Alias for atomic based on lsn_t.
Definition: log0types.h:82
uint64_t lsn_t
Type used for all log sequence number storage and arithmetic.
Definition: log0types.h:63
std::atomic< sn_t > atomic_sn_t
Alias for atomic based on sn_t.
Definition: log0types.h:89
uint32_t Log_flags
Log flags (stored in file header of log file).
Definition: log0types.h:69
Definition: buf0block_hint.cc:30
constexpr size_t INNODB_CACHE_LINE_SIZE
CPU cache line size.
Definition: ut0cpu_cache.h:41
std::unordered_set< Key, std::hash< Key >, std::equal_to< Key >, ut::allocator< Key > > unordered_set
Definition: ut0new.h:2887
The interface to the operating system condition variables.
The interface to the operating system file io.
constexpr uint32_t OS_FILE_LOG_BLOCK_SIZE
The next value should be smaller or equal to the smallest sector size used on any disk.
Definition: os0file.h:196
uint64_t os_offset_t
File offset in bytes.
Definition: os0file.h:87
Encryption metadata.
Definition: os0enc.h:445
Meta information about single log file.
Definition: log0types.h:454
Configures path to the root directory, where redo subdirectory might be located (or redo log files if...
Definition: log0types.h:204
Runtime statistics related to redo log files management.
Definition: log0types.h:577
Interface for an instrumented rwlock.
Definition: psi_rwlock_bits.h:71
Redo log - single data structure with state of the redo log system.
Definition: log0sys.h:77
Log_clock_point last_checkpoint_time
Latest checkpoint wall time.
Definition: log0sys.h:713
size_t m_unused_files_count
Number of existing unused files (those with _tmp suffix).
Definition: log0sys.h:423
double flush_avg_time
Flushing average time (in microseconds).
Definition: log0sys.h:254
lsn_t recovered_lsn
Lsn from which recovery has been started.
Definition: log0sys.h:558
lsn_t dict_max_allowed_checkpoint_lsn
Maximum lsn allowed for checkpoint by dict_persist or zero.
Definition: log0sys.h:632
os_event_t flusher_event
Definition: log0sys.h:259
ut::aligned_array_pointer< byte, LOG_WRITE_AHEAD_BUFFER_ALIGNMENT > write_ahead_buf
Aligned buffer used for some of redo log writes.
Definition: log0sys.h:281
os_event_t next_checkpoint_event
Event signaled when last_checkpoint_lsn is advanced by the log_checkpointer thread.
Definition: log0sys.h:709
os_event_t m_files_governor_iteration_event
Event used by other threads to wait until log files governor finished its next iteration.
Definition: log0sys.h:453
atomic_sn_t sn
Current sn value.
Definition: log0sys.h:103
THD * m_checkpointer_thd
THD used by the log_checkpointer thread.
Definition: log0sys.h:721
bool periodical_checkpoints_enabled
If should perform checkpoints every innodb_log_checkpoint_every ms.
Definition: log0sys.h:638
ib_mutex_t limits_mutex
Mutex which protects fields: available_for_checkpoint_lsn, requested_checkpoint_lsn.
Definition: log0sys.h:600
Log_format m_format
Format of the redo log: e.g., Log_format::CURRENT.
Definition: log0sys.h:561
uint64_t n_log_ios_old
Number of total I/O operations performed when we printed the statistics last time.
Definition: log0sys.h:542
std::string m_creator_name
Log creator name.
Definition: log0sys.h:564
Log_file m_current_file
File within which write_lsn is located, so the newest file in m_files in the same time - updates are ...
Definition: log0sys.h:297
lsn_t m_scanned_lsn
Used only in recovery: recovery scan succeeded up to this lsn.
Definition: log0sys.h:573
std::atomic< uint64_t > write_to_file_requests_total
Approx.
Definition: log0sys.h:195
os_event_t sn_lock_event
Event used for locking sn.
Definition: log0sys.h:89
ib_mutex_t checkpointer_mutex
Mutex which can be used to pause log checkpointer thread.
Definition: log0sys.h:693
std::atomic< std::chrono::microseconds > write_to_file_requests_interval
How often redo write/flush is requested in average.
Definition: log0sys.h:201
atomic_sn_t buf_size_sn
Size of the log buffer expressed in number of data bytes, that is excluding bytes for headers and foo...
Definition: log0sys.h:120
std::atomic_bool m_no_more_dummy_records_promised
False if the log files governor thread is allowed to add new dummy redo records.
Definition: log0sys.h:466
Log_clock_point last_flush_start_time
Last flush start time.
Definition: log0sys.h:247
Log_files_dict m_files
The in-memory dictionary of log files.
Definition: log0sys.h:419
ib_mutex_t governor_iteration_mutex
Mutex which can be used to pause log governor thread.
Definition: log0sys.h:446
os_event_t checkpointer_event
Event used by the log checkpointer thread to wait for requests.
Definition: log0sys.h:688
int64_t current_ready_waiting_sig_count
current_ready_waiting_lsn is waited using this sig_count.
Definition: log0sys.h:153
Log_checkpoint_header_no next_checkpoint_header_no
Next checkpoint header to use.
Definition: log0sys.h:705
atomic_sn_t sn_locked
Intended sn value while x-locked.
Definition: log0sys.h:106
os_offset_t write_ahead_end_offset
Up to this file offset in the log files, the write-ahead has been done or is not required (for any ot...
Definition: log0sys.h:285
std::atomic_bool should_stop_threads
Used for stopping the log background threads.
Definition: log0sys.h:529
ut::unordered_set< Log_consumer * > m_consumers
Set of registered redo log consumers.
Definition: log0sys.h:516
ib_mutex_t closer_mutex
Mutex which can be used to pause log closer thread.
Definition: log0sys.h:359
atomic_sn_t concurrency_margin
Margin used in calculation of.
Definition: log0sys.h:664
atomic_lsn_t free_check_limit_lsn
Maximum lsn up to which there is free space in the redo log.
Definition: log0sys.h:660
atomic_sn_t buf_limit_sn
Maximum sn up to which there is free space in both the log buffer and the log files.
Definition: log0sys.h:174
std::atomic_bool writer_threads_paused
Used for pausing the log writer threads.
Definition: log0sys.h:147
byte m_encryption_buf[OS_FILE_LOG_BLOCK_SIZE]
Buffer that contains encryption meta data encrypted with master key.
Definition: log0sys.h:480
atomic_lsn_t write_notifier_resume_lsn
Used for resuming write notifier thread.
Definition: log0sys.h:535
os_offset_t m_unused_file_size
Size of each unused redo log file, to which recently all unused redo log files became resized.
Definition: log0sys.h:427
bool disable_redo_writes
When this is set, writing to the redo log should be disabled.
Definition: log0sys.h:579
uint32_t write_ahead_buf_size
Size of buffer used for the write-ahead (in bytes).
Definition: log0sys.h:272
std::atomic_bool m_no_more_dummy_records_requested
False if log files governor thread is allowed to add new redo records.
Definition: log0sys.h:459
os_event_t writer_event
Definition: log0sys.h:335
ib_mutex_t m_files_mutex
Mutex protecting set of existing log files and their meta data.
Definition: log0sys.h:412
THD * m_writer_thd
THD used by the log_writer thread.
Definition: log0sys.h:332
Encryption_metadata m_encryption_metadata
Encryption metadata.
Definition: log0sys.h:494
int64_t current_flush_sig_count
The next flushed_to_disk_lsn can be waited using this sig_count.
Definition: log0sys.h:378
lsn_t current_ready_waiting_lsn
Some threads waiting for the ready for write lsn by closer_event.
Definition: log0sys.h:150
bool m_requested_files_consumption
True iff log_writer is waiting for a next log file available.
Definition: log0sys.h:435
atomic_lsn_t flush_notifier_resume_lsn
Used for resuming flush notifier thread.
Definition: log0sys.h:538
std::atomic_bool m_allow_checkpoints
If checkpoints are allowed.
Definition: log0sys.h:645
Log_clock_point last_flush_end_time
Last flush end time.
Definition: log0sys.h:251
lsn_t requested_checkpoint_lsn
When this is larger than the latest checkpoint, the log checkpointer thread will be forced to write a...
Definition: log0sys.h:620
os_event_t write_notifier_event
Event used by the log writer thread to notify the log write notifier thread, that it should proceed w...
Definition: log0sys.h:399
Log_files_context m_files_ctx
Context for all operations on redo log files from log0files_io.h.
Definition: log0sys.h:415
os_event_t flush_notifier_event
Event used by the log flusher thread to notify the log flush notifier thread, that it should proceed ...
Definition: log0sys.h:375
struct PSI_rwlock * pfs_psi
The instrumentation hook.
Definition: log0sys.h:138
atomic_lsn_t last_checkpoint_lsn
Latest checkpoint lsn.
Definition: log0sys.h:700
size_t flush_events_size
Number of entries in the array with events.
Definition: log0sys.h:226
lsn_t m_oldest_need_lsn_lowerbound
A recently seen value of log_consumer_get_oldest()->get_consumed_lsn().
Definition: log0sys.h:343
ib_mutex_t writer_mutex
Mutex which can be used to pause log writer thread.
Definition: log0sys.h:328
THD * m_files_governor_thd
THD used by the log_files_governor thread.
Definition: log0sys.h:470
os_event_t * flush_events
Unaligned pointer to array with events, which are used for notifications sent from the log flush noti...
Definition: log0sys.h:223
os_event_t m_files_governor_event
Event used by log files governor thread to wait.
Definition: log0sys.h:442
std::atomic< bool > concurrency_margin_is_safe
True iff current concurrency_margin isn't truncated because of too small redo log capacity.
Definition: log0sys.h:669
atomic_lsn_t flushed_to_disk_lsn
Up to this lsn data has been flushed to disk (fsynced).
Definition: log0sys.h:234
ib_mutex_t flush_notifier_mutex
Mutex which can be used to pause log flush notifier thread.
Definition: log0sys.h:381
os_event_t old_flush_event
This event is in the reset state when a flush is running; a thread should wait for this without ownin...
Definition: log0sys.h:231
ib_mutex_t write_notifier_mutex
Mutex which can be used to pause log write notifier thread.
Definition: log0sys.h:394
Log_uuid m_log_uuid
Log UUID.
Definition: log0sys.h:570
os_event_t m_file_removed_event
Event used for waiting on next file available.
Definition: log0sys.h:476
Log_file_handle m_current_file_handle
Handle for the opened m_current_file.
Definition: log0sys.h:311
ib_mutex_t sn_x_lock_mutex
Mutex which can be used for x-lock sn value.
Definition: log0sys.h:109
Log_files_capacity m_capacity
Capacity limits for the redo log.
Definition: log0sys.h:431
os_event_t closer_event
Event used by the log closer thread to wait for tasks.
Definition: log0sys.h:356
size_t buf_size
Size of the log buffer expressed in number of total bytes, that is including bytes for headers and fo...
Definition: log0sys.h:124
Log_checkpoint_consumer m_checkpoint_consumer
Redo log consumer which is always registered and which is responsible for protecting redo log records...
Definition: log0sys.h:717
atomic_sn_t dict_persist_margin
Margin used in calculation of.
Definition: log0sys.h:675
Log_flags m_log_flags
Log flags.
Definition: log0sys.h:567
rw_lock_t * sn_lock_inst
The rw_lock instance only for the debug info list.
Definition: log0sys.h:95
os_event_t writer_threads_resume_event
Event used for pausing the log writer threads.
Definition: log0sys.h:532
time_t last_printout_time
Wall time when we printed the statistics last time.
Definition: log0sys.h:545
ib_mutex_t flusher_mutex
Mutex which can be used to pause log flusher thread.
Definition: log0sys.h:257
os_event_t * write_events
Unaligned pointer to array with events, which are used for notifications sent from the log write noti...
Definition: log0sys.h:188
lsn_t available_for_checkpoint_lsn
A new checkpoint could be written for this lsn value.
Definition: log0sys.h:612
Link_buf< lsn_t > recent_written
The recent written buffer.
Definition: log0sys.h:143
uint64_t n_log_ios
Number of performed IO operations (only for printing stats).
Definition: log0sys.h:323
Log_files_stats m_files_stats
Statistics related to redo log files consumption and creation.
Definition: log0sys.h:439
size_t write_events_size
Number of entries in the array with writer_events.
Definition: log0sys.h:191
Link_buf< lsn_t > recent_closed
The recent closed buffer.
Definition: log0sys.h:157
atomic_lsn_t write_lsn
Up to this lsn, data has been written to disk (fsync not required).
Definition: log0sys.h:178
bool m_writer_inside_extra_margin
True iff the log writer has entered extra writer margin and still hasn't exited since then.
Definition: log0sys.h:318
InnoDB condition variable.
Definition: os0event.cc:63
The structure used in the spin lock implementation of a read-write lock.
Definition: sync0rw.h:363
The read-write lock (for threads, not for database transactions)
Version control for database, common definitions, and include files.
Utilities related to CPU cache.
Policy based mutexes.
Dynamic memory allocation routines and custom allocators specifically crafted to support memory instr...