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 extern uint64_t srv_ibuf_max_size;
00227 extern uint32_t srv_ibuf_active_contract;
00228 extern uint32_t srv_ibuf_accel_rate;
00229 extern uint32_t srv_checkpoint_age_target;
00230 extern uint32_t srv_flush_neighbor_pages;
00231 extern uint32_t srv_read_ahead;
00232 extern uint32_t srv_adaptive_flushing_method;
00233
00234 extern ibool srv_read_only;
00235 extern ibool srv_fake_write;
00236 extern ibool srv_apply_log_only;
00237
00238
00239
00240 extern ulint srv_n_rows_inserted;
00241 extern ulint srv_n_rows_updated;
00242 extern ulint srv_n_rows_deleted;
00243 extern ulint srv_n_rows_read;
00244
00245 extern ibool srv_print_innodb_monitor;
00246 extern ibool srv_print_innodb_lock_monitor;
00247 extern ibool srv_print_innodb_tablespace_monitor;
00248 extern ibool srv_print_verbose_log;
00249 extern ibool srv_print_innodb_table_monitor;
00250
00251 extern ibool srv_lock_timeout_active;
00252 extern ibool srv_monitor_active;
00253 extern ibool srv_error_monitor_active;
00254
00255 extern ulong srv_n_spin_wait_rounds;
00256 extern ulong srv_n_free_tickets_to_enter;
00257 extern ulong srv_thread_sleep_delay;
00258 extern ulong srv_spin_wait_delay;
00259 extern ibool srv_priority_boost;
00260
00261 extern ulint srv_truncated_status_writes;
00262
00263 #ifdef UNIV_DEBUG
00264 extern ibool srv_print_thread_releases;
00265 extern ibool srv_print_lock_waits;
00266 extern ibool srv_print_buf_io;
00267 extern ibool srv_print_log_io;
00268 extern ibool srv_print_latch_waits;
00269 #else
00270 # define srv_print_thread_releases FALSE
00271 # define srv_print_lock_waits FALSE
00272 # define srv_print_buf_io FALSE
00273 # define srv_print_log_io FALSE
00274 # define srv_print_latch_waits FALSE
00275 #endif
00276
00277 extern ulint srv_activity_count;
00278 extern ulint srv_fatal_semaphore_wait_threshold;
00279 extern ulint srv_dml_needed_delay;
00280
00281 extern mutex_t* kernel_mutex_temp;
00282
00283
00284
00285 extern mutex_t* commit_id_mutex_temp;
00286
00287 #define kernel_mutex (*kernel_mutex_temp)
00288 #define commit_id_mutex (*commit_id_mutex_temp)
00289
00290 #define SRV_MAX_N_IO_THREADS 130
00291
00292
00293
00294 extern const char* srv_io_thread_op_info[];
00295 extern const char* srv_io_thread_function[];
00296
00297
00298 extern ulint srv_log_write_requests;
00299
00300
00301 extern ulint srv_log_writes;
00302
00303
00304 extern ulint srv_os_log_written;
00305
00306
00307 extern ulint srv_os_log_pending_writes;
00308
00309
00310
00311 extern ulint srv_log_waits;
00312
00313
00314 extern ulong srv_n_purge_threads;
00315
00316
00317 extern ulong srv_purge_batch_size;
00318
00319
00320 extern ulint srv_data_read;
00321
00322
00323 extern ulint srv_data_written;
00324
00325
00326
00327 extern ulint srv_dblwr_writes;
00328
00329
00330
00331 extern ulint srv_dblwr_pages_written;
00332
00333
00334 extern ulint srv_buf_pool_write_requests;
00335
00336
00337
00338
00339 extern ulint srv_buf_pool_wait_free;
00340
00341
00342
00343 extern ulint srv_buf_pool_flushed;
00344
00347 extern ulint srv_buf_pool_reads;
00348
00350 extern uint32_t srv_auto_lru_dump;
00351
00353 typedef struct export_var_struct export_struc;
00354
00356 extern export_struc export_vars;
00357
00359 typedef struct srv_sys_struct srv_sys_t;
00360
00362 extern srv_sys_t* srv_sys;
00363
00364 # ifdef UNIV_PFS_THREAD
00365
00366 extern mysql_pfs_key_t trx_rollback_clean_thread_key;
00367 extern mysql_pfs_key_t io_handler_thread_key;
00368 extern mysql_pfs_key_t srv_lock_timeout_thread_key;
00369 extern mysql_pfs_key_t srv_error_monitor_thread_key;
00370 extern mysql_pfs_key_t srv_monitor_thread_key;
00371 extern mysql_pfs_key_t srv_master_thread_key;
00372
00373
00374
00375 # define pfs_register_thread(key) \
00376 do { \
00377 if (PSI_server) { \
00378 struct PSI_thread* psi = PSI_server->new_thread(key, NULL, 0);\
00379 if (psi) { \
00380 PSI_server->set_thread(psi); \
00381 } \
00382 } \
00383 } while (0)
00384
00385
00386 # define pfs_delete_thread() \
00387 do { \
00388 if (PSI_server) { \
00389 PSI_server->delete_current_thread(); \
00390 } \
00391 } while (0)
00392 # endif
00393
00394 #endif
00395
00397 enum {
00398 SRV_NOT_RAW = 0,
00399 SRV_NEW_RAW,
00401 SRV_OLD_RAW
00402 };
00403
00406 enum {
00407 SRV_UNIX_FSYNC = 1,
00408 SRV_UNIX_O_DSYNC,
00409 SRV_UNIX_LITTLESYNC,
00412 SRV_UNIX_NOSYNC,
00413 SRV_UNIX_O_DIRECT,
00415 SRV_UNIX_ALL_O_DIRECT
00416 };
00417
00419 enum {
00420 SRV_WIN_IO_NORMAL = 1,
00421 SRV_WIN_IO_UNBUFFERED
00422 };
00423
00429 enum {
00430 SRV_FORCE_IGNORE_CORRUPT = 1,
00432 SRV_FORCE_NO_BACKGROUND = 2,
00435 SRV_FORCE_NO_TRX_UNDO = 3,
00437 SRV_FORCE_NO_IBUF_MERGE = 4,
00440 SRV_FORCE_NO_UNDO_LOG_SCAN = 5,
00444 SRV_FORCE_NO_LOG_REDO = 6
00446 };
00447
00448 #ifndef UNIV_HOTBACKUP
00449
00450 enum srv_thread_type {
00451 SRV_COM = 1,
00452 SRV_CONSOLE,
00453 SRV_WORKER,
00455 #if 0
00456
00457 SRV_BUFFER,
00458 SRV_RECOVERY,
00459 SRV_INSERT,
00460 #endif
00461 SRV_MASTER
00463 };
00464
00465
00468 UNIV_INTERN
00469 ulint
00470 srv_boot(void);
00471
00472
00474 UNIV_INTERN
00475 void
00476 srv_init(void);
00477
00478
00480 UNIV_INTERN
00481 void
00482 srv_free(void);
00483
00484
00487 UNIV_INTERN
00488 void
00489 srv_general_init(void);
00490
00491
00494 UNIV_INTERN
00495 ulint
00496 srv_get_n_threads(void);
00497
00498
00502 enum srv_thread_type
00503 srv_get_thread_type(void);
00504
00505
00507 UNIV_INTERN
00508 void
00509 srv_set_io_thread_op_info(
00510
00511 ulint i,
00512 const char* str);
00514
00519 UNIV_INTERN
00520 ulint
00521 srv_release_threads(
00522
00523 enum srv_thread_type type,
00524 ulint n);
00525
00528 UNIV_INTERN
00529 os_thread_ret_t
00530 srv_master_thread(
00531
00532 void* arg);
00534
00536 UNIV_INTERN
00537 void
00538 srv_wake_purge_thread(void);
00539
00540
00546 UNIV_INTERN
00547 void
00548 srv_active_wake_master_thread(void);
00549
00550
00552 UNIV_INTERN
00553 void
00554 srv_wake_master_thread(void);
00555
00556
00562 UNIV_INTERN
00563 void
00564 srv_wake_purge_thread_if_not_active(void);
00565
00566
00569 UNIV_INTERN
00570 void
00571 srv_conc_enter_innodb(
00572
00573 trx_t* trx);
00575
00578 UNIV_INTERN
00579 void
00580 srv_conc_force_enter_innodb(
00581
00582 trx_t* trx);
00584
00587 UNIV_INTERN
00588 void
00589 srv_conc_force_exit_innodb(
00590
00591 trx_t* trx);
00593
00595 UNIV_INTERN
00596 void
00597 srv_conc_exit_innodb(
00598
00599 trx_t* trx);
00601
00607 UNIV_INTERN
00608 void
00609 srv_suspend_mysql_thread(
00610
00611 que_thr_t* thr);
00613
00616 UNIV_INTERN
00617 void
00618 srv_release_mysql_thread_if_suspended(
00619
00620 que_thr_t* thr);
00622
00625 UNIV_INTERN
00626 os_thread_ret_t
00627 srv_lock_timeout_thread(
00628
00629 void* arg);
00631
00634 UNIV_INTERN
00635 os_thread_ret_t
00636 srv_monitor_thread(
00637
00638 void* arg);
00640
00641
00642
00643
00644 UNIV_INTERN
00645 os_thread_ret_t
00646 srv_error_monitor_thread(
00647
00648 void* arg);
00650
00654 UNIV_INTERN
00655 os_thread_ret_t
00656 srv_LRU_dump_restore_thread(
00657
00658 void* arg);
00660
00664 UNIV_INTERN
00665 ibool
00666 srv_printf_innodb_monitor(
00667
00668 FILE* file,
00669 ibool nowait,
00670 ulint* trx_start,
00672 ulint* trx_end);
00675
00677 UNIV_INTERN
00678 void
00679 srv_export_innodb_status(void);
00680
00681
00682
00684 UNIV_INTERN
00685 void
00686 srv_inc_activity_count(void);
00687
00688
00689
00692 UNIV_INTERN
00693 os_thread_ret_t
00694 srv_purge_thread(
00695
00696 void* );
00699
00702 UNIV_INTERN
00703 void
00704 srv_que_task_enqueue_low(
00705
00706 que_thr_t* thr);
00708
00711 UNIV_INTERN
00712 ibool
00713 srv_is_any_background_thread_active(void);
00714
00715
00717 struct export_var_struct{
00718 ulint innodb_data_pending_reads;
00719 ulint innodb_data_pending_writes;
00720 ulint innodb_data_pending_fsyncs;
00721 ulint innodb_data_fsyncs;
00722 ulint innodb_data_read;
00723 ulint innodb_data_writes;
00724 ulint innodb_data_written;
00725 ulint innodb_data_reads;
00726 ulint innodb_buffer_pool_pages_total;
00727 ulint innodb_buffer_pool_pages_data;
00728 ulint innodb_buffer_pool_pages_dirty;
00729 ulint innodb_buffer_pool_pages_misc;
00730 ulint innodb_buffer_pool_pages_free;
00731 #ifdef UNIV_DEBUG
00732 ulint innodb_buffer_pool_pages_latched;
00733 #endif
00734 ulint innodb_buffer_pool_read_requests;
00735 ulint innodb_buffer_pool_reads;
00736 ulint innodb_buffer_pool_wait_free;
00737 ulint innodb_buffer_pool_pages_flushed;
00738 ulint innodb_buffer_pool_write_requests;
00739 ulint innodb_buffer_pool_read_ahead;
00740 ulint innodb_buffer_pool_read_ahead_evicted;
00741 ulint innodb_dblwr_pages_written;
00742 ulint innodb_dblwr_writes;
00743 ibool innodb_have_atomic_builtins;
00744 ulint innodb_log_waits;
00745 ulint innodb_log_write_requests;
00746 ulint innodb_log_writes;
00747 ulint innodb_os_log_written;
00748 ulint innodb_os_log_fsyncs;
00749 ulint innodb_os_log_pending_writes;
00750 ulint innodb_os_log_pending_fsyncs;
00751 ulint innodb_page_size;
00752 ulint innodb_pages_created;
00753 ulint innodb_pages_read;
00754 ulint innodb_pages_written;
00755 ulint innodb_row_lock_waits;
00756 ulint innodb_row_lock_current_waits;
00757 ib_int64_t innodb_row_lock_time;
00759 ulint innodb_row_lock_time_avg;
00762 ulint innodb_row_lock_time_max;
00764 ulint innodb_rows_read;
00765 ulint innodb_rows_inserted;
00766 ulint innodb_rows_updated;
00767 ulint innodb_rows_deleted;
00768 ulint innodb_truncated_status_writes;
00769 };
00770
00772 typedef struct srv_slot_struct srv_slot_t;
00773
00775 typedef srv_slot_t srv_table_t;
00776
00778 struct srv_sys_struct{
00779 srv_table_t* threads;
00780 UT_LIST_BASE_NODE_T(que_thr_t)
00781 tasks;
00782 };
00783
00784 extern ulint srv_n_threads_active[];
00785 #else
00786 # define srv_use_adaptive_hash_indexes FALSE
00787 # define srv_use_checksums TRUE
00788 # define srv_use_native_aio FALSE
00789 # define srv_force_recovery 0UL
00790 # define srv_set_io_thread_op_info(t,info) ((void) 0)
00791 # define srv_is_being_started 0
00792 # define srv_win_file_flush_method SRV_WIN_IO_UNBUFFERED
00793 # define srv_unix_file_flush_method SRV_UNIX_O_DSYNC
00794 # define srv_start_raw_disk_in_use 0
00795 # define srv_file_per_table 1
00796 #endif
00797
00798
00799 #endif