170
177
static plugin::TableFunction* innodb_trx_tool= NULL;
171
178
static plugin::TableFunction* innodb_locks_tool= NULL;
172
179
static plugin::TableFunction* innodb_lock_waits_tool= NULL;
173
static plugin::TableFunction* innodb_sys_tables_tool= NULL;
174
static plugin::TableFunction* innodb_sys_tablestats_tool= NULL;
176
static plugin::TableFunction* innodb_sys_indexes_tool= NULL;
177
static plugin::TableFunction* innodb_sys_columns_tool= NULL;
178
static plugin::TableFunction* innodb_sys_fields_tool= NULL;
179
static plugin::TableFunction* innodb_sys_foreign_tool= NULL;
180
static plugin::TableFunction* innodb_sys_foreign_cols_tool= NULL;
182
static ReplicationLog *replication_logger= NULL;
183
typedef constrained_check<uint32_t, UINT32_MAX, 10> open_files_constraint;
184
static open_files_constraint innobase_open_files;
185
typedef constrained_check<uint32_t, 10, 1> mirrored_log_groups_constraint;
186
static mirrored_log_groups_constraint innobase_mirrored_log_groups;
187
typedef constrained_check<uint32_t, 100, 2> log_files_in_group_constraint;
188
static log_files_in_group_constraint innobase_log_files_in_group;
189
typedef constrained_check<uint32_t, 6, 0> force_recovery_constraint;
190
force_recovery_constraint innobase_force_recovery;
191
typedef constrained_check<size_t, SIZE_MAX, 256*1024, 1024> log_buffer_constraint;
192
static log_buffer_constraint innobase_log_buffer_size;
193
typedef constrained_check<size_t, SIZE_MAX, 512*1024, 1024> additional_mem_pool_constraint;
194
static additional_mem_pool_constraint innobase_additional_mem_pool_size;
195
typedef constrained_check<unsigned int, 1000, 1> autoextend_constraint;
196
static autoextend_constraint innodb_auto_extend_increment;
197
typedef constrained_check<size_t, SIZE_MAX, 5242880, 1048576> buffer_pool_constraint;
198
static buffer_pool_constraint innobase_buffer_pool_size;
199
typedef constrained_check<uint32_t, MAX_BUFFER_POOLS, 1> buffer_pool_instances_constraint;
200
static buffer_pool_instances_constraint innobase_buffer_pool_instances;
201
typedef constrained_check<uint32_t, UINT32_MAX, 100> io_capacity_constraint;
202
static io_capacity_constraint innodb_io_capacity;
203
typedef constrained_check<uint32_t, 5000, 1> purge_batch_constraint;
204
static purge_batch_constraint innodb_purge_batch_size;
205
typedef constrained_check<uint32_t, 1, 0> purge_threads_constraint;
206
static purge_threads_constraint innodb_n_purge_threads;
207
typedef constrained_check<uint16_t, 2, 0> trinary_constraint;
208
static trinary_constraint innodb_flush_log_at_trx_commit;
209
typedef constrained_check<unsigned int, 99, 0> max_dirty_pages_constraint;
210
static max_dirty_pages_constraint innodb_max_dirty_pages_pct;
211
static uint64_constraint innodb_max_purge_lag;
212
static uint64_nonzero_constraint innodb_stats_sample_pages;
213
typedef constrained_check<uint32_t, 64, 1> io_threads_constraint;
214
static io_threads_constraint innobase_read_io_threads;
215
static io_threads_constraint innobase_write_io_threads;
217
typedef constrained_check<uint32_t, 1000, 0> concurrency_constraint;
218
static concurrency_constraint innobase_commit_concurrency;
219
static concurrency_constraint innobase_thread_concurrency;
220
static uint32_nonzero_constraint innodb_concurrency_tickets;
222
typedef constrained_check<int64_t, INT64_MAX, 1024*1024, 1024*1024> log_file_constraint;
223
static log_file_constraint innobase_log_file_size;
225
static uint64_constraint innodb_replication_delay;
227
/** Percentage of the buffer pool to reserve for 'old' blocks.
228
Connected to buf_LRU_old_ratio. */
229
typedef constrained_check<uint32_t, 95, 5> old_blocks_constraint;
230
static old_blocks_constraint innobase_old_blocks_pct;
232
static uint32_constraint innodb_sync_spin_loops;
233
static uint32_constraint innodb_spin_wait_delay;
234
static uint32_constraint innodb_thread_sleep_delay;
236
typedef constrained_check<uint32_t, 64, 0> read_ahead_threshold_constraint;
237
static read_ahead_threshold_constraint innodb_read_ahead_threshold;
181
static long innobase_mirrored_log_groups, innobase_log_files_in_group,
182
innobase_log_buffer_size,
183
innobase_additional_mem_pool_size, innobase_file_io_threads,
184
innobase_force_recovery, innobase_open_files;
185
static ulong innobase_commit_concurrency = 0;
186
static ulong innobase_read_io_threads;
187
static ulong innobase_write_io_threads;
190
* @TODO: Turn this into size_t as soon as we have a Variable<size_t>
192
static int64_t innobase_buffer_pool_size, innobase_log_file_size;
239
194
/* The default values for the following char* start-up parameters
240
195
are determined in innobase_init below: */
242
std::string innobase_data_home_dir;
243
std::string innobase_data_file_path;
244
std::string innobase_log_group_home_dir;
245
static string innobase_file_format_name;
246
static string innobase_change_buffering;
248
/* The highest file format being used in the database. The value can be
249
set by user, however, it will be adjusted to the newer file format if
250
a table of such format is created/opened. */
251
static string innobase_file_format_max;
197
static char* innobase_data_home_dir = NULL;
198
static char* innobase_data_file_path = NULL;
199
static char* innobase_log_group_home_dir = NULL;
200
static char* innobase_file_format_name = NULL;
201
static char* innobase_change_buffering = NULL;
203
/* Note: This variable can be set to on/off and any of the supported
204
file formats in the configuration file, but can only be set to any
205
of the supported file formats during runtime. */
206
static char* innobase_file_format_check = NULL;
208
/* The following has a misleading name: starting from 4.0.5, this also
210
static char* innobase_unix_file_flush_method = NULL;
253
212
/* Below we have boolean-valued start-up parameters, and their default
256
typedef constrained_check<uint16_t, 2, 0> trinary_constraint;
257
static trinary_constraint innobase_fast_shutdown;
259
/* "innobase_file_format_check" decides whether we would continue
260
booting the server if the file format stamped on the system
261
table space exceeds the maximum file format supported
262
by the server. Can be set during server startup at command
263
line or configure file, and a read only variable after
266
/* If a new file format is introduced, the file format
267
name needs to be updated accordingly. Please refer to
268
file_format_name_map[] defined in trx0sys.c for the next
271
static my_bool innobase_file_format_check = TRUE;
215
static ulong innobase_fast_shutdown = 1;
216
#ifdef UNIV_LOG_ARCHIVE
217
static my_bool innobase_log_archive = FALSE;
218
static char* innobase_log_arch_dir = NULL;
219
#endif /* UNIV_LOG_ARCHIVE */
272
220
static my_bool innobase_use_doublewrite = TRUE;
273
221
static my_bool innobase_use_checksums = TRUE;
274
222
static my_bool innobase_rollback_on_timeout = FALSE;
275
223
static my_bool innobase_create_status_file = FALSE;
276
static bool innobase_use_replication_log;
277
static bool support_xa;
278
static bool strict_mode;
279
typedef constrained_check<uint32_t, 1024*1024*1024, 1> lock_wait_constraint;
280
static lock_wait_constraint lock_wait_timeout;
224
static my_bool innobase_stats_on_metadata = TRUE;
282
226
static char* internal_innobase_data_file_path = NULL;
228
static char* innodb_version_str = (char*) INNODB_VERSION_STR;
284
230
/* The following counter is used to convey information to InnoDB
285
231
about server activity: in selects it is not sensible to call
286
232
srv_active_wake_master_thread after each fetch or search, we only do
2987
2624
/********************************************************************//**
2988
Get the upper limit of the MySQL integral and floating-point type.
2989
@return maximum allowed value for the field */
2992
innobase_get_int_col_max_value(
2993
/*===========================*/
2994
const Field* field) /*!< in: MySQL field */
2996
uint64_t max_value = 0;
2998
switch(field->key_type()) {
3000
case HA_KEYTYPE_BINARY:
3001
max_value = 0xFFULL;
3004
case HA_KEYTYPE_ULONG_INT:
3005
max_value = 0xFFFFFFFFULL;
3007
case HA_KEYTYPE_LONG_INT:
3008
max_value = 0x7FFFFFFFULL;
3011
case HA_KEYTYPE_ULONGLONG:
3012
max_value = 0xFFFFFFFFFFFFFFFFULL;
3014
case HA_KEYTYPE_LONGLONG:
3015
max_value = 0x7FFFFFFFFFFFFFFFULL;
3017
case HA_KEYTYPE_DOUBLE:
3018
/* We use the maximum as per IEEE754-2008 standard, 2^53 */
3019
max_value = 0x20000000000000ULL;
3028
/*******************************************************************//**
3029
This function checks whether the index column information
3030
is consistent between KEY info from mysql and that from innodb index.
3031
@return TRUE if all column types match. */
3034
innobase_match_index_columns(
3035
/*=========================*/
3036
const KeyInfo* key_info, /*!< in: Index info
3038
const dict_index_t* index_info) /*!< in: Index info
3041
const KeyPartInfo* key_part;
3042
const KeyPartInfo* key_end;
3043
const dict_field_t* innodb_idx_fld;
3044
const dict_field_t* innodb_idx_fld_end;
3046
/* Check whether user defined index column count matches */
3047
if (key_info->key_parts != index_info->n_user_defined_cols) {
3051
key_part = key_info->key_part;
3052
key_end = key_part + key_info->key_parts;
3053
innodb_idx_fld = index_info->fields;
3054
innodb_idx_fld_end = index_info->fields + index_info->n_fields;
3056
/* Check each index column's datatype. We do not check
3057
column name because there exists case that index
3058
column name got modified in mysql but such change does not
3059
propagate to InnoDB.
3060
One hidden assumption here is that the index column sequences
3061
are matched up between those in mysql and Innodb. */
3062
for (; key_part != key_end; ++key_part) {
3065
ulint mtype = innodb_idx_fld->col->mtype;
3067
/* Need to translate to InnoDB column type before
3069
col_type = get_innobase_type_from_mysql_type(&is_unsigned,
3072
/* Ignore Innodb specific system columns. */
3073
while (mtype == DATA_SYS) {
3076
if (innodb_idx_fld >= innodb_idx_fld_end) {
3081
if (col_type != mtype) {
3082
/* Column Type mismatches */
3092
/*******************************************************************//**
3093
This function builds a translation table in INNOBASE_SHARE
3094
structure for fast index location with mysql array number from its
3095
table->key_info structure. This also provides the necessary translation
3096
between the key order in mysql key_info and Innodb ib_table->indexes if
3097
they are not fully matched with each other.
3098
Note we do not have any mutex protecting the translation table
3099
building based on the assumption that there is no concurrent
3100
index creation/drop and DMLs that requires index lookup. All table
3101
handle will be closed before the index creation/drop.
3102
@return TRUE if index translation table built successfully */
3105
innobase_build_index_translation(
3106
/*=============================*/
3107
const Table* table, /*!< in: table in MySQL data
3109
dict_table_t* ib_table, /*!< in: table in Innodb data
3111
INNOBASE_SHARE* share) /*!< in/out: share structure
3112
where index translation table
3113
will be constructed in. */
3115
ulint mysql_num_index;
3117
dict_index_t** index_mapping;
3120
mutex_enter(&dict_sys->mutex);
3122
mysql_num_index = table->getShare()->keys;
3123
ib_num_index = UT_LIST_GET_LEN(ib_table->indexes);
3125
index_mapping = share->idx_trans_tbl.index_mapping;
3127
/* If there exists inconsistency between MySQL and InnoDB dictionary
3128
(metadata) information, the number of index defined in MySQL
3129
could exceed that in InnoDB, do not build index translation
3130
table in such case */
3131
if (UNIV_UNLIKELY(ib_num_index < mysql_num_index)) {
3136
/* If index entry count is non-zero, nothing has
3137
changed since last update, directly return TRUE */
3138
if (share->idx_trans_tbl.index_count) {
3139
/* Index entry count should still match mysql_num_index */
3140
ut_a(share->idx_trans_tbl.index_count == mysql_num_index);
3144
/* The number of index increased, rebuild the mapping table */
3145
if (mysql_num_index > share->idx_trans_tbl.array_size) {
3146
index_mapping = (dict_index_t**) realloc(index_mapping,
3148
sizeof(*index_mapping));
3150
if (!index_mapping) {
3151
/* Report an error if index_mapping continues to be
3152
NULL and mysql_num_index is a non-zero value */
3153
errmsg_printf(ERRMSG_LVL_ERROR,
3154
"InnoDB: fail to allocate memory for "
3155
"index translation table. Number of "
3156
"Index:%lu, array size:%lu",
3158
share->idx_trans_tbl.array_size);
3163
share->idx_trans_tbl.array_size = mysql_num_index;
3166
/* For each index in the mysql key_info array, fetch its
3167
corresponding InnoDB index pointer into index_mapping
3169
for (ulint count = 0; count < mysql_num_index; count++) {
3171
/* Fetch index pointers into index_mapping according to mysql
3173
index_mapping[count] = dict_table_get_index_on_name(
3174
ib_table, table->key_info[count].name);
3176
if (!index_mapping[count]) {
3177
errmsg_printf(ERRMSG_LVL_ERROR, "Cannot find index %s in InnoDB "
3178
"index dictionary.",
3179
table->key_info[count].name);
3184
/* Double check fetched index has the same
3185
column info as those in mysql key_info. */
3186
if (!innobase_match_index_columns(&table->key_info[count],
3187
index_mapping[count])) {
3188
errmsg_printf(ERRMSG_LVL_ERROR, "Found index %s whose column info "
3189
"does not match that of MySQL.",
3190
table->key_info[count].name);
3196
/* Successfully built the translation table */
3197
share->idx_trans_tbl.index_count = mysql_num_index;
3201
/* Build translation table failed. */
3202
free(index_mapping);
3204
share->idx_trans_tbl.array_size = 0;
3205
share->idx_trans_tbl.index_count = 0;
3206
index_mapping = NULL;
3209
share->idx_trans_tbl.index_mapping = index_mapping;
3211
mutex_exit(&dict_sys->mutex);
3216
/*******************************************************************//**
3217
This function uses index translation table to quickly locate the
3218
requested index structure.
3219
Note we do not have mutex protection for the index translatoin table
3220
access, it is based on the assumption that there is no concurrent
3221
translation table rebuild (fter create/drop index) and DMLs that
3222
require index lookup.
3223
@return dict_index_t structure for requested index. NULL if
3224
fail to locate the index structure. */
3227
innobase_index_lookup(
3228
/*==================*/
3229
INNOBASE_SHARE* share, /*!< in: share structure for index
3230
translation table. */
3231
uint keynr) /*!< in: index number for the requested
3234
if (!share->idx_trans_tbl.index_mapping
3235
|| keynr >= share->idx_trans_tbl.index_count) {
3239
return(share->idx_trans_tbl.index_mapping[keynr]);
3242
/********************************************************************//**
3243
2625
Set the autoinc column max value. This should only be called once from
3244
ha_innobase::open(). Therefore there's no need for a covering lock. */
2626
ha_innobase::open(). Therefore there's no need for a covering lock.
2627
@return DB_SUCCESS or error code */
3247
2630
ha_innobase::innobase_initialize_autoinc()
3248
2631
/*======================================*/
2633
dict_index_t* index;
3250
2634
uint64_t auto_inc;
3251
const Field* field = getTable()->found_next_number_field;
3253
if (field != NULL) {
3254
auto_inc = innobase_get_int_col_max_value(field);
3256
/* We have no idea what's been passed in to us as the
3257
autoinc column. We set it to the 0, effectively disabling
3258
updates to the table. */
2635
const char* col_name;
2638
col_name = table->found_next_number_field->field_name;
2639
index = innobase_get_index(table->getShare()->next_number_index);
2641
/* Execute SELECT MAX(col_name) FROM TABLE; */
2642
error = row_search_max_autoinc(index, col_name, &auto_inc);
2647
/* At the this stage we don't know the increment
2648
or the offset, so use default inrement of 1. */
2652
case DB_RECORD_NOT_FOUND:
3261
2653
ut_print_timestamp(stderr);
3262
fprintf(stderr, " InnoDB: Unable to determine the AUTOINC "
3266
if (srv_force_recovery >= SRV_FORCE_NO_IBUF_MERGE) {
3267
/* If the recovery level is set so high that writes
3268
are disabled we force the AUTOINC counter to 0
3269
value effectively disabling writes to the table.
3270
Secondly, we avoid reading the table in case the read
3271
results in failure due to a corrupted table/index.
3273
We will not return an error to the client, so that the
3274
tables can be dumped with minimal hassle. If an error
3275
were returned in this case, the first attempt to read
3276
the table would fail and subsequent SELECTs would succeed. */
3278
} else if (field == NULL) {
3279
/* This is a far more serious error, best to avoid
3280
opening the table and return failure. */
3281
my_error(ER_AUTOINC_READ_FAILED, MYF(0));
3283
dict_index_t* index;
3284
const char* col_name;
3285
uint64_t read_auto_inc;
3288
update_session(getTable()->in_use);
3289
col_name = field->field_name;
3291
ut_a(prebuilt->trx == session_to_trx(user_session));
3293
index = innobase_get_index(getTable()->getShare()->next_number_index);
3295
/* Execute SELECT MAX(col_name) FROM TABLE; */
3296
err = row_search_max_autoinc(index, col_name, &read_auto_inc);
3300
uint64_t col_max_value;
3302
col_max_value = innobase_get_int_col_max_value(field);
3304
/* At the this stage we do not know the increment
3305
nor the offset, so use a default increment of 1. */
3307
auto_inc = innobase_next_autoinc(read_auto_inc, 1, 1, col_max_value);
3311
case DB_RECORD_NOT_FOUND:
3312
ut_print_timestamp(stderr);
3313
fprintf(stderr, " InnoDB: MySQL and InnoDB data "
3314
"dictionaries are out of sync.\n"
3315
"InnoDB: Unable to find the AUTOINC column "
3316
"%s in the InnoDB table %s.\n"
3317
"InnoDB: We set the next AUTOINC column "
3319
"InnoDB: in effect disabling the AUTOINC "
3320
"next value generation.\n"
3321
"InnoDB: You can either set the next "
3322
"AUTOINC value explicitly using ALTER TABLE\n"
3323
"InnoDB: or fix the data dictionary by "
3324
"recreating the table.\n",
3325
col_name, index->table->name);
3327
/* This will disable the AUTOINC generation. */
3330
/* We want the open to succeed, so that the user can
3331
take corrective action. ie. reads should succeed but
3332
updates should fail. */
3336
/* row_search_max_autoinc() should only return
3337
one of DB_SUCCESS or DB_RECORD_NOT_FOUND. */
2654
fprintf(stderr, " InnoDB: MySQL and InnoDB data "
2655
"dictionaries are out of sync.\n"
2656
"InnoDB: Unable to find the AUTOINC column %s in the "
2657
"InnoDB table %s.\n"
2658
"InnoDB: We set the next AUTOINC column value to the "
2659
"maximum possible value,\n"
2660
"InnoDB: in effect disabling the AUTOINC next value "
2662
"InnoDB: You can either set the next AUTOINC value "
2663
"explicitly using ALTER TABLE\n"
2664
"InnoDB: or fix the data dictionary by recreating "
2666
col_name, index->table->name);
2668
auto_inc = 0xFFFFFFFFFFFFFFFFULL;
3342
2675
dict_table_autoinc_initialize(prebuilt->table, auto_inc);
3345
2680
/*****************************************************************//**
9185
8030
/************************************************************//**
8031
Validate the file format check value, is it one of "on" or "off",
8032
as a side effect it sets the srv_check_file_format_at_startup variable.
8033
@return true if config value one of "on" or "off" */
8036
innobase_file_format_check_on_off(
8037
/*==============================*/
8038
const char* format_check) /*!< in: parameter value */
8042
if (!innobase_strcasecmp(format_check, "off")) {
8044
/* Set the value to disable checking. */
8045
srv_check_file_format_at_startup = DICT_TF_FORMAT_MAX + 1;
8047
} else if (!innobase_strcasecmp(format_check, "on")) {
8049
/* Set the value to the lowest supported format. */
8050
srv_check_file_format_at_startup = DICT_TF_FORMAT_51;
8058
/************************************************************//**
9186
8059
Validate the file format check config parameters, as a side effect it
9187
sets the srv_max_file_format_at_startup variable.
9188
@return the format_id if valid config value, otherwise, return -1 */
8060
sets the srv_check_file_format_at_startup variable.
8061
@return true if valid config value */
9191
innobase_file_format_validate_and_set(
8064
innobase_file_format_check_validate(
9192
8065
/*================================*/
9193
const char* format_max) /*!< in: parameter value */
8066
const char* format_check) /*!< in: parameter value */
9195
8068
uint format_id;
9197
format_id = innobase_file_format_name_lookup(format_max);
8071
format_id = innobase_file_format_name_lookup(format_check);
9199
8073
if (format_id < DICT_TF_FORMAT_MAX + 1) {
9200
srv_max_file_format_at_startup = format_id;
9201
return((int) format_id);
9209
static void init_options(drizzled::module::option_context &context)
9211
context("disable-checksums",
9212
"Disable InnoDB checksums validation.");
9213
context("data-home-dir",
9214
po::value<string>(),
9215
"The common part for InnoDB table spaces.");
9216
context("disable-doublewrite",
9217
"Disable InnoDB doublewrite buffer.");
9218
context("io-capacity",
9219
po::value<io_capacity_constraint>(&innodb_io_capacity)->default_value(200),
9220
"Number of IOPs the server can do. Tunes the background IO rate");
9221
context("fast-shutdown",
9222
po::value<trinary_constraint>(&innobase_fast_shutdown)->default_value(1),
9223
"Speeds up the shutdown process of the InnoDB storage engine. Possible values are 0, 1 (faster) or 2 (fastest - crash-like).");
9224
context("purge-batch-size",
9225
po::value<purge_batch_constraint>(&innodb_purge_batch_size)->default_value(20),
9226
"Number of UNDO logs to purge in one batch from the history list. "
9228
context("purge-threads",
9229
po::value<purge_threads_constraint>(&innodb_n_purge_threads)->default_value(0),
9230
"Purge threads can be either 0 or 1. Defalut is 0.");
9231
context("file-per-table",
9232
po::value<bool>(&srv_file_per_table)->default_value(false)->zero_tokens(),
9233
"Stores each InnoDB table to an .ibd file in the database dir.");
9234
context("file-format",
9235
po::value<string>(&innobase_file_format_name)->default_value("Antelope"),
9236
"File format to use for new tables in .ibd files.");
9237
context("file-format-max",
9238
po::value<string>(&innobase_file_format_max)->default_value("Antelope"),
9239
"The highest file format in the tablespace.");
9240
context("file-format-check",
9241
po::value<bool>(&innobase_file_format_check)->default_value(true)->zero_tokens(),
9242
"Whether to perform system file format check.");
9243
context("flush-log-at-trx-commit",
9244
po::value<trinary_constraint>(&innodb_flush_log_at_trx_commit)->default_value(1),
9245
"Set to 0 (write and flush once per second), 1 (write and flush at each commit) or 2 (write at commit, flush once per second).");
9246
context("flush-method",
9247
po::value<string>(),
9248
"With which method to flush data.");
9249
context("log-group-home-dir",
9250
po::value<string>(),
9251
"Path to InnoDB log files.");
9252
context("max-dirty-pages-pct",
9253
po::value<max_dirty_pages_constraint>(&innodb_max_dirty_pages_pct)->default_value(75),
9254
"Percentage of dirty pages allowed in bufferpool.");
9255
context("disable-adaptive-flushing",
9256
"Do not attempt flushing dirty pages to avoid IO bursts at checkpoints.");
9257
context("max-purge-lag",
9258
po::value<uint64_constraint>(&innodb_max_purge_lag)->default_value(0),
9259
"Desired maximum length of the purge queue (0 = no limit)");
9260
context("status-file",
9261
po::value<bool>(&innobase_create_status_file)->default_value(false)->zero_tokens(),
9262
"Enable SHOW INNODB STATUS output in the innodb_status.<pid> file");
9263
context("disable-stats-on-metadata",
9264
"Disable statistics gathering for metadata commands such as SHOW TABLE STATUS (on by default)");
9265
context("stats-sample-pages",
9266
po::value<uint64_nonzero_constraint>(&innodb_stats_sample_pages)->default_value(8),
9267
"The number of index pages to sample when calculating statistics (default 8)");
9268
context("disable-adaptive-hash-index",
9269
"Enable InnoDB adaptive hash index (enabled by default)");
9270
context("replication-delay",
9271
po::value<uint64_constraint>(&innodb_replication_delay)->default_value(0),
9272
"Replication thread delay (ms) on the slave server if innodb_thread_concurrency is reached (0 by default)");
9273
context("additional-mem-pool-size",
9274
po::value<additional_mem_pool_constraint>(&innobase_additional_mem_pool_size)->default_value(8*1024*1024L),
9275
"Size of a memory pool InnoDB uses to store data dictionary information and other internal data structures.");
9276
context("autoextend-increment",
9277
po::value<autoextend_constraint>(&innodb_auto_extend_increment)->default_value(8L),
9278
"Data file autoextend increment in megabytes");
9279
context("buffer-pool-size",
9280
po::value<buffer_pool_constraint>(&innobase_buffer_pool_size)->default_value(128*1024*1024L),
9281
"The size of the memory buffer InnoDB uses to cache data and indexes of its tables.");
9282
context("buffer-pool-instances",
9283
po::value<buffer_pool_instances_constraint>(&innobase_buffer_pool_instances)->default_value(1),
9284
"Number of buffer pool instances, set to higher value on high-end machines to increase scalability");
9286
context("commit-concurrency",
9287
po::value<concurrency_constraint>(&innobase_commit_concurrency)->default_value(0),
9288
"Helps in performance tuning in heavily concurrent environments.");
9289
context("concurrency-tickets",
9290
po::value<uint32_nonzero_constraint>(&innodb_concurrency_tickets)->default_value(500L),
9291
"Number of times a thread is allowed to enter InnoDB within the same SQL query after it has once got the ticket");
9292
context("read-io-threads",
9293
po::value<io_threads_constraint>(&innobase_read_io_threads)->default_value(4),
9294
"Number of background read I/O threads in InnoDB.");
9295
context("write-io-threads",
9296
po::value<io_threads_constraint>(&innobase_write_io_threads)->default_value(4),
9297
"Number of background write I/O threads in InnoDB.");
9298
context("force-recovery",
9299
po::value<force_recovery_constraint>(&innobase_force_recovery)->default_value(0),
9300
"Helps to save your data in case the disk image of the database becomes corrupt.");
9301
context("log-buffer-size",
9302
po::value<log_buffer_constraint>(&innobase_log_buffer_size)->default_value(8*1024*1024L),
9303
"The size of the buffer which InnoDB uses to write log to the log files on disk.");
9304
context("log-file-size",
9305
po::value<log_file_constraint>(&innobase_log_file_size)->default_value(20*1024*1024L),
9306
"The size of the buffer which InnoDB uses to write log to the log files on disk.");
9307
context("log-files-in-group",
9308
po::value<log_files_in_group_constraint>(&innobase_log_files_in_group)->default_value(2),
9309
"Number of log files in the log group. InnoDB writes to the files in a circular fashion.");
9310
context("mirrored-log-groups",
9311
po::value<mirrored_log_groups_constraint>(&innobase_mirrored_log_groups)->default_value(1),
9312
"Number of identical copies of log groups we keep for the database. Currently this should be set to 1.");
9313
context("open-files",
9314
po::value<open_files_constraint>(&innobase_open_files)->default_value(300L),
9315
"How many files at the maximum InnoDB keeps open at the same time.");
9316
context("sync-spin-loops",
9317
po::value<uint32_constraint>(&innodb_sync_spin_loops)->default_value(30L),
9318
"Count of spin-loop rounds in InnoDB mutexes (30 by default)");
9319
context("spin-wait-delay",
9320
po::value<uint32_constraint>(&innodb_spin_wait_delay)->default_value(6L),
9321
"Maximum delay between polling for a spin lock (6 by default)");
9322
context("thread-concurrency",
9323
po::value<concurrency_constraint>(&innobase_thread_concurrency)->default_value(0),
9324
"Helps in performance tuning in heavily concurrent environments. Sets the maximum number of threads allowed inside InnoDB. Value 0 will disable the thread throttling.");
9325
context("thread-sleep-delay",
9326
po::value<uint32_constraint>(&innodb_thread_sleep_delay)->default_value(10000L),
9327
"Time of innodb thread sleeping before joining InnoDB queue (usec). Value 0 disable a sleep");
9328
context("data-file-path",
9329
po::value<string>(),
9330
"Path to individual files and their sizes.");
9332
po::value<string>()->default_value(INNODB_VERSION_STR),
9334
context("use-internal-malloc",
9335
"Use InnoDB's internal memory allocator instal of the OS memory allocator.");
9336
context("change-buffering",
9337
po::value<string>(&innobase_change_buffering),
9338
"Buffer changes to reduce random access: OFF, ON, inserting, deleting, changing, or purging.");
9339
context("read-ahead-threshold",
9340
po::value<read_ahead_threshold_constraint>(&innodb_read_ahead_threshold)->default_value(56),
9341
"Number of pages that must be accessed sequentially for InnoDB to trigger a readahead.");
9342
context("disable-xa",
9343
"Disable InnoDB support for the XA two-phase commit");
9344
context("disable-table-locks",
9345
"Disable InnoDB locking in LOCK TABLES");
9346
context("strict-mode",
9347
po::value<bool>(&strict_mode)->default_value(false)->zero_tokens(),
9348
"Use strict mode when evaluating create options.");
9349
context("replication-log",
9350
po::value<bool>(&innobase_use_replication_log)->default_value(false),
9351
_("Enable internal replication log."));
9352
context("lock-wait-timeout",
9353
po::value<lock_wait_constraint>(&lock_wait_timeout)->default_value(50),
9354
_("Timeout in seconds an InnoDB transaction may wait for a lock before being rolled back. Values above 100000000 disable the timeout."));
9355
context("old-blocks-pct",
9356
po::value<old_blocks_constraint>(&innobase_old_blocks_pct)->default_value(100 * 3 / 8),
9357
_("Percentage of the buffer pool to reserve for 'old' blocks."));
9358
context("old-blocks-time",
9359
po::value<uint32_t>(&buf_LRU_old_threshold_ms)->default_value(0),
9360
_("ove blocks to the 'new' end of the buffer pool if the first access"
9361
" was at least this many milliseconds ago."
9362
" The timeout is disabled if 0 (the default)."));
8074
srv_check_file_format_at_startup = format_id;
8082
/*************************************************************//**
8083
Check if it is a valid file format. This function is registered as
8084
a callback with MySQL.
8085
@return 0 for valid file format */
8088
innodb_file_format_name_validate(
8089
/*=============================*/
8090
Session* , /*!< in: thread handle */
8091
drizzle_sys_var* , /*!< in: pointer to system
8093
void* save, /*!< out: immediate result
8094
for update function */
8095
drizzle_value* value) /*!< in: incoming string */
8097
const char* file_format_input;
8098
char buff[STRING_BUFFER_USUAL_SIZE];
8099
int len = sizeof(buff);
8102
ut_a(value != NULL);
8104
file_format_input = value->val_str(value, buff, &len);
8106
if (file_format_input != NULL) {
8109
format_id = innobase_file_format_name_lookup(
8112
if (format_id <= DICT_TF_FORMAT_MAX) {
8114
*static_cast<const char**>(save) = file_format_input;
8119
*static_cast<const char**>(save) = NULL;
8123
/****************************************************************//**
8124
Update the system variable innodb_file_format using the "saved"
8125
value. This function is registered as a callback with MySQL. */
8128
innodb_file_format_name_update(
8129
/*===========================*/
8130
Session* , /*!< in: thread handle */
8131
drizzle_sys_var* , /*!< in: pointer to
8133
void* var_ptr, /*!< out: where the
8134
formal string goes */
8135
const void* save) /*!< in: immediate result
8136
from check function */
8138
const char* format_name;
8140
ut_a(var_ptr != NULL);
8143
format_name = *static_cast<const char*const*>(save);
8148
format_id = innobase_file_format_name_lookup(format_name);
8150
if (format_id <= DICT_TF_FORMAT_MAX) {
8151
srv_file_format = format_id;
8155
*static_cast<const char**>(var_ptr)
8156
= trx_sys_file_format_id_to_name(srv_file_format);
8159
/*************************************************************//**
8160
Check if valid argument to innodb_file_format_check. This
8161
function is registered as a callback with MySQL.
8162
@return 0 for valid file format */
8165
innodb_file_format_check_validate(
8166
/*==============================*/
8167
Session* , /*!< in: thread handle */
8168
drizzle_sys_var* , /*!< in: pointer to system
8170
void* save, /*!< out: immediate result
8171
for update function */
8172
drizzle_value* value) /*!< in: incoming string */
8174
const char* file_format_input;
8175
char buff[STRING_BUFFER_USUAL_SIZE];
8176
int len = sizeof(buff);
8179
ut_a(value != NULL);
8181
file_format_input = value->val_str(value, buff, &len);
8183
if (file_format_input != NULL) {
8185
/* Check if user set on/off, we want to print a suitable
8186
message if they did so. */
8188
if (innobase_file_format_check_on_off(file_format_input)) {
8189
errmsg_printf(ERRMSG_LVL_WARN,
8190
"InnoDB: invalid innodb_file_format_check "
8191
"value; on/off can only be set at startup or "
8192
"in the configuration file");
8193
} else if (innobase_file_format_check_validate(
8194
file_format_input)) {
8196
*static_cast<const char**>(save) = file_format_input;
8201
errmsg_printf(ERRMSG_LVL_WARN,
8202
"InnoDB: invalid innodb_file_format_check "
8203
"value; can be any format up to %s "
8204
"or its equivalent numeric id",
8205
trx_sys_file_format_id_to_name(
8206
DICT_TF_FORMAT_MAX));
8210
*static_cast<const char**>(save) = NULL;
8214
/****************************************************************//**
8215
Update the system variable innodb_file_format_check using the "saved"
8216
value. This function is registered as a callback with MySQL. */
8219
innodb_file_format_check_update(
8220
/*============================*/
8221
Session* session, /*!< in: thread handle */
8222
drizzle_sys_var* , /*!< in: pointer to
8224
void* var_ptr, /*!< out: where the
8225
formal string goes */
8226
const void* save) /*!< in: immediate result
8227
from check function */
8229
const char* format_name_in;
8230
const char** format_name_out;
8234
ut_a(var_ptr != NULL);
8236
format_name_in = *static_cast<const char*const*>(save);
8238
if (!format_name_in) {
8243
format_id = innobase_file_format_name_lookup(format_name_in);
8245
if (format_id > DICT_TF_FORMAT_MAX) {
8246
/* DEFAULT is "on", which is invalid at runtime. */
8247
push_warning_printf(session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
8249
"Ignoring SET innodb_file_format=%s",
8254
format_name_out = static_cast<const char**>(var_ptr);
8256
/* Update the max format id in the system tablespace. */
8257
if (trx_sys_file_format_max_set(format_id, format_name_out)) {
8258
ut_print_timestamp(stderr);
8260
" [Info] InnoDB: the file format in the system "
8261
"tablespace is now set to %s.\n", *format_name_out);
8265
/****************************************************************//**
8266
Update the system variable innodb_adaptive_hash_index using the "saved"
8267
value. This function is registered as a callback with MySQL. */
8270
innodb_adaptive_hash_index_update(
8271
/*==============================*/
8272
Session* , /*!< in: thread handle */
8273
drizzle_sys_var* , /*!< in: pointer to
8275
void* , /*!< out: where the
8276
formal string goes */
8277
const void* save) /*!< in: immediate result
8278
from check function */
8280
if (*(bool*) save) {
8281
btr_search_enable();
8283
btr_search_disable();
8287
/*************************************************************//**
8288
Check if it is a valid value of innodb_change_buffering. This function is
8289
registered as a callback with MySQL.
8290
@return 0 for valid innodb_change_buffering */
8293
innodb_change_buffering_validate(
8294
/*=============================*/
8295
Session* , /*!< in: thread handle */
8296
drizzle_sys_var* , /*!< in: pointer to system
8298
void* save, /*!< out: immediate result
8299
for update function */
8300
drizzle_value* value) /*!< in: incoming string */
8302
const char* change_buffering_input;
8303
char buff[STRING_BUFFER_USUAL_SIZE];
8304
int len = sizeof(buff);
8307
ut_a(value != NULL);
8309
change_buffering_input = value->val_str(value, buff, &len);
8311
if (change_buffering_input != NULL) {
8314
for (use = 0; use < UT_ARR_SIZE(innobase_change_buffering_values);
8316
if (!innobase_strcasecmp(
8317
change_buffering_input,
8318
innobase_change_buffering_values[use])) {
8319
*(ibuf_use_t*) save = (ibuf_use_t) use;
8328
/****************************************************************//**
8329
Update the system variable innodb_change_buffering using the "saved"
8330
value. This function is registered as a callback with MySQL. */
8333
innodb_change_buffering_update(
8334
/*===========================*/
8335
Session* , /*!< in: thread handle */
8336
drizzle_sys_var* , /*!< in: pointer to
8338
void* var_ptr, /*!< out: where the
8339
formal string goes */
8340
const void* save) /*!< in: immediate result
8341
from check function */
8343
ut_a(var_ptr != NULL);
8345
ut_a((*(ibuf_use_t*) save) < IBUF_USE_COUNT);
8347
ibuf_use = *(const ibuf_use_t*) save;
8349
*(const char**) var_ptr = innobase_change_buffering_values[ibuf_use];
8352
/* plugin options */
8353
static DRIZZLE_SYSVAR_BOOL(checksums, innobase_use_checksums,
8354
PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
8355
"Enable InnoDB checksums validation (enabled by default). "
8356
"Disable with --skip-innodb-checksums.",
8359
static DRIZZLE_SYSVAR_STR(data_home_dir, innobase_data_home_dir,
8360
PLUGIN_VAR_READONLY,
8361
"The common part for InnoDB table spaces.",
8364
static DRIZZLE_SYSVAR_BOOL(doublewrite, innobase_use_doublewrite,
8365
PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
8366
"Enable InnoDB doublewrite buffer (enabled by default). "
8367
"Disable with --skip-innodb-doublewrite.",
8370
static DRIZZLE_SYSVAR_ULONG(io_capacity, srv_io_capacity,
8371
PLUGIN_VAR_RQCMDARG,
8372
"Number of IOPs the server can do. Tunes the background IO rate",
8373
NULL, NULL, 200, 100, ~0L, 0);
8375
static DRIZZLE_SYSVAR_ULONG(fast_shutdown, innobase_fast_shutdown,
8376
PLUGIN_VAR_OPCMDARG,
8377
"Speeds up the shutdown process of the InnoDB storage engine. Possible "
8378
"values are 0, 1 (faster)"
8379
" or 2 (fastest - crash-like)"
8381
NULL, NULL, 1, 0, 2, 0);
8383
static DRIZZLE_SYSVAR_BOOL(file_per_table, srv_file_per_table,
8384
PLUGIN_VAR_NOCMDARG,
8385
"Stores each InnoDB table to an .ibd file in the database dir.",
8388
static DRIZZLE_SYSVAR_STR(file_format, innobase_file_format_name,
8389
PLUGIN_VAR_RQCMDARG,
8390
"File format to use for new tables in .ibd files.",
8391
innodb_file_format_name_validate,
8392
innodb_file_format_name_update, "Antelope");
8394
static DRIZZLE_SYSVAR_STR(file_format_check, innobase_file_format_check,
8395
PLUGIN_VAR_OPCMDARG,
8396
"The highest file format in the tablespace.",
8397
innodb_file_format_check_validate,
8398
innodb_file_format_check_update,
8401
static DRIZZLE_SYSVAR_ULONG(flush_log_at_trx_commit, srv_flush_log_at_trx_commit,
8402
PLUGIN_VAR_OPCMDARG,
8403
"Set to 0 (write and flush once per second),"
8404
" 1 (write and flush at each commit)"
8405
" or 2 (write at commit, flush once per second).",
8406
NULL, NULL, 1, 0, 2, 0);
8408
static DRIZZLE_SYSVAR_STR(flush_method, innobase_unix_file_flush_method,
8409
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8410
"With which method to flush data.", NULL, NULL, NULL);
8412
#ifdef UNIV_LOG_ARCHIVE
8413
static DRIZZLE_SYSVAR_STR(log_arch_dir, innobase_log_arch_dir,
8414
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8415
"Where full logs should be archived.", NULL, NULL, NULL);
8417
static DRIZZLE_SYSVAR_BOOL(log_archive, innobase_log_archive,
8418
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
8419
"Set to 1 if you want to have logs archived.", NULL, NULL, FALSE);
8420
#endif /* UNIV_LOG_ARCHIVE */
8422
static DRIZZLE_SYSVAR_STR(log_group_home_dir, innobase_log_group_home_dir,
8423
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8424
"Path to InnoDB log files.", NULL, NULL, NULL);
8426
static DRIZZLE_SYSVAR_ULONG(max_dirty_pages_pct, srv_max_buf_pool_modified_pct,
8427
PLUGIN_VAR_RQCMDARG,
8428
"Percentage of dirty pages allowed in bufferpool.",
8429
NULL, NULL, 75, 0, 99, 0);
8431
static DRIZZLE_SYSVAR_BOOL(adaptive_flushing, srv_adaptive_flushing,
8432
PLUGIN_VAR_NOCMDARG,
8433
"Attempt flushing dirty pages to avoid IO bursts at checkpoints.",
8436
static DRIZZLE_SYSVAR_ULONG(max_purge_lag, srv_max_purge_lag,
8437
PLUGIN_VAR_RQCMDARG,
8438
"Desired maximum length of the purge queue (0 = no limit)",
8439
NULL, NULL, 0, 0, ~0L, 0);
8441
static DRIZZLE_SYSVAR_BOOL(status_file, innobase_create_status_file,
8442
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_NOSYSVAR,
8443
"Enable SHOW INNODB STATUS output in the innodb_status.<pid> file",
8446
static DRIZZLE_SYSVAR_BOOL(stats_on_metadata, innobase_stats_on_metadata,
8447
PLUGIN_VAR_OPCMDARG,
8448
"Enable statistics gathering for metadata commands such as SHOW TABLE STATUS (on by default)",
8451
static DRIZZLE_SYSVAR_ULONGLONG(stats_sample_pages, srv_stats_sample_pages,
8452
PLUGIN_VAR_RQCMDARG,
8453
"The number of index pages to sample when calculating statistics (default 8)",
8454
NULL, NULL, 8, 1, ~0ULL, 0);
8456
static DRIZZLE_SYSVAR_BOOL(adaptive_hash_index, btr_search_enabled,
8457
PLUGIN_VAR_OPCMDARG,
8458
"Enable InnoDB adaptive hash index (enabled by default). "
8459
"Disable with --skip-innodb-adaptive-hash-index.",
8460
NULL, innodb_adaptive_hash_index_update, TRUE);
8462
static DRIZZLE_SYSVAR_ULONG(replication_delay, srv_replication_delay,
8463
PLUGIN_VAR_RQCMDARG,
8464
"Replication thread delay (ms) on the slave server if "
8465
"innodb_thread_concurrency is reached (0 by default)",
8466
NULL, NULL, 0, 0, ~0UL, 0);
8468
static DRIZZLE_SYSVAR_LONG(additional_mem_pool_size, innobase_additional_mem_pool_size,
8469
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8470
"Size of a memory pool InnoDB uses to store data dictionary information and other internal data structures.",
8471
NULL, NULL, 8*1024*1024L, 512*1024L, LONG_MAX, 1024);
8473
static DRIZZLE_SYSVAR_UINT(autoextend_increment, srv_auto_extend_increment,
8474
PLUGIN_VAR_RQCMDARG,
8475
"Data file autoextend increment in megabytes",
8476
NULL, NULL, 8L, 1L, 1000L, 0);
8478
static DRIZZLE_SYSVAR_LONGLONG(buffer_pool_size, innobase_buffer_pool_size,
8479
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8480
"The size of the memory buffer InnoDB uses to cache data and indexes of its tables.",
8481
NULL, NULL, 128*1024*1024L, 5*1024*1024L, INT64_MAX, 1024*1024L);
8483
static DRIZZLE_SYSVAR_ULONG(commit_concurrency, innobase_commit_concurrency,
8484
PLUGIN_VAR_RQCMDARG,
8485
"Helps in performance tuning in heavily concurrent environments.",
8486
innobase_commit_concurrency_validate, NULL, 0, 0, 1000, 0);
8488
static DRIZZLE_SYSVAR_ULONG(concurrency_tickets, srv_n_free_tickets_to_enter,
8489
PLUGIN_VAR_RQCMDARG,
8490
"Number of times a thread is allowed to enter InnoDB within the same SQL query after it has once got the ticket",
8491
NULL, NULL, 500L, 1L, ~0L, 0);
8493
static DRIZZLE_SYSVAR_LONG(file_io_threads, innobase_file_io_threads,
8494
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8495
"Number of file I/O threads in InnoDB.",
8496
NULL, NULL, 4, 4, 64, 0);
8498
static DRIZZLE_SYSVAR_ULONG(read_io_threads, innobase_read_io_threads,
8499
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8500
"Number of background read I/O threads in InnoDB.",
8501
NULL, NULL, 4, 1, 64, 0);
8503
static DRIZZLE_SYSVAR_ULONG(write_io_threads, innobase_write_io_threads,
8504
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8505
"Number of background write I/O threads in InnoDB.",
8506
NULL, NULL, 4, 1, 64, 0);
8508
static DRIZZLE_SYSVAR_LONG(force_recovery, innobase_force_recovery,
8509
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8510
"Helps to save your data in case the disk image of the database becomes corrupt.",
8511
NULL, NULL, 0, 0, 6, 0);
8513
static DRIZZLE_SYSVAR_LONG(log_buffer_size, innobase_log_buffer_size,
8514
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8515
"The size of the buffer which InnoDB uses to write log to the log files on disk.",
8516
NULL, NULL, 8*1024*1024L, 256*1024L, LONG_MAX, 1024);
8518
static DRIZZLE_SYSVAR_LONGLONG(log_file_size, innobase_log_file_size,
8519
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8520
"Size of each log file in a log group.",
8521
NULL, NULL, 20*1024*1024L, 1*1024*1024L, INT64_MAX, 1024*1024L);
8523
static DRIZZLE_SYSVAR_LONG(log_files_in_group, innobase_log_files_in_group,
8524
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8525
"Number of log files in the log group. InnoDB writes to the files in a circular fashion. Value 3 is recommended here.",
8526
NULL, NULL, 2, 2, 100, 0);
8528
static DRIZZLE_SYSVAR_LONG(mirrored_log_groups, innobase_mirrored_log_groups,
8529
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8530
"Number of identical copies of log groups we keep for the database. Currently this should be set to 1.",
8531
NULL, NULL, 1, 1, 10, 0);
8533
static DRIZZLE_SYSVAR_LONG(open_files, innobase_open_files,
8534
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8535
"How many files at the maximum InnoDB keeps open at the same time.",
8536
NULL, NULL, 300L, 10L, LONG_MAX, 0);
8538
static DRIZZLE_SYSVAR_ULONG(sync_spin_loops, srv_n_spin_wait_rounds,
8539
PLUGIN_VAR_RQCMDARG,
8540
"Count of spin-loop rounds in InnoDB mutexes (30 by default)",
8541
NULL, NULL, 30L, 0L, ~0L, 0);
8543
static DRIZZLE_SYSVAR_ULONG(spin_wait_delay, srv_spin_wait_delay,
8544
PLUGIN_VAR_OPCMDARG,
8545
"Maximum delay between polling for a spin lock (6 by default)",
8546
NULL, NULL, 6L, 0L, ~0L, 0);
8548
static DRIZZLE_SYSVAR_ULONG(thread_concurrency, srv_thread_concurrency,
8549
PLUGIN_VAR_RQCMDARG,
8550
"Helps in performance tuning in heavily concurrent environments. Sets the maximum number of threads allowed inside InnoDB. Value 0 will disable the thread throttling.",
8551
NULL, NULL, 0, 0, 1000, 0);
8553
static DRIZZLE_SYSVAR_ULONG(thread_sleep_delay, srv_thread_sleep_delay,
8554
PLUGIN_VAR_RQCMDARG,
8555
"Time of innodb thread sleeping before joining InnoDB queue (usec). Value 0 disable a sleep",
8556
NULL, NULL, 10000L, 0L, ~0L, 0);
8558
static DRIZZLE_SYSVAR_STR(data_file_path, innobase_data_file_path,
8559
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
8560
"Path to individual files and their sizes.",
8563
static DRIZZLE_SYSVAR_STR(version, innodb_version_str,
8564
PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_READONLY,
8565
"InnoDB version", NULL, NULL, INNODB_VERSION_STR);
8567
static DRIZZLE_SYSVAR_BOOL(use_sys_malloc, srv_use_sys_malloc,
8568
PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
8569
"Use OS memory allocator instead of InnoDB's internal memory allocator",
8572
static DRIZZLE_SYSVAR_STR(change_buffering, innobase_change_buffering,
8573
PLUGIN_VAR_RQCMDARG,
8574
"Buffer changes to reduce random access: "
8575
"OFF, ON, inserting, deleting, changing, or purging.",
8576
innodb_change_buffering_validate,
8577
innodb_change_buffering_update, NULL);
8579
static DRIZZLE_SYSVAR_ULONG(read_ahead_threshold, srv_read_ahead_threshold,
8580
PLUGIN_VAR_RQCMDARG,
8581
"Number of pages that must be accessed sequentially for InnoDB to"
8582
"trigger a readahead.",
8583
NULL, NULL, 56, 0, 64, 0);
8585
static drizzle_sys_var* innobase_system_variables[]= {
8586
DRIZZLE_SYSVAR(additional_mem_pool_size),
8587
DRIZZLE_SYSVAR(autoextend_increment),
8588
DRIZZLE_SYSVAR(buffer_pool_size),
8589
DRIZZLE_SYSVAR(checksums),
8590
DRIZZLE_SYSVAR(commit_concurrency),
8591
DRIZZLE_SYSVAR(concurrency_tickets),
8592
DRIZZLE_SYSVAR(data_file_path),
8593
DRIZZLE_SYSVAR(data_home_dir),
8594
DRIZZLE_SYSVAR(doublewrite),
8595
DRIZZLE_SYSVAR(fast_shutdown),
8596
DRIZZLE_SYSVAR(file_io_threads),
8597
DRIZZLE_SYSVAR(read_io_threads),
8598
DRIZZLE_SYSVAR(write_io_threads),
8599
DRIZZLE_SYSVAR(file_per_table),
8600
DRIZZLE_SYSVAR(file_format),
8601
DRIZZLE_SYSVAR(file_format_check),
8602
DRIZZLE_SYSVAR(flush_log_at_trx_commit),
8603
DRIZZLE_SYSVAR(flush_method),
8604
DRIZZLE_SYSVAR(force_recovery),
8605
DRIZZLE_SYSVAR(lock_wait_timeout),
8606
#ifdef UNIV_LOG_ARCHIVE
8607
DRIZZLE_SYSVAR(log_arch_dir),
8608
DRIZZLE_SYSVAR(log_archive),
8609
#endif /* UNIV_LOG_ARCHIVE */
8610
DRIZZLE_SYSVAR(log_buffer_size),
8611
DRIZZLE_SYSVAR(log_file_size),
8612
DRIZZLE_SYSVAR(log_files_in_group),
8613
DRIZZLE_SYSVAR(log_group_home_dir),
8614
DRIZZLE_SYSVAR(max_dirty_pages_pct),
8615
DRIZZLE_SYSVAR(max_purge_lag),
8616
DRIZZLE_SYSVAR(adaptive_flushing),
8617
DRIZZLE_SYSVAR(mirrored_log_groups),
8618
DRIZZLE_SYSVAR(open_files),
8619
DRIZZLE_SYSVAR(stats_on_metadata),
8620
DRIZZLE_SYSVAR(stats_sample_pages),
8621
DRIZZLE_SYSVAR(adaptive_hash_index),
8622
DRIZZLE_SYSVAR(replication_delay),
8623
DRIZZLE_SYSVAR(status_file),
8624
DRIZZLE_SYSVAR(strict_mode),
8625
DRIZZLE_SYSVAR(support_xa),
8626
DRIZZLE_SYSVAR(sync_spin_loops),
8627
DRIZZLE_SYSVAR(spin_wait_delay),
8628
DRIZZLE_SYSVAR(table_locks),
8629
DRIZZLE_SYSVAR(thread_concurrency),
8630
DRIZZLE_SYSVAR(thread_sleep_delay),
8631
DRIZZLE_SYSVAR(version),
8632
DRIZZLE_SYSVAR(use_sys_malloc),
8633
DRIZZLE_SYSVAR(change_buffering),
8634
DRIZZLE_SYSVAR(read_ahead_threshold),
8635
DRIZZLE_SYSVAR(io_capacity),
9367
8639
DRIZZLE_DECLARE_PLUGIN