MySQL 8.0.39
Source Code Documentation
|
Modification log for online index creation and online table rebuild. More...
#include "my_psi_config.h"
#include "univ.i"
#include "data0types.h"
#include "dict0types.h"
#include "mtr0types.h"
#include "que0types.h"
#include "rem0types.h"
#include "row0types.h"
#include "trx0types.h"
#include "row0log.ic"
Go to the source code of this file.
Functions | |
bool | row_log_allocate (dict_index_t *index, dict_table_t *table, bool same_pk, const dtuple_t *add_cols, const ulint *col_map, const char *path) |
Allocate the row log for an index and flag the index for online creation. More... | |
void | row_log_free (row_log_t *&log) |
Free the row log for an index that was being created online. More... | |
static void | row_log_abort_sec (dict_index_t *index) |
Free the row log for an index on which online creation was aborted. More... | |
static bool | row_log_online_op_try (dict_index_t *index, const dtuple_t *tuple, trx_id_t trx_id) |
Try to log an operation to a secondary index that is (or was) being created. More... | |
void | row_log_online_op (dict_index_t *index, const dtuple_t *tuple, trx_id_t trx_id) UNIV_COLD |
Logs an operation to a secondary index that is (or was) being created. More... | |
dberr_t | row_log_table_get_error (const dict_index_t *index) |
Gets the error status of the online index rebuild log. More... | |
bool | row_log_col_is_indexed (const dict_index_t *index, ulint v_no) |
Check whether a virtual column is indexed in the new table being created during alter table. More... | |
void | row_log_table_delete (const rec_t *rec, const dtuple_t *ventry, dict_index_t *index, const ulint *offsets, const byte *sys) UNIV_COLD |
Logs a delete operation to a table that is being rebuilt. More... | |
void | row_log_table_update (const rec_t *rec, dict_index_t *index, const ulint *offsets, const dtuple_t *old_pk, const dtuple_t *new_v_row, const dtuple_t *old_v_row) UNIV_COLD |
Logs an update operation to a table that is being rebuilt. More... | |
const dtuple_t * | row_log_table_get_pk (const rec_t *rec, dict_index_t *index, const ulint *offsets, byte *sys, mem_heap_t **heap) UNIV_COLD |
Constructs the old PRIMARY KEY and DB_TRX_ID,DB_ROLL_PTR of a table that is being rebuilt. More... | |
void | row_log_table_insert (const rec_t *rec, const dtuple_t *ventry, dict_index_t *index, const ulint *offsets) UNIV_COLD |
Logs an insert to a table that is being rebuilt. More... | |
void | row_log_table_blob_free (dict_index_t *index, page_no_t page_no) UNIV_COLD |
Notes that a BLOB is being freed during online ALTER TABLE. More... | |
void | row_log_table_blob_alloc (dict_index_t *index, page_no_t page_no) UNIV_COLD |
Notes that a BLOB is being allocated during online ALTER TABLE. More... | |
dberr_t | row_log_table_apply (que_thr_t *thr, dict_table_t *old_table, struct TABLE *table, Alter_stage *stage) |
Apply the row_log_table log to a table upon completing rebuild. More... | |
trx_id_t | row_log_get_max_trx (dict_index_t *index) |
Get the latest transaction ID that has invoked row_log_online_op() during online creation. More... | |
dberr_t | row_log_apply (const trx_t *trx, dict_index_t *index, struct TABLE *table, Alter_stage *stage) |
Apply the row log to the index upon completing index creation. More... | |
ulint | row_log_estimate_work (const dict_index_t *index) |
Estimate how much work is to be done by the log apply phase of an ALTER TABLE for this index. More... | |
Modification log for online index creation and online table rebuild.
Created 2011-05-26 Marko Makela
|
inlinestatic |
Free the row log for an index on which online creation was aborted.
in/out: index (x-latched)
bool row_log_allocate | ( | dict_index_t * | index, |
dict_table_t * | table, | ||
bool | same_pk, | ||
const dtuple_t * | add_cols, | ||
const ulint * | col_map, | ||
const char * | path | ||
) |
Allocate the row log for an index and flag the index for online creation.
[in] | index | Index. |
[in] | table | New table being rebuilt, or NULL when creating a secondary index. |
[in] | same_pk | Whether the definition of the PRIMARY KEY has remained the same. |
[in] | add_cols | Default values of added columns, or nullptr. |
[in] | col_map | Mapping of old column numbers to new ones, or nullptr if !table. |
[in] | path | Where to create temporary file. |
true | if success, false if not |
dberr_t row_log_apply | ( | const trx_t * | trx, |
dict_index_t * | index, | ||
struct TABLE * | table, | ||
Alter_stage * | stage | ||
) |
Apply the row log to the index upon completing index creation.
[in] | trx | transaction (for checking if the operation was interrupted) |
[in,out] | index | secondary index |
[in,out] | table | MySQL table (for reporting duplicates) |
[in,out] | stage | performance schema accounting object, used by ALTER TABLE. stage->begin_phase_log_index() will be called initially and then stage->inc() will be called for each block of log that is applied. |
bool row_log_col_is_indexed | ( | const dict_index_t * | index, |
ulint | v_no | ||
) |
Check whether a virtual column is indexed in the new table being created during alter table.
[in] | index | cluster index |
[in] | v_no | virtual column number |
ulint row_log_estimate_work | ( | const dict_index_t * | index | ) |
Estimate how much work is to be done by the log apply phase of an ALTER TABLE for this index.
[in] | index | index whose log to assess |
void row_log_free | ( | row_log_t *& | log | ) |
Free the row log for an index that was being created online.
in,own: row log
log | in,own: row log |
trx_id_t row_log_get_max_trx | ( | dict_index_t * | index | ) |
Get the latest transaction ID that has invoked row_log_online_op() during online creation.
index | in: index, must be locked |
void row_log_online_op | ( | dict_index_t * | index, |
const dtuple_t * | tuple, | ||
trx_id_t | trx_id | ||
) |
Logs an operation to a secondary index that is (or was) being created.
index | in/out: index, S or X latched |
tuple | in: index tuple |
trx_id | in: transaction ID for insert, or 0 for delete |
|
inlinestatic |
Try to log an operation to a secondary index that is (or was) being created.
[in,out] | index | Index, S- or X-latched. |
[in] | tuple | Index tuple. |
[in] | trx_id | Transaction ID for insert, or 0 for delete. |
true | if the operation was logged or can be ignored |
false | if online index creation is not taking place |
dberr_t row_log_table_apply | ( | que_thr_t * | thr, |
dict_table_t * | old_table, | ||
struct TABLE * | table, | ||
Alter_stage * | stage | ||
) |
Apply the row_log_table log to a table upon completing rebuild.
[in] | thr | query graph |
[in] | old_table | old table |
[in,out] | table | MySQL table (for reporting duplicates) |
[in,out] | stage | performance schema accounting object, used by ALTER TABLE. stage->begin_phase_log_table() will be called initially and then stage->inc() will be called for each block of log that is applied. |
void row_log_table_blob_alloc | ( | dict_index_t * | index, |
page_no_t | page_no | ||
) |
Notes that a BLOB is being allocated during online ALTER TABLE.
index | in/out: clustered index, X-latched |
page_no | in: starting page number of the BLOB |
void row_log_table_blob_free | ( | dict_index_t * | index, |
page_no_t | page_no | ||
) |
Notes that a BLOB is being freed during online ALTER TABLE.
index | in/out: clustered index, X-latched |
page_no | in: starting page number of the BLOB |
void row_log_table_delete | ( | const rec_t * | rec, |
const dtuple_t * | ventry, | ||
dict_index_t * | index, | ||
const ulint * | offsets, | ||
const byte * | sys | ||
) |
Logs a delete operation to a table that is being rebuilt.
This will be merged in row_log_table_apply_delete().
rec | in: clustered index leaf page record, page X-latched |
ventry | in: dtuple holding virtual column info |
index | in/out: clustered index, S-latched or X-latched |
offsets | in: rec_get_offsets(rec,index) |
sys | in: DB_TRX_ID,DB_ROLL_PTR that should be logged, or NULL to use those in rec |
dberr_t row_log_table_get_error | ( | const dict_index_t * | index | ) |
Gets the error status of the online index rebuild log.
index | in: clustered index of a table that is being rebuilt online |
const dtuple_t * row_log_table_get_pk | ( | const rec_t * | rec, |
dict_index_t * | index, | ||
const ulint * | offsets, | ||
byte * | sys, | ||
mem_heap_t ** | heap | ||
) |
Constructs the old PRIMARY KEY and DB_TRX_ID,DB_ROLL_PTR of a table that is being rebuilt.
rec | in: clustered index leaf page record, page X-latched |
index | in/out: clustered index, S-latched or X-latched |
offsets | in: rec_get_offsets(rec,index) |
sys | out: DB_TRX_ID,DB_ROLL_PTR for row_log_table_delete(), or NULL |
heap | in/out: memory heap where allocated |
void row_log_table_insert | ( | const rec_t * | rec, |
const dtuple_t * | ventry, | ||
dict_index_t * | index, | ||
const ulint * | offsets | ||
) |
Logs an insert to a table that is being rebuilt.
This will be merged in row_log_table_apply_insert().
rec | in: clustered index leaf page record, page X-latched |
ventry | in: dtuple holding virtual column info |
index | in/out: clustered index, S-latched or X-latched |
offsets | in: rec_get_offsets(rec,index) |
void row_log_table_update | ( | const rec_t * | rec, |
dict_index_t * | index, | ||
const ulint * | offsets, | ||
const dtuple_t * | old_pk, | ||
const dtuple_t * | new_v_row, | ||
const dtuple_t * | old_v_row | ||
) |
Logs an update operation to a table that is being rebuilt.
This will be merged in row_log_table_apply_update().
Logs an update operation to a table that is being rebuilt.
This will be merged in row_log_table_apply_update().
rec | in: clustered index leaf page record, page X-latched |
index | in/out: clustered index, S-latched or X-latched |
offsets | in: rec_get_offsets(rec,index) |
old_pk | in: row_log_table_get_pk() before the update |
new_v_row | in: dtuple contains the new virtual columns |
old_v_row | in: dtuple contains the old virtual columns |