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

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. Purge old versions
  3. (c) 1996 Innobase Oy
  4. Created 3/26/1996 Heikki Tuuri
  5. *******************************************************/
  6. #ifndef trx0purge_h
  7. #define trx0purge_h
  8. #include "univ.i"
  9. #include "trx0types.h"
  10. #include "mtr0mtr.h"
  11. #include "trx0sys.h"
  12. #include "que0types.h"
  13. #include "page0page.h"
  14. #include "usr0sess.h"
  15. #include "fil0fil.h"
  16. /* The global data structure coordinating a purge */
  17. extern trx_purge_t* purge_sys;
  18. /* A dummy undo record used as a return value when we have a whole undo log
  19. which needs no purge */
  20. extern trx_undo_rec_t trx_purge_dummy_rec;
  21. /************************************************************************
  22. Calculates the file address of an undo log header when we have the file
  23. address of its history list node. */
  24. UNIV_INLINE
  25. fil_addr_t
  26. trx_purge_get_log_from_hist(
  27. /*========================*/
  28. /* out: file address of the log */
  29. fil_addr_t node_addr); /* in: file address of the history
  30. list node of the log */
  31. /*********************************************************************
  32. Checks if trx_id is >= purge_view: then it is guaranteed that its update
  33. undo log still exists in the system. */
  34. ibool
  35. trx_purge_update_undo_must_exist(
  36. /*=============================*/
  37. /* out: TRUE if is sure that it is preserved, also
  38. if the function returns FALSE, it is possible that
  39. the undo log still exists in the system */
  40. dulint trx_id);/* in: transaction id */
  41. /************************************************************************
  42. Creates the global purge system control structure and inits the history
  43. mutex. */
  44. void
  45. trx_purge_sys_create(void);
  46. /*======================*/
  47. /************************************************************************
  48. Adds the update undo log as the first log in the history list. Removes the
  49. update undo log segment from the rseg slot if it is too big for reuse. */
  50. void
  51. trx_purge_add_update_undo_to_history(
  52. /*=================================*/
  53. trx_t* trx, /* in: transaction */
  54. page_t* undo_page, /* in: update undo log header page,
  55. x-latched */
  56. mtr_t* mtr); /* in: mtr */
  57. /************************************************************************
  58. Fetches the next undo log record from the history list to purge. It must be
  59. released with the corresponding release function. */
  60. trx_undo_rec_t*
  61. trx_purge_fetch_next_rec(
  62. /*=====================*/
  63. /* out: copy of an undo log record, or
  64. pointer to the dummy undo log record
  65. &trx_purge_dummy_rec if the whole undo log
  66. can skipped in purge; NULL if none left */
  67. dulint* roll_ptr,/* out: roll pointer to undo record */
  68. trx_undo_inf_t** cell, /* out: storage cell for the record in the
  69. purge array */
  70. mem_heap_t* heap); /* in: memory heap where copied */
  71. /***********************************************************************
  72. Releases a reserved purge undo record. */
  73. void
  74. trx_purge_rec_release(
  75. /*==================*/
  76. trx_undo_inf_t* cell); /* in: storage cell */
  77. /***********************************************************************
  78. This function runs a purge batch. */
  79. ulint
  80. trx_purge(void);
  81. /*===========*/
  82. /* out: number of undo log pages handled in
  83. the batch */
  84. /**********************************************************************
  85. Prints information of the purge system to stderr. */
  86. void
  87. trx_purge_sys_print(void);
  88. /*======================*/
  89. /* The control structure used in the purge operation */
  90. struct trx_purge_struct{
  91. ulint state; /* Purge system state */
  92. sess_t* sess; /* System session running the purge
  93. query */
  94. trx_t* trx; /* System transaction running the purge
  95. query: this trx is not in the trx list
  96. of the trx system and it never ends */
  97. que_t* query; /* The query graph which will do the
  98. parallelized purge operation */
  99. rw_lock_t latch; /* The latch protecting the purge view.
  100. A purge operation must acquire an
  101. x-latch here for the instant at which
  102. it changes the purge view: an undo
  103. log operation can prevent this by
  104. obtaining an s-latch here. */
  105. read_view_t* view; /* The purge will not remove undo logs
  106. which are >= this view (purge view) */
  107. mutex_t mutex; /* Mutex protecting the fields below */
  108. ulint n_pages_handled;/* Approximate number of undo log
  109. pages processed in purge */
  110. ulint handle_limit; /* Target of how many pages to get
  111. processed in the current purge */
  112. /*------------------------------*/
  113. /* The following two fields form the 'purge pointer' which advances
  114. during a purge, and which is used in history list truncation */
  115. dulint purge_trx_no; /* Purge has advanced past all
  116. transactions whose number is less
  117. than this */
  118. dulint purge_undo_no; /* Purge has advanced past all records
  119. whose undo number is less than this */
  120. /*-----------------------------*/
  121. ibool next_stored; /* TRUE if the info of the next record
  122. to purge is stored below: if yes, then
  123. the transaction number and the undo
  124. number of the record are stored in
  125. purge_trx_no and purge_undo_no above */
  126. trx_rseg_t* rseg; /* Rollback segment for the next undo
  127. record to purge */
  128. ulint page_no; /* Page number for the next undo
  129. record to purge, page number of the
  130. log header, if dummy record */
  131. ulint offset; /* Page offset for the next undo
  132. record to purge, 0 if the dummy
  133. record */
  134. ulint hdr_page_no; /* Header page of the undo log where
  135. the next record to purge belongs */
  136. ulint hdr_offset; /* Header byte offset on the page */
  137. /*-----------------------------*/
  138. trx_undo_arr_t* arr; /* Array of transaction numbers and
  139. undo numbers of the undo records
  140. currently under processing in purge */
  141. mem_heap_t* heap; /* Temporary storage used during a
  142. purge: can be emptied after purge
  143. completes */
  144. };
  145. #define TRX_PURGE_ON 1 /* purge operation is running */
  146. #define TRX_STOP_PURGE 2 /* purge operation is stopped, or
  147. it should be stopped */
  148. #ifndef UNIV_NONINL
  149. #include "trx0purge.ic"
  150. #endif
  151. #endif