Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00041 #pragma once
00042 #ifndef srv0srv_h
00043 #define srv0srv_h
00044
00045 #include "univ.i"
00046 #ifndef UNIV_HOTBACKUP
00047 #include "sync0sync.h"
00048 #include "os0sync.h"
00049 #include "que0types.h"
00050 #include "trx0types.h"
00051
00052 #include <string>
00053
00054 extern const char* srv_main_thread_op_info;
00055
00060 static const std::string srv_mysql50_table_name_prefix("#mysql50#");
00061
00062
00063
00064 extern os_event_t srv_lock_timeout_thread_event;
00065
00066
00067 extern os_event_t srv_monitor_event;
00068
00069
00070 extern os_event_t srv_timeout_event;
00071
00072
00073 extern os_event_t srv_error_event;
00074
00075
00076
00077 #define SRV_AUTO_EXTEND_INCREMENT \
00078 (srv_auto_extend_increment * ((1024 * 1024) / UNIV_PAGE_SIZE))
00079
00080
00081 extern ibool srv_lower_case_table_names;
00082
00083
00084 extern mutex_t srv_monitor_file_mutex;
00085
00086 extern FILE* srv_monitor_file;
00087
00088
00089
00090 extern mutex_t srv_dict_tmpfile_mutex;
00091
00092 extern FILE* srv_dict_tmpfile;
00093
00094
00095
00096 extern mutex_t srv_misc_tmpfile_mutex;
00097
00098 extern FILE* srv_misc_tmpfile;
00099
00100
00101
00102 extern char* srv_data_home;
00103 #ifdef UNIV_LOG_ARCHIVE
00104 extern char* srv_arch_dir;
00105 #endif
00106
00109 #ifndef UNIV_HOTBACKUP
00110 extern my_bool srv_file_per_table;
00111 #else
00112 extern ibool srv_file_per_table;
00113 #endif
00114
00115 extern ulint srv_file_format;
00119 extern ulint srv_max_file_format_at_startup;
00122 extern ibool srv_locks_unsafe_for_binlog;
00123 #endif
00124
00125
00126
00127
00128
00129 extern my_bool srv_use_native_aio;
00130 #ifdef __WIN__
00131 extern ibool srv_use_native_conditions;
00132 #endif
00133 extern ulint srv_n_data_files;
00134 extern char** srv_data_file_names;
00135 extern ulint* srv_data_file_sizes;
00136 extern ulint* srv_data_file_is_raw_partition;
00137
00138 extern ibool srv_auto_extend_last_data_file;
00139 extern ulint srv_last_file_size_max;
00140 extern char** srv_log_group_home_dirs;
00141 #ifndef UNIV_HOTBACKUP
00142 extern unsigned int srv_auto_extend_increment;
00143
00144 extern ibool srv_created_new_raw;
00145
00146 extern ulint srv_n_log_groups;
00147 extern ulint srv_n_log_files;
00148 extern ulint srv_log_file_size;
00149 extern ulint srv_log_buffer_size;
00150 extern ulong srv_flush_log_at_trx_commit;
00151 extern bool srv_adaptive_flushing;
00152
00153
00154
00155
00156 #if defined(BUILD_DRIZZLE)
00157 extern const byte srv_latin1_ordering[256];
00158 extern bool srv_use_sys_malloc;
00159 #else
00160 extern const byte* srv_latin1_ordering;
00161 # ifndef UNIV_HOTBACKUP
00162 extern my_bool srv_use_sys_malloc;
00163 # else
00164 extern ibool srv_use_sys_malloc;
00165 # endif
00166 #endif
00167 extern ulint srv_buf_pool_size;
00168 extern ulint srv_buf_pool_instances;
00169 extern ulint srv_buf_pool_old_size;
00170 extern ulint srv_buf_pool_curr_size;
00171 extern ulint srv_mem_pool_size;
00172 extern ulint srv_lock_table_size;
00173
00174 extern ulint srv_n_file_io_threads;
00175 extern ulong srv_read_ahead_threshold;
00176 extern ulint srv_n_read_io_threads;
00177 extern ulint srv_n_write_io_threads;
00178
00179
00180 extern ulong srv_io_capacity;
00181
00182
00183
00184 #define PCT_IO(p) ((ulong) (srv_io_capacity * ((double) p / 100.0)))
00185
00186 #ifdef UNIV_LOG_ARCHIVE
00187 extern ibool srv_log_archive_on;
00188 extern ibool srv_archive_recovery;
00189 extern ib_uint64_t srv_archive_recovery_limit_lsn;
00190 #endif
00191
00192 extern char* srv_file_flush_method_str;
00193 extern ulint srv_unix_file_flush_method;
00194 extern ulint srv_win_file_flush_method;
00195
00196 extern ulint srv_max_n_open_files;
00197
00198 extern ulint srv_max_dirty_pages_pct;
00199
00200 extern ulint srv_force_recovery;
00201 extern ulong srv_thread_concurrency;
00202
00203 extern ulint srv_max_n_threads;
00204
00205 extern lint srv_conc_n_threads;
00206
00207 extern ulint srv_fast_shutdown;
00208
00209
00210
00211
00212
00213
00214 extern ibool srv_innodb_status;
00215
00216 extern ib_uint64_t srv_stats_sample_pages;
00217
00218 extern ibool srv_use_doublewrite_buf;
00219 extern ibool srv_use_checksums;
00220
00221 extern ulong srv_max_buf_pool_modified_pct;
00222 extern ulong srv_max_purge_lag;
00223
00224 extern ulong srv_replication_delay;
00225
00226
00227 extern ulint srv_n_rows_inserted;
00228 extern ulint srv_n_rows_updated;
00229 extern ulint srv_n_rows_deleted;
00230 extern ulint srv_n_rows_read;
00231
00232 extern ibool srv_print_innodb_monitor;
00233 extern ibool srv_print_innodb_lock_monitor;
00234 extern ibool srv_print_innodb_tablespace_monitor;
00235 extern ibool srv_print_verbose_log;
00236 extern ibool srv_print_innodb_table_monitor;
00237
00238 extern ibool srv_lock_timeout_active;
00239 extern ibool srv_monitor_active;
00240 extern ibool srv_error_monitor_active;
00241
00242 extern ulong srv_n_spin_wait_rounds;
00243 extern ulong srv_n_free_tickets_to_enter;
00244 extern ulong srv_thread_sleep_delay;
00245 extern ulong srv_spin_wait_delay;
00246 extern ibool srv_priority_boost;
00247
00248 extern ulint srv_truncated_status_writes;
00249
00250 #ifdef UNIV_DEBUG
00251 extern ibool srv_print_thread_releases;
00252 extern ibool srv_print_lock_waits;
00253 extern ibool srv_print_buf_io;
00254 extern ibool srv_print_log_io;
00255 extern ibool srv_print_latch_waits;
00256 #else
00257 # define srv_print_thread_releases FALSE
00258 # define srv_print_lock_waits FALSE
00259 # define srv_print_buf_io FALSE
00260 # define srv_print_log_io FALSE
00261 # define srv_print_latch_waits FALSE
00262 #endif
00263
00264 extern ulint srv_activity_count;
00265 extern ulint srv_fatal_semaphore_wait_threshold;
00266 extern ulint srv_dml_needed_delay;
00267
00268 extern mutex_t* kernel_mutex_temp;
00269
00270
00271
00272 extern mutex_t* commit_id_mutex_temp;
00273
00274 #define kernel_mutex (*kernel_mutex_temp)
00275 #define commit_id_mutex (*commit_id_mutex_temp)
00276
00277 #define SRV_MAX_N_IO_THREADS 130
00278
00279
00280
00281 extern const char* srv_io_thread_op_info[];
00282 extern const char* srv_io_thread_function[];
00283
00284
00285 extern ulint srv_log_write_requests;
00286
00287
00288 extern ulint srv_log_writes;
00289
00290
00291 extern ulint srv_os_log_written;
00292
00293
00294 extern ulint srv_os_log_pending_writes;
00295
00296
00297
00298 extern ulint srv_log_waits;
00299
00300
00301 extern ulong srv_n_purge_threads;
00302
00303
00304 extern ulong srv_purge_batch_size;
00305
00306
00307 extern ulint srv_data_read;
00308
00309
00310 extern ulint srv_data_written;
00311
00312
00313
00314 extern ulint srv_dblwr_writes;
00315
00316
00317
00318 extern ulint srv_dblwr_pages_written;
00319
00320
00321 extern ulint srv_buf_pool_write_requests;
00322
00323
00324
00325
00326 extern ulint srv_buf_pool_wait_free;
00327
00328
00329
00330 extern ulint srv_buf_pool_flushed;
00331
00334 extern ulint srv_buf_pool_reads;
00335
00337 typedef struct export_var_struct export_struc;
00338
00340 extern export_struc export_vars;
00341
00343 typedef struct srv_sys_struct srv_sys_t;
00344
00346 extern srv_sys_t* srv_sys;
00347
00348 # ifdef UNIV_PFS_THREAD
00349
00350 extern mysql_pfs_key_t trx_rollback_clean_thread_key;
00351 extern mysql_pfs_key_t io_handler_thread_key;
00352 extern mysql_pfs_key_t srv_lock_timeout_thread_key;
00353 extern mysql_pfs_key_t srv_error_monitor_thread_key;
00354 extern mysql_pfs_key_t srv_monitor_thread_key;
00355 extern mysql_pfs_key_t srv_master_thread_key;
00356
00357
00358
00359 # define pfs_register_thread(key) \
00360 do { \
00361 if (PSI_server) { \
00362 struct PSI_thread* psi = PSI_server->new_thread(key, NULL, 0);\
00363 if (psi) { \
00364 PSI_server->set_thread(psi); \
00365 } \
00366 } \
00367 } while (0)
00368
00369
00370 # define pfs_delete_thread() \
00371 do { \
00372 if (PSI_server) { \
00373 PSI_server->delete_current_thread(); \
00374 } \
00375 } while (0)
00376 # endif
00377
00378 #endif
00379
00381 enum {
00382 SRV_NOT_RAW = 0,
00383 SRV_NEW_RAW,
00385 SRV_OLD_RAW
00386 };
00387
00390 enum {
00391 SRV_UNIX_FSYNC = 1,
00392 SRV_UNIX_O_DSYNC,
00393 SRV_UNIX_LITTLESYNC,
00396 SRV_UNIX_NOSYNC,
00397 SRV_UNIX_O_DIRECT
00399 };
00400
00402 enum {
00403 SRV_WIN_IO_NORMAL = 1,
00404 SRV_WIN_IO_UNBUFFERED
00405 };
00406
00412 enum {
00413 SRV_FORCE_IGNORE_CORRUPT = 1,
00415 SRV_FORCE_NO_BACKGROUND = 2,
00418 SRV_FORCE_NO_TRX_UNDO = 3,
00420 SRV_FORCE_NO_IBUF_MERGE = 4,
00423 SRV_FORCE_NO_UNDO_LOG_SCAN = 5,
00427 SRV_FORCE_NO_LOG_REDO = 6
00429 };
00430
00431 #ifndef UNIV_HOTBACKUP
00432
00433 enum srv_thread_type {
00434 SRV_COM = 1,
00435 SRV_CONSOLE,
00436 SRV_WORKER,
00438 #if 0
00439
00440 SRV_BUFFER,
00441 SRV_RECOVERY,
00442 SRV_INSERT,
00443 #endif
00444 SRV_MASTER
00446 };
00447
00448
00451 UNIV_INTERN
00452 ulint
00453 srv_boot(void);
00454
00455
00457 UNIV_INTERN
00458 void
00459 srv_init(void);
00460
00461
00463 UNIV_INTERN
00464 void
00465 srv_free(void);
00466
00467
00470 UNIV_INTERN
00471 void
00472 srv_general_init(void);
00473
00474
00477 UNIV_INTERN
00478 ulint
00479 srv_get_n_threads(void);
00480
00481
00485 enum srv_thread_type
00486 srv_get_thread_type(void);
00487
00488
00490 UNIV_INTERN
00491 void
00492 srv_set_io_thread_op_info(
00493
00494 ulint i,
00495 const char* str);
00497
00502 UNIV_INTERN
00503 ulint
00504 srv_release_threads(
00505
00506 enum srv_thread_type type,
00507 ulint n);
00508
00511 UNIV_INTERN
00512 os_thread_ret_t
00513 srv_master_thread(
00514
00515 void* arg);
00517
00519 UNIV_INTERN
00520 void
00521 srv_wake_purge_thread(void);
00522
00523
00529 UNIV_INTERN
00530 void
00531 srv_active_wake_master_thread(void);
00532
00533
00535 UNIV_INTERN
00536 void
00537 srv_wake_master_thread(void);
00538
00539
00545 UNIV_INTERN
00546 void
00547 srv_wake_purge_thread_if_not_active(void);
00548
00549
00552 UNIV_INTERN
00553 void
00554 srv_conc_enter_innodb(
00555
00556 trx_t* trx);
00558
00561 UNIV_INTERN
00562 void
00563 srv_conc_force_enter_innodb(
00564
00565 trx_t* trx);
00567
00570 UNIV_INTERN
00571 void
00572 srv_conc_force_exit_innodb(
00573
00574 trx_t* trx);
00576
00578 UNIV_INTERN
00579 void
00580 srv_conc_exit_innodb(
00581
00582 trx_t* trx);
00584
00590 UNIV_INTERN
00591 void
00592 srv_suspend_mysql_thread(
00593
00594 que_thr_t* thr);
00596
00599 UNIV_INTERN
00600 void
00601 srv_release_mysql_thread_if_suspended(
00602
00603 que_thr_t* thr);
00605
00608 UNIV_INTERN
00609 os_thread_ret_t
00610 srv_lock_timeout_thread(
00611
00612 void* arg);
00614
00617 UNIV_INTERN
00618 os_thread_ret_t
00619 srv_monitor_thread(
00620
00621 void* arg);
00623
00624
00625
00626
00627 UNIV_INTERN
00628 os_thread_ret_t
00629 srv_error_monitor_thread(
00630
00631 void* arg);
00633
00637 UNIV_INTERN
00638 ibool
00639 srv_printf_innodb_monitor(
00640
00641 FILE* file,
00642 ibool nowait,
00643 ulint* trx_start,
00645 ulint* trx_end);
00648
00650 UNIV_INTERN
00651 void
00652 srv_export_innodb_status(void);
00653
00654
00655
00657 UNIV_INTERN
00658 void
00659 srv_inc_activity_count(void);
00660
00661
00662
00665 UNIV_INTERN
00666 os_thread_ret_t
00667 srv_purge_thread(
00668
00669 void* );
00672
00675 UNIV_INTERN
00676 void
00677 srv_que_task_enqueue_low(
00678
00679 que_thr_t* thr);
00681
00684 UNIV_INTERN
00685 ibool
00686 srv_is_any_background_thread_active(void);
00687
00688
00690 struct export_var_struct{
00691 ulint innodb_data_pending_reads;
00692 ulint innodb_data_pending_writes;
00693 ulint innodb_data_pending_fsyncs;
00694 ulint innodb_data_fsyncs;
00695 ulint innodb_data_read;
00696 ulint innodb_data_writes;
00697 ulint innodb_data_written;
00698 ulint innodb_data_reads;
00699 ulint innodb_buffer_pool_pages_total;
00700 ulint innodb_buffer_pool_pages_data;
00701 ulint innodb_buffer_pool_pages_dirty;
00702 ulint innodb_buffer_pool_pages_misc;
00703 ulint innodb_buffer_pool_pages_free;
00704 #ifdef UNIV_DEBUG
00705 ulint innodb_buffer_pool_pages_latched;
00706 #endif
00707 ulint innodb_buffer_pool_read_requests;
00708 ulint innodb_buffer_pool_reads;
00709 ulint innodb_buffer_pool_wait_free;
00710 ulint innodb_buffer_pool_pages_flushed;
00711 ulint innodb_buffer_pool_write_requests;
00712 ulint innodb_buffer_pool_read_ahead;
00713 ulint innodb_buffer_pool_read_ahead_evicted;
00714 ulint innodb_dblwr_pages_written;
00715 ulint innodb_dblwr_writes;
00716 ibool innodb_have_atomic_builtins;
00717 ulint innodb_log_waits;
00718 ulint innodb_log_write_requests;
00719 ulint innodb_log_writes;
00720 ulint innodb_os_log_written;
00721 ulint innodb_os_log_fsyncs;
00722 ulint innodb_os_log_pending_writes;
00723 ulint innodb_os_log_pending_fsyncs;
00724 ulint innodb_page_size;
00725 ulint innodb_pages_created;
00726 ulint innodb_pages_read;
00727 ulint innodb_pages_written;
00728 ulint innodb_row_lock_waits;
00729 ulint innodb_row_lock_current_waits;
00730 ib_int64_t innodb_row_lock_time;
00732 ulint innodb_row_lock_time_avg;
00735 ulint innodb_row_lock_time_max;
00737 ulint innodb_rows_read;
00738 ulint innodb_rows_inserted;
00739 ulint innodb_rows_updated;
00740 ulint innodb_rows_deleted;
00741 ulint innodb_truncated_status_writes;
00742 };
00743
00745 typedef struct srv_slot_struct srv_slot_t;
00746
00748 typedef srv_slot_t srv_table_t;
00749
00751 struct srv_sys_struct{
00752 srv_table_t* threads;
00753 UT_LIST_BASE_NODE_T(que_thr_t)
00754 tasks;
00755 };
00756
00757 extern ulint srv_n_threads_active[];
00758 #else
00759 # define srv_use_adaptive_hash_indexes FALSE
00760 # define srv_use_checksums TRUE
00761 # define srv_use_native_aio FALSE
00762 # define srv_force_recovery 0UL
00763 # define srv_set_io_thread_op_info(t,info) ((void) 0)
00764 # define srv_is_being_started 0
00765 # define srv_win_file_flush_method SRV_WIN_IO_UNBUFFERED
00766 # define srv_unix_file_flush_method SRV_UNIX_O_DSYNC
00767 # define srv_start_raw_disk_in_use 0
00768 # define srv_file_per_table 1
00769 #endif
00770
00771
00772 #endif