![]() |
MySQL 8.0.43
Source Code Documentation
|
Doublewrite implementation. More...
Classes | |
| struct | Buf_pages |
| For collecting pages to write. More... | |
Public Member Functions | |
| Double_write (uint16_t id, uint32_t n_pages) noexcept | |
| Constructor. More... | |
| virtual | ~Double_write () noexcept |
| Destructor. More... | |
| uint16_t | id () const noexcept |
| void | write (buf_flush_t flush_type) noexcept |
| Process the requests in the flush queue, write the blocks to the double write file, sync the file if required and then write to the data files. More... | |
| bool | wait_for_pending_batch () noexcept |
| Wait for any pending batch to complete. More... | |
| bool | flush_to_disk (buf_flush_t flush_type) noexcept |
| Flush buffered pages to disk, clear the buffers. More... | |
| void | write_pages (buf_flush_t flush_type) noexcept |
| Process the requests in the flush queue, write the blocks to the double write file, sync the file if required and then write to the data files. More... | |
| virtual uint16_t | write_dblwr_pages (buf_flush_t flush_type) noexcept |
| void | write_data_pages (buf_flush_t flush_type, uint16_t batch_id) noexcept |
| void | force_flush (buf_flush_t flush_type) noexcept |
| Force a flush of the page queue. More... | |
| void | enqueue (buf_flush_t flush_type, buf_page_t *bpage, const file::Block *e_block) noexcept |
| Add a page to the flush batch. More... | |
| void | batch_started () noexcept |
| Note that the IO batch has started. More... | |
| void | batch_completed () noexcept |
| Wake up all the threads that were waiting for the batch to complete. More... | |
| Double_write (const Double_write &)=delete | |
| Double_write (const Double_write &&)=delete | |
| Double_write & | operator= (Double_write &&)=delete |
| Double_write & | operator= (const Double_write &)=delete |
Static Public Member Functions | |
| static Double_write * | instance (buf_flush_t flush_type, uint32_t buf_pool_index, bool is_reduced) noexcept |
| static dberr_t | create_batch_segments (uint32_t segments_per_file) noexcept |
| Create the batch write segments. More... | |
| static dberr_t | create_reduced_batch_segments () noexcept |
| Create the Reduced batch write segments. More... | |
| static dberr_t | create_single_segments () noexcept |
| Create the single page flush segments. More... | |
| static void | submit (buf_flush_t flush_type, buf_page_t *bpage, const file::Block *e_block) noexcept |
| Get the instance that handles a particular page's IO. More... | |
| static dberr_t | sync_page_flush (buf_page_t *bpage, file::Block *e_block) noexcept |
| Writes a single page to the doublewrite buffer on disk, syncs it, then writes the page to the datafile. More... | |
| static Double_write * | instance (buf_flush_t flush_type, const buf_page_t *bpage) noexcept |
| static void | write_complete (buf_page_t *bpage, buf_flush_t flush_type) noexcept |
| Updates the double write buffer when a write request is completed. More... | |
| static bool | init_v1 (page_no_t &block1, page_no_t &block2) noexcept |
| REad the V1 doublewrite buffer extents boundaries. More... | |
| static bool | create_v1 (page_no_t &block1, page_no_t &block2) noexcept |
| Creates the V1 doublewrite buffer extents. More... | |
| static dberr_t | write_to_datafile (const buf_page_t *in_bpage, bool sync, const file::Block *e_block) noexcept |
| Writes a page that has already been written to the doublewrite buffer to the data file. More... | |
| static void | force_flush (buf_flush_t flush_type, uint32_t buf_pool_index) noexcept |
| Force a flush of the page queue. More... | |
| static dberr_t | load (dblwr::File &file, recv::Pages *pages) noexcept |
| Load the doublewrite buffer pages from an external file. More... | |
| static dberr_t | load_reduced_batch (dblwr::File &file, recv::Pages *pages) noexcept |
| Load the reduced doublewrite buffer page entries from an reduced batch double write buffer file (.bdblwr) More... | |
| static dberr_t | init_file (dblwr::File &file, uint32_t n_pages, uint32_t phy_size=univ_page_size.physical()) noexcept |
| Write zeros to the file if it is "empty". More... | |
| static void | reset_file (dblwr::File &file, bool truncate) noexcept |
| Reset the size in bytes to the configured size. More... | |
| static void | reduced_reset_file (dblwr::File &file, uint32_t pages_per_file, uint32_t phy_size) noexcept |
| Reset the size in bytes to the configured size. More... | |
| static void | reset_files () noexcept |
| Reset the size in bytes to the configured size of all files. More... | |
| static dberr_t | create_v2 () noexcept |
| Create the v2 data structures. More... | |
| static dberr_t | create_reduced () noexcept |
| Create the data structures for reduced doublewrite buffer. More... | |
| static bool | is_fsync_required () noexcept |
| static void | prepare (const buf_page_t *bpage, void **ptr, uint32_t *len) noexcept |
| Extract the data and length to write to the doublewrite file. More... | |
| static void | shutdown () noexcept |
| Free the data structures. More... | |
| static void | toggle (ulong value) noexcept |
| Toggle the doublewrite buffer dynamically. More... | |
| static void | single_write (Segment *segment, const buf_page_t *bpage, file::Block *e_block) noexcept |
| Write the data to disk synchronously. More... | |
Public Attributes | |
| unsigned long long | m_bytes_written {} |
| Number of bytes written to disk by this instance. More... | |
Static Public Attributes | |
| static uint32_t | s_n_instances {} |
| Number of instances. More... | |
| static std::vector< dblwr::File > | s_files |
| Files to use for atomic writes. More... | |
| static std::vector< dblwr::File > | s_r_files |
| Reduced batch doublewrite files to use for atomic writes. More... | |
| static Instances * | s_instances {} |
| The global instances. More... | |
| static Instances * | s_r_instances {} |
| The global Reduced Doublewrite instances. More... | |
Protected Types | |
| using | Segments = mpmc_bq< Segment * > |
| using | Instances = std::vector< Double_write * > |
| using | Batch_segments = mpmc_bq< Batch_segment * > |
Static Protected Member Functions | |
| static void | free_segments (Batch_segments *&segments) noexcept |
| Utility function to free batch segments. More... | |
| static bool | is_reduced_batch_id (uint32_t batch_id) |
Protected Attributes | |
| uint16_t | m_id {} |
| Instance ID. More... | |
| ib_mutex_t | m_mutex |
| Protects m_buf_pages. More... | |
| os_event_t | m_event |
| Wait for IO batch to complete. More... | |
| std::atomic_bool | m_batch_running {false} |
| true if the the batch hasn't completed yet. More... | |
| Buffer | m_buffer |
| The copy of the page frame, the page must be in in m_buf_pages. More... | |
| Buf_pages | m_buf_pages |
| Pages that should be written to the data files. More... | |
Static Protected Attributes | |
| static Batch_segments * | s_LRU_batch_segments {} |
| File segments to use for LRU batched writes. More... | |
| static Batch_segments * | s_flush_list_batch_segments {} |
| File segments to use for flush list batched writes. More... | |
| static Segments * | s_single_segments {} |
| File segments to use for single page writes. More... | |
| static Batch_segments * | s_r_LRU_batch_segments {} |
| File segments to use for LRU batched writes in reduced dblwr mode. More... | |
| static Batch_segments * | s_r_flush_list_batch_segments {} |
| File segments to use for flush list batched writes (reduced mode) More... | |
| static std::vector< Batch_segment * > | s_segments {} |
| For indexing batch segments by ID. More... | |
| static uint32_t | s_regular_last_batch_id {} |
| Last used batch_id for regular batch segments. More... | |
Static Private Member Functions | |
| static dberr_t | start () noexcept |
| Create the singleton instance, start the flush thread. More... | |
| static void | croak (const buf_block_t *block) noexcept |
| Asserts when a corrupt block is found during writing out data to the disk. More... | |
| static void | check_block (const buf_block_t *block) noexcept |
| Check the LSN values on the page with which this block is associated. More... | |
| static void | check_page_lsn (const page_t *page) noexcept |
| Check the LSN values on the page. More... | |
| static byte * | get (mtr_t *mtr) noexcept |
| Calls buf_page_get() on the TRX_SYS_PAGE and returns a pointer to the doublewrite buffer within it. More... | |
Doublewrite implementation.
Assumes it can use DBLWR_PAGES.
|
protected |
|
protected |
|
protected |
|
noexcept |
Constructor.
| [in] | id | Instance ID |
| [in] | n_pages | Number of pages handled by this instance. |
|
virtualnoexcept |
Destructor.
|
delete |
|
delete |
|
inlinenoexcept |
Wake up all the threads that were waiting for the batch to complete.
|
inlinenoexcept |
Note that the IO batch has started.
|
staticprivatenoexcept |
Check the LSN values on the page with which this block is associated.
Also validate the page if the option is set.
| [in] | block | Block to check |
|
staticprivatenoexcept |
Check the LSN values on the page.
| [in] | page | Page to check |
|
staticnoexcept |
Create the batch write segments.
| [in] | segments_per_file | Number of configured segments per file. |
|
staticnoexcept |
Create the data structures for reduced doublewrite buffer.
|
staticnoexcept |
Create the Reduced batch write segments.
These segments are mapped to separate file which has extension .bdblwr
|
staticnoexcept |
Create the single page flush segments.
Creates the V1 doublewrite buffer extents.
The header of the doublewrite buffer is placed on the trx system header page.
| [in,out] | block1 | Starting block number for the first extent. |
| [in,out] | block2 | Starting block number for the second extent. |
|
staticnoexcept |
Create the v2 data structures.
|
staticprivatenoexcept |
Asserts when a corrupt block is found during writing out data to the disk.
| [in] | block | Block that was corrupt |
|
inlinenoexcept |
Add a page to the flush batch.
If the flush batch is full then write the batch to disk.
| [in] | flush_type | Flush type. |
| [in] | bpage | Page to flush to disk. |
| [in] | e_block | Encrypted block frame or nullptr. |
|
inlinenoexcept |
Flush buffered pages to disk, clear the buffers.
| [in] | flush_type | FLUSH LIST or LRU LIST flush. |
|
inlinenoexcept |
Force a flush of the page queue.
| [in] | flush_type | FLUSH LIST or LRU LIST flush. |
|
inlinestaticnoexcept |
Force a flush of the page queue.
| [in] | flush_type | FLUSH LIST or LRU LIST flush. |
| [in] | buf_pool_index | Buffer pool instance for which called. |
|
staticprotectednoexcept |
Utility function to free batch segments.
| [in] | segments | batch segment to free |
Calls buf_page_get() on the TRX_SYS_PAGE and returns a pointer to the doublewrite buffer within it.
| [in,out] | mtr | To manage the page latches |
|
inlinenoexcept |
|
staticnoexcept |
Write zeros to the file if it is "empty".
| [in] | file | File instance. |
| [in] | n_pages | Size in physical pages. |
| [in] | phy_size | Physical page size in DBLWR file (For reduced DBLW file, it is not UNIV_PAGE_SIZE, it is hardcoded to 8K page size) |
REad the V1 doublewrite buffer extents boundaries.
| [in,out] | block1 | Starting block number for the first extent. |
| [in,out] | block2 | Starting block number for the second extent. |
|
inlinestaticnoexcept |
| [in] | flush_type | LRU or Flush list write. |
| [in] | bpage | Page to write to disk. |
|
inlinestaticnoexcept |
| [in] | buf_pool_index | Buffer pool instance number. |
| [in] | flush_type | LRU or Flush list write. |
| [in] | is_reduced | true if reduced mode of dblwr is being used. |
|
inlinestaticnoexcept |
|
staticprotected |
| [in] | batch_id | Batch segment id |
|
staticnoexcept |
Load the doublewrite buffer pages from an external file.
| [in,out] | file | File handle |
| [in,out] | pages | For storing the doublewrite pages read from the file |
|
staticnoexcept |
Load the reduced doublewrite buffer page entries from an reduced batch double write buffer file (.bdblwr)
| [in,out] | file | File handle |
| [in,out] | pages | For storing the doublewrite pages read from the file |
|
delete |
|
delete |
|
staticnoexcept |
Extract the data and length to write to the doublewrite file.
| [in] | bpage | Page to write |
| [out] | ptr | Start of buffer to write |
| [out] | len | Length of the data to write |
|
staticnoexcept |
Reset the size in bytes to the configured size.
| [in,out] | file | File to reset |
| [in] | pages_per_file | Number of pages to be created in doublewrite file |
| [in] | phy_size | physical page size |
|
staticnoexcept |
Reset the size in bytes to the configured size.
| [in,out] | file | File to reset. |
| [in] | truncate | Truncate the file to configured size if true. |
|
inlinestaticnoexcept |
Reset the size in bytes to the configured size of all files.
|
staticnoexcept |
Free the data structures.
|
staticnoexcept |
Write the data to disk synchronously.
| [in] | segment | Segment to write to. |
| [in] | bpage | Page to write. |
| [in] | e_block | Encrypted block. Can be nullptr. |
|
staticprivatenoexcept |
Create the singleton instance, start the flush thread.
|
inlinestaticnoexcept |
Get the instance that handles a particular page's IO.
Submit the write request to the a double write queue that is empty.
| [in] | flush_type | Flush type. |
| [in] | bpage | Page from the buffer pool. |
| [in] | e_block | compressed + encrypted frame contents or nullptr. |
|
staticnoexcept |
Writes a single page to the doublewrite buffer on disk, syncs it, then writes the page to the datafile.
| [in] | bpage | Data page to write to disk. |
| [in] | e_block | Encrypted data block. |
|
inlinestaticnoexcept |
Toggle the doublewrite buffer dynamically.
| [in] | value | Current value |
|
inlinenoexcept |
Wait for any pending batch to complete.
|
noexcept |
Process the requests in the flush queue, write the blocks to the double write file, sync the file if required and then write to the data files.
|
staticnoexcept |
Updates the double write buffer when a write request is completed.
| [in,out] | bpage | Block that has just been written to disk. |
| [in] | flush_type | Flush type that triggered the write. |
|
noexcept |
|
virtualnoexcept |
Reimplemented in Reduced_double_write.
|
noexcept |
Process the requests in the flush queue, write the blocks to the double write file, sync the file if required and then write to the data files.
| [in] | flush_type | LRU or FLUSH request. |
|
staticnoexcept |
Writes a page that has already been written to the doublewrite buffer to the data file.
It is the job of the caller to sync the datafile.
| [in] | in_bpage | Page to write. |
| [in] | sync | true if it's a synchronous write. |
| [in] | e_block | block containing encrypted data frame. |
|
protected |
true if the the batch hasn't completed yet.
|
protected |
Pages that should be written to the data files.
|
protected |
The copy of the page frame, the page must be in in m_buf_pages.
| unsigned long long Double_write::m_bytes_written {} |
Number of bytes written to disk by this instance.
It is never reset. It is printed to server log during shutdown.
|
protected |
Wait for IO batch to complete.
|
protected |
Instance ID.
|
protected |
Protects m_buf_pages.
|
static |
Files to use for atomic writes.
|
staticprotected |
File segments to use for flush list batched writes.
|
static |
The global instances.
|
staticprotected |
File segments to use for LRU batched writes.
|
static |
Number of instances.
|
static |
Reduced batch doublewrite files to use for atomic writes.
|
staticprotected |
File segments to use for flush list batched writes (reduced mode)
|
static |
The global Reduced Doublewrite instances.
|
staticprotected |
File segments to use for LRU batched writes in reduced dblwr mode.
|
staticprotected |
Last used batch_id for regular batch segments.
Any id greater than this belongs to reduced double write
|
staticprotected |
For indexing batch segments by ID.
|
staticprotected |
File segments to use for single page writes.