170
162
static plugin::TableFunction* innodb_trx_tool= NULL;
171
163
static plugin::TableFunction* innodb_locks_tool= NULL;
172
164
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;
166
static long innobase_mirrored_log_groups, innobase_log_files_in_group,
167
innobase_log_buffer_size,
168
innobase_force_recovery, innobase_open_files;
169
static long innobase_additional_mem_pool_size= 8*1024*1024L;
170
static ulong innobase_commit_concurrency = 0;
171
static ulong innobase_read_io_threads;
172
static ulong innobase_write_io_threads;
175
* @TODO: Turn this into size_t as soon as we have a Variable<size_t>
177
static int64_t innobase_buffer_pool_size= 128*1024*1024;
178
static int64_t innobase_log_file_size;
227
180
/** Percentage of the buffer pool to reserve for 'old' blocks.
228
181
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;
182
static uint innobase_old_blocks_pct;
239
184
/* The default values for the following char* start-up parameters
240
185
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;
187
static char* innobase_data_home_dir = NULL;
188
static char* innobase_data_file_path = NULL;
189
static char* innobase_log_group_home_dir = NULL;
190
static char* innobase_file_format_name = NULL;
191
static char* innobase_change_buffering = NULL;
193
/* Note: This variable can be set to on/off and any of the supported
194
file formats in the configuration file, but can only be set to any
195
of the supported file formats during runtime. */
196
static char* innobase_file_format_check = NULL;
198
static char* innobase_file_flush_method = NULL;
253
200
/* 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;
203
static ulong innobase_fast_shutdown = 1;
204
#ifdef UNIV_LOG_ARCHIVE
205
static my_bool innobase_log_archive = FALSE;
206
static char* innobase_log_arch_dir = NULL;
207
#endif /* UNIV_LOG_ARCHIVE */
272
208
static my_bool innobase_use_doublewrite = TRUE;
273
209
static my_bool innobase_use_checksums = TRUE;
274
210
static my_bool innobase_rollback_on_timeout = FALSE;
275
211
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;
282
213
static char* internal_innobase_data_file_path = NULL;
215
static char* innodb_version_str = (char*) INNODB_VERSION_STR;
284
217
/* The following counter is used to convey information to InnoDB
285
218
about server activity: in selects it is not sensible to call
286
219
srv_active_wake_master_thread after each fetch or search, we only do
1839
1790
value= value - (value % align_val);
1842
static void auto_extend_update(Session *, sql_var_t)
1844
srv_auto_extend_increment= innodb_auto_extend_increment.get();
1847
static void io_capacity_update(Session *, sql_var_t)
1849
srv_io_capacity= innodb_io_capacity.get();
1852
static void purge_batch_update(Session *, sql_var_t)
1854
srv_purge_batch_size= innodb_purge_batch_size.get();
1857
static void purge_threads_update(Session *, sql_var_t)
1859
srv_n_purge_threads= innodb_n_purge_threads.get();
1862
static void innodb_adaptive_hash_index_update(Session *, sql_var_t)
1864
if (btr_search_enabled)
1866
btr_search_enable();
1868
btr_search_disable();
1872
static void innodb_old_blocks_pct_update(Session *, sql_var_t)
1874
innobase_old_blocks_pct= buf_LRU_old_ratio_update(innobase_old_blocks_pct.get(), TRUE);
1877
static void innodb_thread_concurrency_update(Session *, sql_var_t)
1879
srv_thread_concurrency= innobase_thread_concurrency.get();
1882
static void innodb_sync_spin_loops_update(Session *, sql_var_t)
1884
srv_n_spin_wait_rounds= innodb_sync_spin_loops.get();
1887
static void innodb_spin_wait_delay_update(Session *, sql_var_t)
1889
srv_spin_wait_delay= innodb_spin_wait_delay.get();
1892
static void innodb_thread_sleep_delay_update(Session *, sql_var_t)
1894
srv_thread_sleep_delay= innodb_thread_sleep_delay.get();
1897
static void innodb_read_ahead_threshold_update(Session *, sql_var_t)
1899
srv_read_ahead_threshold= innodb_read_ahead_threshold.get();
1903
static int innodb_commit_concurrency_validate(Session *session, set_var *var)
1905
uint32_t new_value= var->save_result.uint32_t_value;
1907
if ((innobase_commit_concurrency.get() == 0 && new_value != 0) ||
1908
(innobase_commit_concurrency.get() != 0 && new_value == 0))
1910
push_warning_printf(session,
1911
DRIZZLE_ERROR::WARN_LEVEL_WARN,
1913
_("Once InnoDB is running, innodb_commit_concurrency "
1914
"must not change between zero and nonzero."));
1920
/*************************************************************//**
1921
Check if it is a valid file format. This function is registered as
1922
a callback with MySQL.
1923
@return 0 for valid file format */
1926
innodb_file_format_name_validate(
1927
/*=============================*/
1928
Session* , /*!< in: thread handle */
1931
const char *file_format_input = var->value->str_value.ptr();
1932
if (file_format_input == NULL)
1935
if (file_format_input != NULL) {
1938
format_id = innobase_file_format_name_lookup(
1941
if (format_id <= DICT_TF_FORMAT_MAX) {
1942
innobase_file_format_name =
1943
trx_sys_file_format_id_to_name(format_id);
1952
/*************************************************************//**
1953
Check if it is a valid value of innodb_change_buffering. This function is
1954
registered as a callback with MySQL.
1955
@return 0 for valid innodb_change_buffering */
1958
innodb_change_buffering_validate(
1959
/*=============================*/
1960
Session* , /*!< in: thread handle */
1963
const char *change_buffering_input = var->value->str_value.ptr();
1965
if (change_buffering_input == NULL)
1971
use < UT_ARR_SIZE(innobase_change_buffering_values);
1973
if (!innobase_strcasecmp(change_buffering_input,
1974
innobase_change_buffering_values[use]))
1976
ibuf_use= static_cast<ibuf_use_t>(use);
1985
/*************************************************************//**
1986
Check if valid argument to innodb_file_format_max. This function
1987
is registered as a callback with MySQL.
1988
@return 0 for valid file format */
1991
innodb_file_format_max_validate(
1992
/*==============================*/
1993
Session* session, /*!< in: thread handle */
1996
const char *file_format_input = var->value->str_value.ptr();
1997
if (file_format_input == NULL)
2000
if (file_format_input != NULL) {
2001
int format_id = innobase_file_format_validate_and_set(file_format_input);
2003
if (format_id > DICT_TF_FORMAT_MAX) {
2004
/* DEFAULT is "on", which is invalid at runtime. */
2008
if (format_id >= 0) {
2009
innobase_file_format_max=
2010
trx_sys_file_format_id_to_name((uint)format_id);
2012
/* Update the max format id in the system tablespace. */
2013
char name_buff[100];
2014
strcpy(name_buff, innobase_file_format_max.c_str());
2015
if (trx_sys_file_format_max_set(format_id, (const char **)&name_buff))
2017
errmsg_printf(ERRMSG_LVL_WARN,
2018
" [Info] InnoDB: the file format in the system "
2019
"tablespace is now set to %s.\n", name_buff);
2020
innobase_file_format_max= name_buff;
2025
push_warning_printf(session,
2026
DRIZZLE_ERROR::WARN_LEVEL_WARN,
2028
"InnoDB: invalid innodb_file_format_max "
2029
"value; can be any format up to %s "
2030
"or equivalent id of %d",
2031
trx_sys_file_format_id_to_name(DICT_TF_FORMAT_MAX),
2032
DICT_TF_FORMAT_MAX);
2040
1793
/*********************************************************************//**
2041
1794
Opens an InnoDB database.
2042
1795
@return 0 on success, error code on failure */
2052
1805
InnobaseEngine *actuall_engine_ptr;
2053
1806
const module::option_map &vm= context.getOptions();
2055
srv_auto_extend_increment= innodb_auto_extend_increment.get();
2056
srv_io_capacity= innodb_io_capacity.get();
2057
srv_purge_batch_size= innodb_purge_batch_size.get();
2058
srv_n_purge_threads= innodb_n_purge_threads.get();
2059
srv_flush_log_at_trx_commit= innodb_flush_log_at_trx_commit.get();
2060
srv_max_buf_pool_modified_pct= innodb_max_dirty_pages_pct.get();
2061
srv_max_purge_lag= innodb_max_purge_lag.get();
2062
srv_stats_sample_pages= innodb_stats_sample_pages.get();
2063
srv_n_free_tickets_to_enter= innodb_concurrency_tickets.get();
2064
srv_replication_delay= innodb_replication_delay.get();
2065
srv_thread_concurrency= innobase_thread_concurrency.get();
2066
srv_n_spin_wait_rounds= innodb_sync_spin_loops.get();
2067
srv_spin_wait_delay= innodb_spin_wait_delay.get();
2068
srv_thread_sleep_delay= innodb_thread_sleep_delay.get();
2069
srv_read_ahead_threshold= innodb_read_ahead_threshold.get();
2071
1808
/* Inverted Booleans */
2073
1810
innobase_use_checksums= (vm.count("disable-checksums")) ? false : true;
2074
1811
innobase_use_doublewrite= (vm.count("disable-doublewrite")) ? false : true;
2075
1812
srv_adaptive_flushing= (vm.count("disable-adaptive-flushing")) ? false : true;
2076
1813
srv_use_sys_malloc= (vm.count("use-internal-malloc")) ? false : true;
2077
support_xa= (vm.count("disable-xa")) ? false : true;
2078
btr_search_enabled= (vm.count("disable-adaptive-hash-index")) ? false : true;
2081
/* Hafta do this here because we need to late-bind the default value */
1814
(SessionVAR(NULL,support_xa))= (vm.count("disable-xa")) ? false : true;
1815
(SessionVAR(NULL,table_locks))= (vm.count("disable-table-locks")) ? false : true;
1817
if (vm.count("io-capacity"))
1819
if (srv_io_capacity < 100)
1821
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for io-capacity\n"));
2082
1826
if (vm.count("data-home-dir"))
2084
innobase_data_home_dir= vm["data-home-dir"].as<string>();
2088
innobase_data_home_dir= getDataHome().file_string();
1828
innobase_data_home_dir= strdup(vm["data-home-dir"].as<string>().c_str());
1832
innobase_data_home_dir= strdup(getDataHome().file_string().c_str());
1835
if (vm.count("fast-shutdown"))
1837
if (innobase_fast_shutdown > 2)
1839
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for fast-shutdown\n"));
1844
if (vm.count("file-format-check"))
1846
innobase_file_format_check= const_cast<char *>(vm["file-format-check"].as<string>().c_str());
1849
if (vm.count("flush-log-at-trx-commit"))
1851
if (srv_flush_log_at_trx_commit > 2)
1853
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for flush-log-at-trx-commit\n"));
1858
if (vm.count("flush-method"))
1860
innobase_file_flush_method= const_cast<char *>(vm["flush-method"].as<string>().c_str());
1864
innobase_file_flush_method= NULL;
1867
#ifdef UNIV_LOG_ARCHIVE
1868
if (vm.count("log-arch-dir"))
1870
innobase_log_arch_dir= const_cast<char *>(vm["log-arch-dir"].as<string>().c_str());
1875
innobase_log_arch_dir= NULL;
1877
#endif /* UNIV_LOG_ARCHIVE */
1879
if (vm.count("max-dirty-pages-pct"))
1881
if (srv_max_buf_pool_modified_pct > 99)
1883
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for max-dirty-pages-pct\n"));
1888
if (vm.count("stats-sample-pages"))
1890
if (srv_stats_sample_pages < 8)
1892
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for stats-sample-pages\n"));
1897
if (vm.count("additional-mem-pool-size"))
1899
align_value(innobase_additional_mem_pool_size);
1901
if (innobase_additional_mem_pool_size < 512*1024L)
1903
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for additional-mem-pool-size\n"));
1909
if (vm.count("autoextend-increment"))
1911
if (srv_auto_extend_increment < 1 || srv_auto_extend_increment > 1000)
1913
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for autoextend-increment\n"));
1918
if (vm.count("buffer-pool-size"))
1920
align_value(innobase_buffer_pool_size, 1024*1024);
1921
if (innobase_buffer_pool_size < 5*1024*1024)
1923
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for buffer-pool-size\n"));
1929
if (vm.count("commit-concurrency"))
1931
if (srv_replication_delay > 1000)
1933
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for commit-concurrency\n"));
1938
if (vm.count("concurrency-tickets"))
1940
if (srv_n_free_tickets_to_enter < 1)
1942
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for concurrency-tickets\n"));
1947
if (vm.count("read-io-threads"))
1949
if (innobase_read_io_threads < 1 || innobase_read_io_threads > 64)
1951
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for read-io-threads\n"));
1956
if (vm.count("write-io-threads"))
1958
if (innobase_write_io_threads < 1 || innobase_write_io_threads > 64)
1960
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for write-io-threads\n"));
1965
if (vm.count("force-recovery"))
1967
if (innobase_force_recovery > 6)
1969
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for force-recovery\n"));
1974
if (vm.count("log-buffer-size"))
1976
align_value(innobase_log_buffer_size);
1977
if (innobase_log_buffer_size < 256*1024L)
1979
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for log-file-size\n"));
1984
if (vm.count("log-file-size"))
1986
align_value(innobase_log_file_size, 1024*1024);
1987
if (innobase_log_file_size < 1*1024*1024L)
1989
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for log-file-size\n"));
1994
if (vm.count("log-files-in-group"))
1996
if (innobase_log_files_in_group < 2 || innobase_log_files_in_group > 100)
1998
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for log-files-in-group\n"));
2003
if (vm.count("mirrored-log-groups"))
2005
if (innobase_mirrored_log_groups < 1 || innobase_mirrored_log_groups > 10)
2007
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for mirrored-log-groups\n"));
2012
if (vm.count("open-files"))
2014
if (innobase_open_files < 10)
2016
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for open-files\n"));
2021
if (vm.count("thread-concurrency"))
2023
if (srv_thread_concurrency > 1000)
2025
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for thread-concurrency\n"));
2092
2030
if (vm.count("data-file-path"))
2094
innobase_data_file_path= vm["data-file-path"].as<string>();
2032
innobase_data_file_path= const_cast<char *>(vm["data-file-path"].as<string>().c_str());
2036
innobase_data_file_path= NULL;
2039
if (vm.count("version"))
2041
innodb_version_str= const_cast<char *>(vm["version"].as<string>().c_str());
2044
if (vm.count("read-ahead-threshold"))
2046
if (srv_read_ahead_threshold > 64)
2048
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for read-ahead-threshold\n"));
2053
if (vm.count("strict-mode"))
2055
(SessionVAR(NULL,strict_mode))= vm["strict-mode"].as<bool>();
2058
if (vm.count("lock-wait-timeout"))
2060
if (vm["lock-wait-timeout"].as<unsigned long>() < 1 || vm["lock-wait-timeout"].as<unsigned long>() > 1024*1024*1024)
2062
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for lock-wait-timeout\n"));
2066
(SessionVAR(NULL,lock_wait_timeout))= vm["lock-wait-timeout"].as<unsigned long>();
2098
2069
innodb_engine_ptr= actuall_engine_ptr= new InnobaseEngine(innobase_engine_name);
2356
2354
innodb_lock_waits_tool= new(std::nothrow)InnodbTrxTool("INNODB_LOCK_WAITS");
2357
2355
context.add(innodb_lock_waits_tool);
2359
innodb_sys_tables_tool= new(std::nothrow)InnodbSysTablesTool();
2360
context.add(innodb_sys_tables_tool);
2362
innodb_sys_tablestats_tool= new(std::nothrow)InnodbSysTableStatsTool();
2363
context.add(innodb_sys_tablestats_tool);
2365
innodb_sys_indexes_tool= new(std::nothrow)InnodbSysIndexesTool();
2366
context.add(innodb_sys_indexes_tool);
2368
innodb_sys_columns_tool= new(std::nothrow)InnodbSysColumnsTool();
2369
context.add(innodb_sys_columns_tool);
2371
innodb_sys_fields_tool= new(std::nothrow)InnodbSysFieldsTool();
2372
context.add(innodb_sys_fields_tool);
2374
innodb_sys_foreign_tool= new(std::nothrow)InnodbSysForeignTool();
2375
context.add(innodb_sys_foreign_tool);
2377
innodb_sys_foreign_cols_tool= new(std::nothrow)InnodbSysForeignColsTool();
2378
context.add(innodb_sys_foreign_cols_tool);
2380
2357
context.add(new(std::nothrow)InnodbInternalTables());
2381
context.add(new(std::nothrow)InnodbReplicationTable());
2383
if (innobase_use_replication_log)
2385
replication_logger= new(std::nothrow)ReplicationLog();
2386
context.add(replication_logger);
2387
ReplicationLog::setup(replication_logger);
2390
context.registerVariable(new sys_var_const_string_val("data-home-dir", innobase_data_home_dir));
2391
context.registerVariable(new sys_var_const_string_val("flush-method",
2392
vm.count("flush-method") ? vm["flush-method"].as<string>() : ""));
2393
context.registerVariable(new sys_var_const_string_val("log-group-home-dir", innobase_log_group_home_dir));
2394
context.registerVariable(new sys_var_const_string_val("data-file-path", innobase_data_file_path));
2395
context.registerVariable(new sys_var_const_string_val("version", vm["version"].as<string>()));
2398
context.registerVariable(new sys_var_bool_ptr_readonly("replication_log", &innobase_use_replication_log));
2399
context.registerVariable(new sys_var_bool_ptr_readonly("checksums", &innobase_use_checksums));
2400
context.registerVariable(new sys_var_bool_ptr_readonly("doublewrite", &innobase_use_doublewrite));
2401
context.registerVariable(new sys_var_bool_ptr("file-per-table", &srv_file_per_table));
2402
context.registerVariable(new sys_var_bool_ptr_readonly("file-format-check", &innobase_file_format_check));
2403
context.registerVariable(new sys_var_bool_ptr("adaptive-flushing", &srv_adaptive_flushing));
2404
context.registerVariable(new sys_var_bool_ptr("status-file", &innobase_create_status_file));
2405
context.registerVariable(new sys_var_bool_ptr_readonly("use-sys-malloc", &srv_use_sys_malloc));
2406
context.registerVariable(new sys_var_bool_ptr_readonly("use-native-aio", &srv_use_native_aio));
2408
context.registerVariable(new sys_var_bool_ptr("support-xa", &support_xa));
2409
context.registerVariable(new sys_var_bool_ptr("strict_mode", &strict_mode));
2410
context.registerVariable(new sys_var_constrained_value<uint32_t>("lock_wait_timeout", lock_wait_timeout));
2412
context.registerVariable(new sys_var_constrained_value_readonly<size_t>("additional_mem_pool_size",innobase_additional_mem_pool_size));
2413
context.registerVariable(new sys_var_constrained_value<uint32_t>("autoextend_increment",
2414
innodb_auto_extend_increment,
2415
auto_extend_update));
2416
context.registerVariable(new sys_var_constrained_value<uint32_t>("io_capacity",
2418
io_capacity_update));
2419
context.registerVariable(new sys_var_constrained_value<uint32_t>("purge_batch_size",
2420
innodb_purge_batch_size,
2421
purge_batch_update));
2422
context.registerVariable(new sys_var_constrained_value<uint32_t>("purge_threads",
2423
innodb_n_purge_threads,
2424
purge_threads_update));
2425
context.registerVariable(new sys_var_constrained_value<uint16_t>("fast_shutdown", innobase_fast_shutdown));
2426
context.registerVariable(new sys_var_std_string("file_format",
2427
innobase_file_format_name,
2428
innodb_file_format_name_validate));
2429
context.registerVariable(new sys_var_std_string("change_buffering",
2430
innobase_change_buffering,
2431
innodb_change_buffering_validate));
2432
context.registerVariable(new sys_var_std_string("file_format_max",
2433
innobase_file_format_max,
2434
innodb_file_format_max_validate));
2435
context.registerVariable(new sys_var_constrained_value_readonly<size_t>("buffer_pool_size", innobase_buffer_pool_size));
2436
context.registerVariable(new sys_var_constrained_value_readonly<int64_t>("log_file_size", innobase_log_file_size));
2437
context.registerVariable(new sys_var_constrained_value_readonly<uint16_t>("flush_log_at_trx_commit",
2438
innodb_flush_log_at_trx_commit));
2439
context.registerVariable(new sys_var_constrained_value_readonly<unsigned int>("max_dirty_pages_pct",
2440
innodb_max_dirty_pages_pct));
2441
context.registerVariable(new sys_var_constrained_value_readonly<uint64_t>("max_purge_lag", innodb_max_purge_lag));
2442
context.registerVariable(new sys_var_constrained_value_readonly<uint64_t>("stats_sample_pages", innodb_stats_sample_pages));
2443
context.registerVariable(new sys_var_bool_ptr("adaptive_hash_index", &btr_search_enabled, innodb_adaptive_hash_index_update));
2445
context.registerVariable(new sys_var_constrained_value<uint32_t>("commit_concurrency",
2446
innobase_commit_concurrency,
2447
innodb_commit_concurrency_validate));
2448
context.registerVariable(new sys_var_constrained_value<uint32_t>("concurrency_tickets",
2449
innodb_concurrency_tickets));
2450
context.registerVariable(new sys_var_constrained_value_readonly<uint32_t>("read_io_threads", innobase_read_io_threads));
2451
context.registerVariable(new sys_var_constrained_value_readonly<uint32_t>("write_io_threads", innobase_write_io_threads));
2452
context.registerVariable(new sys_var_constrained_value_readonly<uint64_t>("replication_delay", innodb_replication_delay));
2453
context.registerVariable(new sys_var_constrained_value_readonly<uint32_t>("force_recovery", innobase_force_recovery));
2454
context.registerVariable(new sys_var_constrained_value_readonly<size_t>("log_buffer_size", innobase_log_buffer_size));
2455
context.registerVariable(new sys_var_constrained_value_readonly<uint32_t>("log_files_in_group", innobase_log_files_in_group));
2456
context.registerVariable(new sys_var_constrained_value_readonly<uint32_t>("mirrored_log_groups", innobase_mirrored_log_groups));
2457
context.registerVariable(new sys_var_constrained_value_readonly<uint32_t>("open_files", innobase_open_files));
2458
context.registerVariable(new sys_var_constrained_value<uint32_t>("old_blocks_pct",
2459
innobase_old_blocks_pct,
2460
innodb_old_blocks_pct_update));
2461
context.registerVariable(new sys_var_uint32_t_ptr("old_blocks_time", &buf_LRU_old_threshold_ms));
2462
context.registerVariable(new sys_var_constrained_value<uint32_t>("sync_spin_loops", innodb_sync_spin_loops, innodb_sync_spin_loops_update));
2463
context.registerVariable(new sys_var_constrained_value<uint32_t>("spin_wait_delay", innodb_spin_wait_delay, innodb_spin_wait_delay_update));
2464
context.registerVariable(new sys_var_constrained_value<uint32_t>("thread_sleep_delay", innodb_thread_sleep_delay, innodb_thread_sleep_delay_update));
2465
context.registerVariable(new sys_var_constrained_value<uint32_t>("thread_concurrency",
2466
innobase_thread_concurrency,
2467
innodb_thread_concurrency_update));
2468
context.registerVariable(new sys_var_constrained_value<uint32_t>("read_ahead_threshold",
2469
innodb_read_ahead_threshold,
2470
innodb_read_ahead_threshold_update));
2471
2359
/* Get the current high water mark format. */
2472
innobase_file_format_max = trx_sys_file_format_max_get();
2473
btr_search_fully_disabled = (!btr_search_enabled);
2360
innobase_file_format_check = (char*) trx_sys_file_format_max_get();
9185
9003
/************************************************************//**
9004
Validate the file format check value, is it one of "on" or "off",
9005
as a side effect it sets the srv_check_file_format_at_startup variable.
9006
@return true if config value one of "on" or "off" */
9009
innobase_file_format_check_on_off(
9010
/*==============================*/
9011
const char* format_check) /*!< in: parameter value */
9015
if (!innobase_strcasecmp(format_check, "off")) {
9017
/* Set the value to disable checking. */
9018
srv_check_file_format_at_startup = DICT_TF_FORMAT_MAX + 1;
9020
} else if (!innobase_strcasecmp(format_check, "on")) {
9022
/* Set the value to the lowest supported format. */
9023
srv_check_file_format_at_startup = DICT_TF_FORMAT_51;
9031
/************************************************************//**
9186
9032
Validate the file format check config parameters, as a side effect it
9187
sets the srv_max_file_format_at_startup variable.
9033
sets the srv_check_file_format_at_startup variable.
9188
9034
@return the format_id if valid config value, otherwise, return -1 */
9191
9037
innobase_file_format_validate_and_set(
9192
9038
/*================================*/
9193
const char* format_max) /*!< in: parameter value */
9039
const char* format_check) /*!< in: parameter value */
9195
9041
uint format_id;
9197
format_id = innobase_file_format_name_lookup(format_max);
9043
format_id = innobase_file_format_name_lookup(format_check);
9199
9045
if (format_id < DICT_TF_FORMAT_MAX + 1) {
9200
srv_max_file_format_at_startup = format_id;
9046
srv_check_file_format_at_startup = format_id;
9201
9047
return((int) format_id);
9053
/*************************************************************//**
9054
Check if it is a valid file format. This function is registered as
9055
a callback with MySQL.
9056
@return 0 for valid file format */
9059
innodb_file_format_name_validate(
9060
/*=============================*/
9061
Session* , /*!< in: thread handle */
9062
drizzle_sys_var* , /*!< in: pointer to system
9064
void* save, /*!< out: immediate result
9065
for update function */
9066
drizzle_value* value) /*!< in: incoming string */
9068
const char* file_format_input;
9069
char buff[STRING_BUFFER_USUAL_SIZE];
9070
int len = sizeof(buff);
9073
ut_a(value != NULL);
9075
file_format_input = value->val_str(value, buff, &len);
9077
if (file_format_input != NULL) {
9080
format_id = innobase_file_format_name_lookup(
9083
if (format_id <= DICT_TF_FORMAT_MAX) {
9084
/* Save a pointer to the name in the
9085
'file_format_name_map' constant array. */
9086
*static_cast<const char**>(save) =
9087
trx_sys_file_format_id_to_name(format_id);
9093
*static_cast<const char**>(save) = NULL;
9097
/****************************************************************//**
9098
Update the system variable innodb_file_format using the "saved"
9099
value. This function is registered as a callback with MySQL. */
9102
innodb_file_format_name_update(
9103
/*===========================*/
9104
Session* , /*!< in: thread handle */
9105
drizzle_sys_var* , /*!< in: pointer to
9107
void* var_ptr, /*!< out: where the
9108
formal string goes */
9109
const void* save) /*!< in: immediate result
9110
from check function */
9112
const char* format_name;
9114
ut_a(var_ptr != NULL);
9117
format_name = *static_cast<const char*const*>(save);
9122
format_id = innobase_file_format_name_lookup(format_name);
9124
if (format_id <= DICT_TF_FORMAT_MAX) {
9125
srv_file_format = format_id;
9129
*static_cast<const char**>(var_ptr)
9130
= trx_sys_file_format_id_to_name(srv_file_format);
9133
/*************************************************************//**
9134
Check if valid argument to innodb_file_format_check. This
9135
function is registered as a callback with MySQL.
9136
@return 0 for valid file format */
9139
innodb_file_format_check_validate(
9140
/*==============================*/
9141
Session* session, /*!< in: thread handle */
9142
drizzle_sys_var* , /*!< in: pointer to system
9144
void* save, /*!< out: immediate result
9145
for update function */
9146
drizzle_value* value) /*!< in: incoming string */
9148
const char* file_format_input;
9149
char buff[STRING_BUFFER_USUAL_SIZE];
9150
int len = sizeof(buff);
9154
ut_a(value != NULL);
9156
file_format_input = value->val_str(value, buff, &len);
9158
if (file_format_input != NULL) {
9160
/* Check if user set on/off, we want to print a suitable
9161
message if they did so. */
9163
if (innobase_file_format_check_on_off(file_format_input)) {
9164
push_warning_printf(session,
9165
DRIZZLE_ERROR::WARN_LEVEL_WARN,
9167
"InnoDB: invalid innodb_file_format_check "
9168
"value; on/off can only be set at startup or "
9169
"in the configuration file");
9171
format_id = innobase_file_format_validate_and_set(file_format_input);
9172
if (format_id >= 0) {
9173
/* Save a pointer to the name in the
9174
'file_format_name_map' constant array. */
9175
*static_cast<const char**>(save) =
9176
trx_sys_file_format_id_to_name(
9182
push_warning_printf(session,
9183
DRIZZLE_ERROR::WARN_LEVEL_WARN,
9185
"InnoDB: invalid innodb_file_format_check "
9186
"value; can be any format up to %s "
9187
"or its equivalent numeric id",
9188
trx_sys_file_format_id_to_name(DICT_TF_FORMAT_MAX));
9193
*static_cast<const char**>(save) = NULL;
9197
/****************************************************************//**
9198
Update the system variable innodb_file_format_check using the "saved"
9199
value. This function is registered as a callback with MySQL. */
9202
innodb_file_format_check_update(
9203
/*============================*/
9204
Session* session, /*!< in: thread handle */
9205
drizzle_sys_var* , /*!< in: pointer to
9207
void* var_ptr, /*!< out: where the
9208
formal string goes */
9209
const void* save) /*!< in: immediate result
9210
from check function */
9212
const char* format_name_in;
9213
const char** format_name_out;
9217
ut_a(var_ptr != NULL);
9219
format_name_in = *static_cast<const char*const*>(save);
9221
if (!format_name_in) {
9226
format_id = innobase_file_format_name_lookup(format_name_in);
9228
if (format_id > DICT_TF_FORMAT_MAX) {
9229
/* DEFAULT is "on", which is invalid at runtime. */
9230
push_warning_printf(session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
9232
"Ignoring SET innodb_file_format=%s",
9237
format_name_out = static_cast<const char**>(var_ptr);
9239
/* Update the max format id in the system tablespace. */
9240
if (trx_sys_file_format_max_set(format_id, format_name_out)) {
9241
ut_print_timestamp(stderr);
9243
" [Info] InnoDB: the file format in the system "
9244
"tablespace is now set to %s.\n", *format_name_out);
9248
/****************************************************************//**
9249
Update the system variable innodb_adaptive_hash_index using the "saved"
9250
value. This function is registered as a callback with MySQL. */
9253
innodb_adaptive_hash_index_update(
9254
/*==============================*/
9255
Session* , /*!< in: thread handle */
9256
drizzle_sys_var* , /*!< in: pointer to
9258
void* , /*!< out: where the
9259
formal string goes */
9260
const void* save) /*!< in: immediate result
9261
from check function */
9263
if (*(bool*) save) {
9264
btr_search_enable();
9266
btr_search_disable();
9270
/****************************************************************//**
9271
Update the system variable innodb_old_blocks_pct using the "saved"
9272
value. This function is registered as a callback with MySQL. */
9275
innodb_old_blocks_pct_update(
9276
/*=========================*/
9277
Session* , /*!< in: thread handle */
9278
drizzle_sys_var* , /*!< in: pointer to
9280
void* ,/*!< out: where the
9281
formal string goes */
9282
const void* save) /*!< in: immediate result
9283
from check function */
9285
innobase_old_blocks_pct = buf_LRU_old_ratio_update(
9286
*static_cast<const uint*>(save), TRUE);
9289
/*************************************************************//**
9290
Check if it is a valid value of innodb_change_buffering. This function is
9291
registered as a callback with MySQL.
9292
@return 0 for valid innodb_change_buffering */
9295
innodb_change_buffering_validate(
9296
/*=============================*/
9297
Session* , /*!< in: thread handle */
9298
drizzle_sys_var* , /*!< in: pointer to system
9300
void* save, /*!< out: immediate result
9301
for update function */
9302
drizzle_value* value) /*!< in: incoming string */
9304
const char* change_buffering_input;
9305
char buff[STRING_BUFFER_USUAL_SIZE];
9306
int len = sizeof(buff);
9309
ut_a(value != NULL);
9311
change_buffering_input = value->val_str(value, buff, &len);
9313
if (change_buffering_input != NULL) {
9316
for (use = 0; use < UT_ARR_SIZE(innobase_change_buffering_values);
9318
if (!innobase_strcasecmp(
9319
change_buffering_input,
9320
innobase_change_buffering_values[use])) {
9321
*(ibuf_use_t*) save = (ibuf_use_t) use;
9330
/****************************************************************//**
9331
Update the system variable innodb_change_buffering using the "saved"
9332
value. This function is registered as a callback with MySQL. */
9335
innodb_change_buffering_update(
9336
/*===========================*/
9337
Session* , /*!< in: thread handle */
9338
drizzle_sys_var* , /*!< in: pointer to
9340
void* var_ptr, /*!< out: where the
9341
formal string goes */
9342
const void* save) /*!< in: immediate result
9343
from check function */
9345
ut_a(var_ptr != NULL);
9347
ut_a((*(ibuf_use_t*) save) < IBUF_USE_COUNT);
9349
ibuf_use = *(const ibuf_use_t*) save;
9351
*(const char**) var_ptr = innobase_change_buffering_values[ibuf_use];
9354
/* plugin options */
9355
static DRIZZLE_SYSVAR_BOOL(checksums, innobase_use_checksums,
9356
PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
9357
"Enable InnoDB checksums validation (enabled by default). ",
9360
static DRIZZLE_SYSVAR_STR(data_home_dir, innobase_data_home_dir,
9361
PLUGIN_VAR_READONLY,
9362
"The common part for InnoDB table spaces.",
9365
static DRIZZLE_SYSVAR_BOOL(doublewrite, innobase_use_doublewrite,
9366
PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
9367
"Enable InnoDB doublewrite buffer (enabled by default). ",
9370
static DRIZZLE_SYSVAR_ULONG(io_capacity, srv_io_capacity,
9371
PLUGIN_VAR_RQCMDARG,
9372
"Number of IOPs the server can do. Tunes the background IO rate",
9373
NULL, NULL, 200, 100, ~0L, 0);
9375
static DRIZZLE_SYSVAR_ULONG(fast_shutdown, innobase_fast_shutdown,
9376
PLUGIN_VAR_OPCMDARG,
9377
"Speeds up the shutdown process of the InnoDB storage engine. Possible "
9378
"values are 0, 1 (faster)"
9379
" or 2 (fastest - crash-like)"
9381
NULL, NULL, 1, 0, 2, 0);
9383
static DRIZZLE_SYSVAR_BOOL(file_per_table, srv_file_per_table,
9384
PLUGIN_VAR_NOCMDARG,
9385
"Stores each InnoDB table to an .ibd file in the database dir.",
9388
static DRIZZLE_SYSVAR_STR(file_format, innobase_file_format_name,
9389
PLUGIN_VAR_RQCMDARG,
9390
"File format to use for new tables in .ibd files.",
9391
innodb_file_format_name_validate,
9392
innodb_file_format_name_update, "Antelope");
9394
/* If a new file format is introduced, the file format
9395
name needs to be updated accordingly. Please refer to
9396
file_format_name_map[] defined in trx0sys.c for the next
9397
file format name. */
9398
static DRIZZLE_SYSVAR_STR(file_format_check, innobase_file_format_check,
9399
PLUGIN_VAR_OPCMDARG,
9400
"The highest file format in the tablespace.",
9401
innodb_file_format_check_validate,
9402
innodb_file_format_check_update,
9405
static DRIZZLE_SYSVAR_ULONG(flush_log_at_trx_commit, srv_flush_log_at_trx_commit,
9406
PLUGIN_VAR_OPCMDARG,
9407
"Set to 0 (write and flush once per second),"
9408
" 1 (write and flush at each commit)"
9409
" or 2 (write at commit, flush once per second).",
9410
NULL, NULL, 1, 0, 2, 0);
9412
static DRIZZLE_SYSVAR_STR(flush_method, innobase_file_flush_method,
9413
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9414
"With which method to flush data.", NULL, NULL, NULL);
9416
#ifdef UNIV_LOG_ARCHIVE
9417
static DRIZZLE_SYSVAR_STR(log_arch_dir, innobase_log_arch_dir,
9418
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9419
"Where full logs should be archived.", NULL, NULL, NULL);
9421
static DRIZZLE_SYSVAR_BOOL(log_archive, innobase_log_archive,
9422
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
9423
"Set to 1 if you want to have logs archived.", NULL, NULL, FALSE);
9424
#endif /* UNIV_LOG_ARCHIVE */
9426
static DRIZZLE_SYSVAR_STR(log_group_home_dir, innobase_log_group_home_dir,
9427
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9428
"Path to InnoDB log files.", NULL, NULL, NULL);
9430
static DRIZZLE_SYSVAR_ULONG(max_dirty_pages_pct, srv_max_buf_pool_modified_pct,
9431
PLUGIN_VAR_RQCMDARG,
9432
"Percentage of dirty pages allowed in bufferpool.",
9433
NULL, NULL, 75, 0, 99, 0);
9435
static DRIZZLE_SYSVAR_BOOL(adaptive_flushing, srv_adaptive_flushing,
9436
PLUGIN_VAR_NOCMDARG,
9437
"Attempt flushing dirty pages to avoid IO bursts at checkpoints.",
9440
static DRIZZLE_SYSVAR_ULONG(max_purge_lag, srv_max_purge_lag,
9441
PLUGIN_VAR_RQCMDARG,
9442
"Desired maximum length of the purge queue (0 = no limit)",
9443
NULL, NULL, 0, 0, ~0L, 0);
9445
static DRIZZLE_SYSVAR_BOOL(status_file, innobase_create_status_file,
9446
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_NOSYSVAR,
9447
"Enable SHOW INNODB STATUS output in the innodb_status.<pid> file",
9450
static DRIZZLE_SYSVAR_ULONGLONG(stats_sample_pages, srv_stats_sample_pages,
9451
PLUGIN_VAR_RQCMDARG,
9452
"The number of index pages to sample when calculating statistics (default 8)",
9453
NULL, NULL, 8, 1, ~0ULL, 0);
9455
static DRIZZLE_SYSVAR_BOOL(adaptive_hash_index, btr_search_enabled,
9456
PLUGIN_VAR_OPCMDARG,
9457
"Enable InnoDB adaptive hash index (enabled by default).",
9458
NULL, innodb_adaptive_hash_index_update, TRUE);
9460
static DRIZZLE_SYSVAR_ULONG(replication_delay, srv_replication_delay,
9461
PLUGIN_VAR_RQCMDARG,
9462
"Replication thread delay (ms) on the slave server if "
9463
"innodb_thread_concurrency is reached (0 by default)",
9464
NULL, NULL, 0, 0, ~0UL, 0);
9466
static DRIZZLE_SYSVAR_LONG(additional_mem_pool_size, innobase_additional_mem_pool_size,
9467
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9468
"Size of a memory pool InnoDB uses to store data dictionary information and other internal data structures.",
9469
NULL, NULL, 8*1024*1024L, 512*1024L, LONG_MAX, 1024);
9471
static DRIZZLE_SYSVAR_UINT(autoextend_increment, srv_auto_extend_increment,
9472
PLUGIN_VAR_RQCMDARG,
9473
"Data file autoextend increment in megabytes",
9474
NULL, NULL, 8L, 1L, 1000L, 0);
9476
static DRIZZLE_SYSVAR_LONGLONG(buffer_pool_size, innobase_buffer_pool_size,
9477
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9478
"The size of the memory buffer InnoDB uses to cache data and indexes of its tables.",
9479
NULL, NULL, 128*1024*1024L, 5*1024*1024L, INT64_MAX, 1024*1024L);
9481
static DRIZZLE_SYSVAR_ULONG(commit_concurrency, innobase_commit_concurrency,
9482
PLUGIN_VAR_RQCMDARG,
9483
"Helps in performance tuning in heavily concurrent environments.",
9484
innobase_commit_concurrency_validate, NULL, 0, 0, 1000, 0);
9486
static DRIZZLE_SYSVAR_ULONG(concurrency_tickets, srv_n_free_tickets_to_enter,
9487
PLUGIN_VAR_RQCMDARG,
9488
"Number of times a thread is allowed to enter InnoDB within the same SQL query after it has once got the ticket",
9489
NULL, NULL, 500L, 1L, ~0L, 0);
9491
static DRIZZLE_SYSVAR_ULONG(read_io_threads, innobase_read_io_threads,
9492
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9493
"Number of background read I/O threads in InnoDB.",
9494
NULL, NULL, 4, 1, 64, 0);
9496
static DRIZZLE_SYSVAR_ULONG(write_io_threads, innobase_write_io_threads,
9497
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9498
"Number of background write I/O threads in InnoDB.",
9499
NULL, NULL, 4, 1, 64, 0);
9501
static DRIZZLE_SYSVAR_LONG(force_recovery, innobase_force_recovery,
9502
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9503
"Helps to save your data in case the disk image of the database becomes corrupt.",
9504
NULL, NULL, 0, 0, 6, 0);
9506
static DRIZZLE_SYSVAR_LONG(log_buffer_size, innobase_log_buffer_size,
9507
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9508
"The size of the buffer which InnoDB uses to write log to the log files on disk.",
9509
NULL, NULL, 8*1024*1024L, 256*1024L, LONG_MAX, 1024);
9511
static DRIZZLE_SYSVAR_LONGLONG(log_file_size, innobase_log_file_size,
9512
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9513
"Size of each log file in a log group.",
9514
NULL, NULL, 20*1024*1024L, 1*1024*1024L, INT64_MAX, 1024*1024L);
9516
static DRIZZLE_SYSVAR_LONG(log_files_in_group, innobase_log_files_in_group,
9517
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9518
"Number of log files in the log group. InnoDB writes to the files in a circular fashion. Value 3 is recommended here.",
9519
NULL, NULL, 2, 2, 100, 0);
9521
static DRIZZLE_SYSVAR_LONG(mirrored_log_groups, innobase_mirrored_log_groups,
9522
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9523
"Number of identical copies of log groups we keep for the database. Currently this should be set to 1.",
9524
NULL, NULL, 1, 1, 10, 0);
9526
static DRIZZLE_SYSVAR_UINT(old_blocks_pct, innobase_old_blocks_pct,
9527
PLUGIN_VAR_RQCMDARG,
9528
"Percentage of the buffer pool to reserve for 'old' blocks.",
9529
NULL, innodb_old_blocks_pct_update, 100 * 3 / 8, 5, 95, 0);
9531
static DRIZZLE_SYSVAR_UINT(old_blocks_time, buf_LRU_old_threshold_ms,
9532
PLUGIN_VAR_RQCMDARG,
9533
"Move blocks to the 'new' end of the buffer pool if the first access"
9534
" was at least this many milliseconds ago."
9535
" The timeout is disabled if 0 (the default).",
9536
NULL, NULL, 0, 0, UINT32_MAX, 0);
9538
static DRIZZLE_SYSVAR_LONG(open_files, innobase_open_files,
9539
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9540
"How many files at the maximum InnoDB keeps open at the same time.",
9541
NULL, NULL, 300L, 10L, LONG_MAX, 0);
9543
static DRIZZLE_SYSVAR_ULONG(sync_spin_loops, srv_n_spin_wait_rounds,
9544
PLUGIN_VAR_RQCMDARG,
9545
"Count of spin-loop rounds in InnoDB mutexes (30 by default)",
9546
NULL, NULL, 30L, 0L, ~0L, 0);
9548
static DRIZZLE_SYSVAR_ULONG(spin_wait_delay, srv_spin_wait_delay,
9549
PLUGIN_VAR_OPCMDARG,
9550
"Maximum delay between polling for a spin lock (6 by default)",
9551
NULL, NULL, 6L, 0L, ~0L, 0);
9553
static DRIZZLE_SYSVAR_ULONG(thread_concurrency, srv_thread_concurrency,
9554
PLUGIN_VAR_RQCMDARG,
9555
"Helps in performance tuning in heavily concurrent environments. Sets the maximum number of threads allowed inside InnoDB. Value 0 will disable the thread throttling.",
9556
NULL, NULL, 0, 0, 1000, 0);
9558
static DRIZZLE_SYSVAR_ULONG(thread_sleep_delay, srv_thread_sleep_delay,
9559
PLUGIN_VAR_RQCMDARG,
9560
"Time of innodb thread sleeping before joining InnoDB queue (usec). Value 0 disable a sleep",
9561
NULL, NULL, 10000L, 0L, ~0L, 0);
9563
static DRIZZLE_SYSVAR_STR(data_file_path, innobase_data_file_path,
9564
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
9565
"Path to individual files and their sizes.",
9568
static DRIZZLE_SYSVAR_STR(version, innodb_version_str,
9569
PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_READONLY,
9570
"InnoDB version", NULL, NULL, INNODB_VERSION_STR);
9572
static DRIZZLE_SYSVAR_BOOL(use_sys_malloc, srv_use_sys_malloc,
9573
PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
9574
"Use OS memory allocator instead of InnoDB's internal memory allocator",
9577
static DRIZZLE_SYSVAR_STR(change_buffering, innobase_change_buffering,
9578
PLUGIN_VAR_RQCMDARG,
9579
"Buffer changes to reduce random access: "
9580
"OFF, ON, none, inserts.",
9581
innodb_change_buffering_validate,
9582
innodb_change_buffering_update, NULL);
9584
static DRIZZLE_SYSVAR_ULONG(read_ahead_threshold, srv_read_ahead_threshold,
9585
PLUGIN_VAR_RQCMDARG,
9586
"Number of pages that must be accessed sequentially for InnoDB to "
9587
"trigger a readahead.",
9588
NULL, NULL, 56, 0, 64, 0);
9209
9590
static void init_options(drizzled::module::option_context &context)
9263
9642
context("disable-stats-on-metadata",
9264
9643
"Disable statistics gathering for metadata commands such as SHOW TABLE STATUS (on by default)");
9265
9644
context("stats-sample-pages",
9266
po::value<uint64_nonzero_constraint>(&innodb_stats_sample_pages)->default_value(8),
9645
po::value<uint64_t>(&srv_stats_sample_pages)->default_value(8),
9267
9646
"The number of index pages to sample when calculating statistics (default 8)");
9268
9647
context("disable-adaptive-hash-index",
9269
9648
"Enable InnoDB adaptive hash index (enabled by default)");
9270
9649
context("replication-delay",
9271
po::value<uint64_constraint>(&innodb_replication_delay)->default_value(0),
9650
po::value<unsigned long>(&srv_replication_delay)->default_value(0),
9272
9651
"Replication thread delay (ms) on the slave server if innodb_thread_concurrency is reached (0 by default)");
9273
9652
context("additional-mem-pool-size",
9274
po::value<additional_mem_pool_constraint>(&innobase_additional_mem_pool_size)->default_value(8*1024*1024L),
9653
po::value<long>(&innobase_additional_mem_pool_size)->default_value(8*1024*1024L),
9275
9654
"Size of a memory pool InnoDB uses to store data dictionary information and other internal data structures.");
9276
9655
context("autoextend-increment",
9277
po::value<autoextend_constraint>(&innodb_auto_extend_increment)->default_value(8L),
9656
po::value<uint32_t>(&srv_auto_extend_increment)->default_value(8L),
9278
9657
"Data file autoextend increment in megabytes");
9279
9658
context("buffer-pool-size",
9280
po::value<buffer_pool_constraint>(&innobase_buffer_pool_size)->default_value(128*1024*1024L),
9659
po::value<int64_t>(&innobase_buffer_pool_size)->default_value(128*1024*1024L),
9281
9660
"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
9661
context("commit-concurrency",
9287
po::value<concurrency_constraint>(&innobase_commit_concurrency)->default_value(0),
9662
po::value<unsigned long>(&innobase_commit_concurrency)->default_value(0),
9288
9663
"Helps in performance tuning in heavily concurrent environments.");
9289
9664
context("concurrency-tickets",
9290
po::value<uint32_nonzero_constraint>(&innodb_concurrency_tickets)->default_value(500L),
9665
po::value<unsigned long>(&srv_n_free_tickets_to_enter)->default_value(500L),
9291
9666
"Number of times a thread is allowed to enter InnoDB within the same SQL query after it has once got the ticket");
9292
9667
context("read-io-threads",
9293
po::value<io_threads_constraint>(&innobase_read_io_threads)->default_value(4),
9668
po::value<unsigned long>(&innobase_read_io_threads)->default_value(4),
9294
9669
"Number of background read I/O threads in InnoDB.");
9295
9670
context("write-io-threads",
9296
po::value<io_threads_constraint>(&innobase_write_io_threads)->default_value(4),
9671
po::value<unsigned long>(&innobase_write_io_threads)->default_value(4),
9297
9672
"Number of background write I/O threads in InnoDB.");
9298
9673
context("force-recovery",
9299
po::value<force_recovery_constraint>(&innobase_force_recovery)->default_value(0),
9674
po::value<long>(&innobase_force_recovery)->default_value(0),
9300
9675
"Helps to save your data in case the disk image of the database becomes corrupt.");
9301
9676
context("log-buffer-size",
9302
po::value<log_buffer_constraint>(&innobase_log_buffer_size)->default_value(8*1024*1024L),
9677
po::value<long>(&innobase_log_buffer_size)->default_value(8*1024*1024L),
9303
9678
"The size of the buffer which InnoDB uses to write log to the log files on disk.");
9304
9679
context("log-file-size",
9305
po::value<log_file_constraint>(&innobase_log_file_size)->default_value(20*1024*1024L),
9680
po::value<int64_t>(&innobase_log_file_size)->default_value(20*1024*1024L),
9306
9681
"The size of the buffer which InnoDB uses to write log to the log files on disk.");
9307
9682
context("log-files-in-group",
9308
po::value<log_files_in_group_constraint>(&innobase_log_files_in_group)->default_value(2),
9683
po::value<long>(&innobase_log_files_in_group)->default_value(2),
9309
9684
"Number of log files in the log group. InnoDB writes to the files in a circular fashion.");
9310
9685
context("mirrored-log-groups",
9311
po::value<mirrored_log_groups_constraint>(&innobase_mirrored_log_groups)->default_value(1),
9686
po::value<long>(&innobase_mirrored_log_groups)->default_value(1),
9312
9687
"Number of identical copies of log groups we keep for the database. Currently this should be set to 1.");
9313
9688
context("open-files",
9314
po::value<open_files_constraint>(&innobase_open_files)->default_value(300L),
9689
po::value<long>(&innobase_open_files)->default_value(300L),
9315
9690
"How many files at the maximum InnoDB keeps open at the same time.");
9316
9691
context("sync-spin-loops",
9317
po::value<uint32_constraint>(&innodb_sync_spin_loops)->default_value(30L),
9692
po::value<unsigned long>(&srv_n_spin_wait_rounds)->default_value(30L),
9318
9693
"Count of spin-loop rounds in InnoDB mutexes (30 by default)");
9319
9694
context("spin-wait-delay",
9320
po::value<uint32_constraint>(&innodb_spin_wait_delay)->default_value(6L),
9695
po::value<unsigned long>(&srv_spin_wait_delay)->default_value(6L),
9321
9696
"Maximum delay between polling for a spin lock (6 by default)");
9322
9697
context("thread-concurrency",
9323
po::value<concurrency_constraint>(&innobase_thread_concurrency)->default_value(0),
9698
po::value<unsigned long>(&srv_thread_concurrency)->default_value(0),
9324
9699
"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
9700
context("thread-sleep-delay",
9326
po::value<uint32_constraint>(&innodb_thread_sleep_delay)->default_value(10000L),
9701
po::value<unsigned long>(&srv_thread_sleep_delay)->default_value(10000L),
9327
9702
"Time of innodb thread sleeping before joining InnoDB queue (usec). Value 0 disable a sleep");
9328
9703
context("data-file-path",
9329
9704
po::value<string>(),
9334
9709
context("use-internal-malloc",
9335
9710
"Use InnoDB's internal memory allocator instal of the OS memory allocator.");
9336
9711
context("change-buffering",
9337
po::value<string>(&innobase_change_buffering),
9712
po::value<string>(),
9338
9713
"Buffer changes to reduce random access: OFF, ON, inserting, deleting, changing, or purging.");
9339
9714
context("read-ahead-threshold",
9340
po::value<read_ahead_threshold_constraint>(&innodb_read_ahead_threshold)->default_value(56),
9715
po::value<unsigned long>(&srv_read_ahead_threshold)->default_value(56),
9341
9716
"Number of pages that must be accessed sequentially for InnoDB to trigger a readahead.");
9342
9717
context("disable-xa",
9343
9718
"Disable InnoDB support for the XA two-phase commit");
9344
9719
context("disable-table-locks",
9345
9720
"Disable InnoDB locking in LOCK TABLES");
9346
9721
context("strict-mode",
9347
po::value<bool>(&strict_mode)->default_value(false)->zero_tokens(),
9722
po::value<bool>()->default_value(false)->zero_tokens(),
9348
9723
"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
9724
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)."));
9725
po::value<unsigned long>()->default_value(50),
9726
"Timeout in seconds an InnoDB transaction may wait for a lock before being rolled back. Values above 100000000 disable the timeout.");
9729
static drizzle_sys_var* innobase_system_variables[]= {
9730
DRIZZLE_SYSVAR(additional_mem_pool_size),
9731
DRIZZLE_SYSVAR(autoextend_increment),
9732
DRIZZLE_SYSVAR(buffer_pool_size),
9733
DRIZZLE_SYSVAR(checksums),
9734
DRIZZLE_SYSVAR(commit_concurrency),
9735
DRIZZLE_SYSVAR(concurrency_tickets),
9736
DRIZZLE_SYSVAR(data_file_path),
9737
DRIZZLE_SYSVAR(data_home_dir),
9738
DRIZZLE_SYSVAR(doublewrite),
9739
DRIZZLE_SYSVAR(fast_shutdown),
9740
DRIZZLE_SYSVAR(read_io_threads),
9741
DRIZZLE_SYSVAR(write_io_threads),
9742
DRIZZLE_SYSVAR(file_per_table),
9743
DRIZZLE_SYSVAR(file_format),
9744
DRIZZLE_SYSVAR(file_format_check),
9745
DRIZZLE_SYSVAR(flush_log_at_trx_commit),
9746
DRIZZLE_SYSVAR(flush_method),
9747
DRIZZLE_SYSVAR(force_recovery),
9748
DRIZZLE_SYSVAR(lock_wait_timeout),
9749
#ifdef UNIV_LOG_ARCHIVE
9750
DRIZZLE_SYSVAR(log_arch_dir),
9751
DRIZZLE_SYSVAR(log_archive),
9752
#endif /* UNIV_LOG_ARCHIVE */
9753
DRIZZLE_SYSVAR(log_buffer_size),
9754
DRIZZLE_SYSVAR(log_file_size),
9755
DRIZZLE_SYSVAR(log_files_in_group),
9756
DRIZZLE_SYSVAR(log_group_home_dir),
9757
DRIZZLE_SYSVAR(max_dirty_pages_pct),
9758
DRIZZLE_SYSVAR(max_purge_lag),
9759
DRIZZLE_SYSVAR(adaptive_flushing),
9760
DRIZZLE_SYSVAR(mirrored_log_groups),
9761
DRIZZLE_SYSVAR(old_blocks_pct),
9762
DRIZZLE_SYSVAR(old_blocks_time),
9763
DRIZZLE_SYSVAR(open_files),
9764
DRIZZLE_SYSVAR(stats_sample_pages),
9765
DRIZZLE_SYSVAR(adaptive_hash_index),
9766
DRIZZLE_SYSVAR(replication_delay),
9767
DRIZZLE_SYSVAR(status_file),
9768
DRIZZLE_SYSVAR(strict_mode),
9769
DRIZZLE_SYSVAR(support_xa),
9770
DRIZZLE_SYSVAR(sync_spin_loops),
9771
DRIZZLE_SYSVAR(spin_wait_delay),
9772
DRIZZLE_SYSVAR(table_locks),
9773
DRIZZLE_SYSVAR(thread_concurrency),
9774
DRIZZLE_SYSVAR(thread_sleep_delay),
9775
DRIZZLE_SYSVAR(version),
9776
DRIZZLE_SYSVAR(use_sys_malloc),
9777
DRIZZLE_SYSVAR(change_buffering),
9778
DRIZZLE_SYSVAR(read_ahead_threshold),
9779
DRIZZLE_SYSVAR(io_capacity),
9367
9783
DRIZZLE_DECLARE_PLUGIN