srv0srv.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:14k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. The server main program
  3. (c) 1995 Innobase Oy
  4. Created 10/10/1995 Heikki Tuuri
  5. *******************************************************/
  6. #ifndef srv0srv_h
  7. #define srv0srv_h
  8. #include "univ.i"
  9. #include "sync0sync.h"
  10. #include "os0sync.h"
  11. #include "que0types.h"
  12. #include "trx0types.h"
  13. extern const char* srv_main_thread_op_info;
  14. /* When this event is set the lock timeout and InnoDB monitor
  15. thread starts running */
  16. extern os_event_t srv_lock_timeout_thread_event;
  17. /* If the last data file is auto-extended, we add this many pages to it
  18. at a time */
  19. #define SRV_AUTO_EXTEND_INCREMENT
  20. (srv_auto_extend_increment * ((1024 * 1024) / UNIV_PAGE_SIZE))
  21. /* This is set to TRUE if the MySQL user has set it in MySQL */
  22. extern ibool srv_lower_case_table_names;
  23. /* Mutex for locking srv_monitor_file */
  24. extern mutex_t srv_monitor_file_mutex;
  25. /* Temporary file for innodb monitor output */
  26. extern FILE* srv_monitor_file;
  27. /* Server parameters which are read from the initfile */
  28. extern char* srv_data_home;
  29. #ifdef UNIV_LOG_ARCHIVE
  30. extern char* srv_arch_dir;
  31. #endif /* UNIV_LOG_ARCHIVE */
  32. extern ibool srv_file_per_table;
  33. extern ibool    srv_locks_unsafe_for_binlog;
  34. extern ulint srv_n_data_files;
  35. extern char** srv_data_file_names;
  36. extern ulint* srv_data_file_sizes;
  37. extern ulint*   srv_data_file_is_raw_partition;
  38. extern ibool srv_auto_extend_last_data_file;
  39. extern ulint srv_last_file_size_max;
  40. extern ulong srv_auto_extend_increment;
  41. extern ibool srv_created_new_raw;
  42. #define SRV_NEW_RAW    1
  43. #define SRV_OLD_RAW    2
  44. extern char** srv_log_group_home_dirs;
  45. extern ulint srv_n_log_groups;
  46. extern ulint srv_n_log_files;
  47. extern ulint srv_log_file_size;
  48. extern ulint srv_log_buffer_size;
  49. extern ulint srv_flush_log_at_trx_commit;
  50. extern byte srv_latin1_ordering[256];/* The sort order table of the latin1
  51. character set */
  52. extern ulint srv_pool_size;
  53. extern ulint srv_awe_window_size;
  54. extern ulint srv_mem_pool_size;
  55. extern ulint srv_lock_table_size;
  56. extern ulint srv_n_file_io_threads;
  57. #ifdef UNIV_LOG_ARCHIVE
  58. extern ibool srv_log_archive_on;
  59. extern ibool srv_archive_recovery;
  60. extern dulint srv_archive_recovery_limit_lsn;
  61. #endif /* UNIV_LOG_ARCHIVE */
  62. extern ulint srv_lock_wait_timeout;
  63. extern char*    srv_file_flush_method_str;
  64. extern ulint    srv_unix_file_flush_method;
  65. extern ulint    srv_win_file_flush_method;
  66. extern ulint srv_max_n_open_files;
  67. extern ulint srv_max_dirty_pages_pct;
  68. extern ulint srv_force_recovery;
  69. extern ulint srv_thread_concurrency;
  70. extern ulint srv_max_n_threads;
  71. extern lint srv_conc_n_threads;
  72. extern ibool srv_fast_shutdown;
  73. extern ibool srv_very_fast_shutdown;  /* if this TRUE, do not flush the
  74.  buffer pool to data files at the
  75.  shutdown; we effectively 'crash'
  76.  InnoDB */
  77. extern ibool srv_innodb_status;
  78. extern ibool srv_use_doublewrite_buf;
  79. extern ibool    srv_set_thread_priorities;
  80. extern int      srv_query_thread_priority;
  81. extern ulong srv_max_buf_pool_modified_pct;
  82. extern ulong srv_max_purge_lag;
  83. extern ibool srv_use_awe;
  84. extern ibool srv_use_adaptive_hash_indexes;
  85. /*-------------------------------------------*/
  86. extern ulint srv_n_rows_inserted;
  87. extern ulint srv_n_rows_updated;
  88. extern ulint srv_n_rows_deleted;
  89. extern ulint srv_n_rows_read;
  90. extern ibool srv_print_innodb_monitor;
  91. extern ibool    srv_print_innodb_lock_monitor;
  92. extern ibool    srv_print_innodb_tablespace_monitor;
  93. extern ibool    srv_print_verbose_log;
  94. extern ibool    srv_print_innodb_table_monitor;
  95. extern ibool srv_lock_timeout_and_monitor_active;
  96. extern ibool srv_error_monitor_active; 
  97. extern ulint srv_n_spin_wait_rounds;
  98. extern ulint srv_spin_wait_delay;
  99. extern ibool srv_priority_boost;
  100. extern ulint srv_pool_size;
  101. extern ulint srv_mem_pool_size;
  102. extern ulint srv_lock_table_size;
  103. extern ulint srv_sim_disk_wait_pct;
  104. extern ulint srv_sim_disk_wait_len;
  105. extern ibool srv_sim_disk_wait_by_yield;
  106. extern ibool srv_sim_disk_wait_by_wait;
  107. extern ibool srv_measure_contention;
  108. extern ibool srv_measure_by_spin;
  109. extern ibool srv_print_thread_releases;
  110. extern ibool srv_print_lock_waits;
  111. extern ibool srv_print_buf_io;
  112. extern ibool srv_print_log_io;
  113. extern ibool srv_print_parsed_sql;
  114. extern ibool srv_print_latch_waits;
  115. extern ibool srv_test_nocache;
  116. extern ibool srv_test_cache_evict;
  117. extern ibool srv_test_extra_mutexes;
  118. extern ibool srv_test_sync;
  119. extern ulint srv_test_n_threads;
  120. extern ulint srv_test_n_loops;
  121. extern ulint srv_test_n_free_rnds;
  122. extern ulint srv_test_n_reserved_rnds;
  123. extern ulint srv_test_n_mutexes;
  124. extern ulint srv_test_array_size;
  125. extern ulint srv_activity_count;
  126. extern ulint srv_fatal_semaphore_wait_threshold;
  127. extern ulint srv_dml_needed_delay;
  128. extern mutex_t* kernel_mutex_temp;/* mutex protecting the server, trx structs,
  129. query threads, and lock table: we allocate
  130. it from dynamic memory to get it to the
  131. same DRAM page as other hotspot semaphores */
  132. #define kernel_mutex (*kernel_mutex_temp)
  133. #define SRV_MAX_N_IO_THREADS 100
  134. /* Array of English strings describing the current state of an
  135. i/o handler thread */
  136. extern const char* srv_io_thread_op_info[];
  137. extern const char* srv_io_thread_function[];
  138. typedef struct srv_sys_struct srv_sys_t;
  139. /* The server system */
  140. extern srv_sys_t* srv_sys;
  141. /* Alternatives for the file flush option in Unix; see the InnoDB manual about
  142. what these mean */
  143. #define SRV_UNIX_FDATASYNC   1 /* This is the default; it is currently mapped
  144. to a call of fsync() because fdatasync()
  145. seemed to corrupt files in Linux and Solaris */
  146. #define SRV_UNIX_O_DSYNC     2
  147. #define SRV_UNIX_LITTLESYNC  3
  148. #define SRV_UNIX_NOSYNC      4
  149. #define SRV_UNIX_O_DIRECT    5
  150. /* Alternatives for file i/o in Windows */
  151. #define SRV_WIN_IO_NORMAL 1
  152. #define SRV_WIN_IO_UNBUFFERED 2 /* This is the default */
  153. /* Alternatives for srv_force_recovery. Non-zero values are intended
  154. to help the user get a damaged database up so that he can dump intact
  155. tables and rows with SELECT INTO OUTFILE. The database must not otherwise
  156. be used with these options! A bigger number below means that all precautions
  157. of lower numbers are included. */
  158. #define SRV_FORCE_IGNORE_CORRUPT 1 /* let the server run even if it
  159. detects a corrupt page */
  160. #define SRV_FORCE_NO_BACKGROUND 2  /* prevent the main thread from
  161. running: if a crash would occur
  162. in purge, this prevents it */
  163. #define SRV_FORCE_NO_TRX_UNDO 3 /* do not run trx rollback after
  164. recovery */
  165. #define SRV_FORCE_NO_IBUF_MERGE 4 /* prevent also ibuf operations:
  166. if they would cause a crash, better
  167. not do them */
  168. #define SRV_FORCE_NO_UNDO_LOG_SCAN 5 /* do not look at undo logs when
  169. starting the database: InnoDB will
  170. treat even incomplete transactions
  171. as committed */
  172. #define SRV_FORCE_NO_LOG_REDO 6 /* do not do the log roll-forward
  173. in connection with recovery */
  174. /*************************************************************************
  175. Boots Innobase server. */
  176. ulint
  177. srv_boot(void);
  178. /*==========*/
  179. /* out: DB_SUCCESS or error code */
  180. /*************************************************************************
  181. Frees the OS fast mutex created in srv_boot(). */
  182. void
  183. srv_free(void);
  184. /*==========*/
  185. /*************************************************************************
  186. Initializes the synchronization primitives, memory system, and the thread
  187. local storage. */
  188. void
  189. srv_general_init(void);
  190. /*==================*/
  191. /*************************************************************************
  192. Gets the number of threads in the system. */
  193. ulint
  194. srv_get_n_threads(void);
  195. /*===================*/
  196. /*************************************************************************
  197. Returns the calling thread type. */
  198. ulint
  199. srv_get_thread_type(void);
  200. /*=====================*/
  201. /* out: SRV_COM, ... */
  202. /*************************************************************************
  203. Sets the info describing an i/o thread current state. */
  204. void
  205. srv_set_io_thread_op_info(
  206. /*======================*/
  207. ulint i, /* in: the 'segment' of the i/o thread */
  208. const char* str); /* in: constant char string describing the
  209. state */
  210. /*************************************************************************
  211. Releases threads of the type given from suspension in the thread table.
  212. NOTE! The server mutex has to be reserved by the caller! */
  213. ulint
  214. srv_release_threads(
  215. /*================*/
  216. /* out: number of threads released: this may be
  217. < n if not enough threads were suspended at the
  218. moment */
  219. ulint type, /* in: thread type */
  220. ulint n); /* in: number of threads to release */
  221. /*************************************************************************
  222. The master thread controlling the server. */
  223. #ifndef __WIN__
  224. void*
  225. #else
  226. ulint
  227. #endif
  228. srv_master_thread(
  229. /*==============*/
  230. /* out: a dummy parameter */
  231. void* arg); /* in: a dummy parameter required by
  232. os_thread_create */
  233. /***********************************************************************
  234. Tells the Innobase server that there has been activity in the database
  235. and wakes up the master thread if it is suspended (not sleeping). Used
  236. in the MySQL interface. Note that there is a small chance that the master
  237. thread stays suspended (we do not protect our operation with the kernel
  238. mutex, for performace reasons). */
  239. void
  240. srv_active_wake_master_thread(void);
  241. /*===============================*/
  242. /***********************************************************************
  243. Wakes up the master thread if it is suspended or being suspended. */
  244. void
  245. srv_wake_master_thread(void);
  246. /*========================*/
  247. /*************************************************************************
  248. Puts an OS thread to wait if there are too many concurrent threads
  249. (>= srv_thread_concurrency) inside InnoDB. The threads wait in a FIFO queue. */
  250. void
  251. srv_conc_enter_innodb(
  252. /*==================*/
  253. trx_t* trx); /* in: transaction object associated with the
  254. thread */
  255. /*************************************************************************
  256. This lets a thread enter InnoDB regardless of the number of threads inside
  257. InnoDB. This must be called when a thread ends a lock wait. */
  258. void
  259. srv_conc_force_enter_innodb(
  260. /*========================*/
  261. trx_t* trx); /* in: transaction object associated with the
  262. thread */
  263. /*************************************************************************
  264. This must be called when a thread exits InnoDB in a lock wait or at the
  265. end of an SQL statement. */
  266. void
  267. srv_conc_force_exit_innodb(
  268. /*=======================*/
  269. trx_t* trx); /* in: transaction object associated with the
  270. thread */
  271. /*************************************************************************
  272. This must be called when a thread exits InnoDB. */
  273. void
  274. srv_conc_exit_innodb(
  275. /*=================*/
  276. trx_t* trx); /* in: transaction object associated with the
  277. thread */
  278. /*******************************************************************
  279. Puts a MySQL OS thread to wait for a lock to be released. If an error
  280. occurs during the wait trx->error_state associated with thr is
  281. != DB_SUCCESS when we return. DB_LOCK_WAIT_TIMEOUT and DB_DEADLOCK
  282. are possible errors. DB_DEADLOCK is returned if selective deadlock
  283. resolution chose this transaction as a victim. */
  284. void
  285. srv_suspend_mysql_thread(
  286. /*=====================*/
  287. que_thr_t* thr); /* in: query thread associated with the MySQL
  288. OS thread */
  289. /************************************************************************
  290. Releases a MySQL OS thread waiting for a lock to be released, if the
  291. thread is already suspended. */
  292. void
  293. srv_release_mysql_thread_if_suspended(
  294. /*==================================*/
  295. que_thr_t* thr); /* in: query thread associated with the
  296. MySQL OS thread  */
  297. /*************************************************************************
  298. A thread which wakes up threads whose lock wait may have lasted too long.
  299. This also prints the info output by various InnoDB monitors. */
  300. #ifndef __WIN__
  301. void*
  302. #else
  303. ulint
  304. #endif
  305. srv_lock_timeout_and_monitor_thread(
  306. /*================================*/
  307. /* out: a dummy parameter */
  308. void* arg); /* in: a dummy parameter required by
  309. os_thread_create */
  310. /*************************************************************************
  311. A thread which prints warnings about semaphore waits which have lasted
  312. too long. These can be used to track bugs which cause hangs. */
  313. #ifndef __WIN__
  314. void*
  315. #else
  316. ulint
  317. #endif
  318. srv_error_monitor_thread(
  319. /*=====================*/
  320. /* out: a dummy parameter */
  321. void* arg); /* in: a dummy parameter required by
  322. os_thread_create */
  323. /**********************************************************************
  324. Outputs to a file the output of the InnoDB Monitor. */
  325. void
  326. srv_printf_innodb_monitor(
  327. /*======================*/
  328. FILE* file, /* in: output stream */
  329. ulint* trx_start, /* out: file position of the start of
  330. the list of active transactions */
  331. ulint* trx_end); /* out: file position of the end of
  332. the list of active transactions */
  333. /* Types for the threads existing in the system. Threads of types 4 - 9
  334. are called utility threads. Note that utility threads are mainly disk
  335. bound, except that version threads 6 - 7 may also be CPU bound, if
  336. cleaning versions from the buffer pool. */
  337. #define SRV_COM 1 /* threads serving communication and queries */
  338. #define SRV_CONSOLE 2 /* thread serving console */
  339. #define SRV_WORKER 3 /* threads serving parallelized queries and
  340. queries released from lock wait */
  341. #define SRV_BUFFER 4 /* thread flushing dirty buffer blocks,
  342. not currently in use */
  343. #define SRV_RECOVERY 5 /* threads finishing a recovery,
  344. not currently in use */
  345. #define SRV_INSERT 6 /* thread flushing the insert buffer to disk,
  346. not currently in use */
  347. #define SRV_MASTER 7       /* the master thread, (whose type number must
  348. be biggest) */
  349. /* Thread slot in the thread table */
  350. typedef struct srv_slot_struct srv_slot_t;
  351. /* Thread table is an array of slots */
  352. typedef srv_slot_t srv_table_t;
  353. /* The server system struct */
  354. struct srv_sys_struct{
  355. os_event_t operational; /* created threads must wait for the
  356. server to become operational by
  357. waiting for this event */
  358. srv_table_t* threads; /* server thread table */
  359. UT_LIST_BASE_NODE_T(que_thr_t)
  360. tasks; /* task queue */
  361. };
  362. extern ulint srv_n_threads_active[];
  363. #endif