MDEV-7472: Implementation of user statements for handling the xtradb changed page bitmaps
Introduce a new dummy INFORMATION_SCHEMA.CHANGED_PAGE_BITMAPS table to XtraDB with reset_table callback to allow FLUSH NO_WRITE_TO_BINLOG CHANGED_PAGE_BITMAPS to be called from innobackupex.
This commit is contained in:
parent
d3b7eb7b99
commit
b7ff2f1b59
@ -96,6 +96,9 @@ The following options may be given as the first argument:
|
||||
--bulk-insert-buffer-size=#
|
||||
Size of tree cache used in bulk insert optimisation. Note
|
||||
that this is a limit per thread!
|
||||
--changed-page-bitmaps[=name]
|
||||
Enable or disable CHANGED_PAGE_BITMAPS plugin. One of:
|
||||
ON, OFF, FORCE (don't start if the plugin fails to load).
|
||||
--character-set-client-handshake
|
||||
Don't ignore client side character set value sent during
|
||||
handshake.
|
||||
@ -1126,6 +1129,7 @@ binlog-optimize-thread-scheduling TRUE
|
||||
binlog-row-event-max-size 1024
|
||||
binlog-stmt-cache-size 32768
|
||||
bulk-insert-buffer-size 8388608
|
||||
changed-page-bitmaps ON
|
||||
character-set-client-handshake TRUE
|
||||
character-set-filesystem binary
|
||||
character-set-server latin1
|
||||
|
@ -0,0 +1,4 @@
|
||||
FLUSH NO_WRITE_TO_BINLOG changed_page_bitmaps;
|
||||
select * from information_schema.changed_page_bitmaps;
|
||||
dummy
|
||||
0
|
@ -0,0 +1,2 @@
|
||||
--changed-page-bitmaps
|
||||
--innodb-track-changed-pages
|
@ -0,0 +1,5 @@
|
||||
-- source include/have_xtradb.inc
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
FLUSH NO_WRITE_TO_BINLOG changed_page_bitmaps;
|
||||
select * from information_schema.changed_page_bitmaps;
|
@ -4240,7 +4240,6 @@ innobase_flush_logs(
|
||||
Synchronously read and parse the redo log up to the last
|
||||
checkpoint to write the changed page bitmap.
|
||||
@return 0 to indicate success. Current implementation cannot fail. */
|
||||
static
|
||||
my_bool
|
||||
innobase_flush_changed_page_bitmaps()
|
||||
/*=================================*/
|
||||
@ -20791,7 +20790,8 @@ i_s_innodb_changed_pages,
|
||||
i_s_innodb_mutexes,
|
||||
i_s_innodb_sys_semaphore_waits,
|
||||
i_s_innodb_tablespaces_encryption,
|
||||
i_s_innodb_tablespaces_scrubbing
|
||||
i_s_innodb_tablespaces_scrubbing,
|
||||
i_s_innodb_changed_page_bitmaps
|
||||
maria_declare_plugin_end;
|
||||
|
||||
/** @brief Initialize the default value of innodb_commit_concurrency.
|
||||
|
@ -9459,3 +9459,128 @@ UNIV_INTERN struct st_mysql_plugin i_s_innodb_sys_semaphore_waits =
|
||||
STRUCT_FLD(version_info, INNODB_VERSION_STR),
|
||||
STRUCT_FLD(maturity, MariaDB_PLUGIN_MATURITY_BETA),
|
||||
};
|
||||
|
||||
static ST_FIELD_INFO innodb_changed_page_bitmaps_fields_info[] =
|
||||
{
|
||||
{STRUCT_FLD(field_name, "dummy"),
|
||||
STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
|
||||
STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
|
||||
STRUCT_FLD(value, 0),
|
||||
STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
|
||||
STRUCT_FLD(old_name, ""),
|
||||
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
||||
END_OF_ST_FIELD_INFO
|
||||
};
|
||||
|
||||
/*******************************************************************//**
|
||||
Function to populate INFORMATION_SCHEMA.CHANGED_PAGE_BITMAPS
|
||||
@return 0 on success */
|
||||
static
|
||||
int
|
||||
fill_changed_page_bitmaps_table(
|
||||
/*============================*/
|
||||
THD* thd, /*!< in: thread */
|
||||
TABLE_LIST* tables, /*!< in/out: tables to fill */
|
||||
Item* ) /*!< in: condition (not used) */
|
||||
{
|
||||
Field** fields = tables->table->field;
|
||||
DBUG_ENTER("fill_changed_page_bitmaps");
|
||||
RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
|
||||
|
||||
/* deny access to user without PROCESS_ACL privilege */
|
||||
if (check_global_access(thd, PROCESS_ACL)) {
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
OK(field_store_ulint(fields[0], 0));
|
||||
OK(schema_table_store_record(thd, tables->table));
|
||||
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/*******************************************************************//**
|
||||
Flush support for changed_page_bitmaps table.
|
||||
@return 0 on success */
|
||||
static
|
||||
int
|
||||
flush_changed_page_bitmaps()
|
||||
/*========================*/
|
||||
{
|
||||
DBUG_ENTER("flush_changed_page_bitmaps");
|
||||
if (srv_track_changed_pages) {
|
||||
os_event_reset(srv_checkpoint_completed_event);
|
||||
log_online_follow_redo_log();
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/*******************************************************************//**
|
||||
Bind the dynamic table INFORMATION_SCHEMA.CHANGED_PAGE_BITMAP
|
||||
@return 0 on success */
|
||||
static
|
||||
int
|
||||
innodb_changed_page_bitmaps_init(
|
||||
/*=============================*/
|
||||
void* p) /*!< in/out: table schema object */
|
||||
{
|
||||
ST_SCHEMA_TABLE* schema;
|
||||
|
||||
DBUG_ENTER("innodb_changed_page_bitmaps_init");
|
||||
|
||||
schema = (ST_SCHEMA_TABLE*) p;
|
||||
|
||||
schema->fields_info = innodb_changed_page_bitmaps_fields_info;
|
||||
schema->fill_table = fill_changed_page_bitmaps_table;
|
||||
schema->reset_table= flush_changed_page_bitmaps;
|
||||
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
UNIV_INTERN struct st_mysql_plugin i_s_innodb_changed_page_bitmaps =
|
||||
{
|
||||
/* the plugin type (a MYSQL_XXX_PLUGIN value) */
|
||||
/* int */
|
||||
STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
|
||||
|
||||
/* pointer to type-specific plugin descriptor */
|
||||
/* void* */
|
||||
STRUCT_FLD(info, &i_s_info),
|
||||
|
||||
/* plugin name */
|
||||
/* const char* */
|
||||
STRUCT_FLD(name, "CHANGED_PAGE_BITMAPS"),
|
||||
|
||||
/* plugin author (for SHOW PLUGINS) */
|
||||
/* const char* */
|
||||
STRUCT_FLD(author, maria_plugin_author),
|
||||
|
||||
/* general descriptive text (for SHOW PLUGINS) */
|
||||
/* const char* */
|
||||
STRUCT_FLD(descr, "XtraDB dummy changed_page_bitmaps table"),
|
||||
|
||||
/* the plugin license (PLUGIN_LICENSE_XXX) */
|
||||
/* int */
|
||||
STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
|
||||
|
||||
/* the function to invoke when plugin is loaded */
|
||||
/* int (*)(void*); */
|
||||
STRUCT_FLD(init, innodb_changed_page_bitmaps_init),
|
||||
|
||||
/* the function to invoke when plugin is unloaded */
|
||||
/* int (*)(void*); */
|
||||
STRUCT_FLD(deinit, i_s_common_deinit),
|
||||
|
||||
/* plugin version (for SHOW PLUGINS) */
|
||||
/* unsigned int */
|
||||
STRUCT_FLD(version, INNODB_VERSION_SHORT),
|
||||
|
||||
/* struct st_mysql_show_var* */
|
||||
STRUCT_FLD(status_vars, NULL),
|
||||
|
||||
/* struct st_mysql_sys_var** */
|
||||
STRUCT_FLD(system_vars, NULL),
|
||||
|
||||
/* Maria extension */
|
||||
STRUCT_FLD(version_info, INNODB_VERSION_STR),
|
||||
STRUCT_FLD(maturity, MariaDB_PLUGIN_MATURITY_BETA),
|
||||
};
|
||||
|
||||
|
@ -67,6 +67,7 @@ extern struct st_mysql_plugin i_s_innodb_mutexes;
|
||||
extern struct st_maria_plugin i_s_innodb_tablespaces_encryption;
|
||||
extern struct st_maria_plugin i_s_innodb_tablespaces_scrubbing;
|
||||
extern struct st_mysql_plugin i_s_innodb_sys_semaphore_waits;
|
||||
extern struct st_mysql_plugin i_s_innodb_changed_page_bitmaps;
|
||||
|
||||
/** maximum number of buffer page info we would cache. */
|
||||
#define MAX_BUF_INFO_CACHED 10000
|
||||
|
Loading…
x
Reference in New Issue
Block a user