buf0flu.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. The database buffer pool flush algorithm
  3. (c) 1995 Innobase Oy
  4. Created 11/5/1995 Heikki Tuuri
  5. *******************************************************/
  6. #ifndef buf0flu_h
  7. #define buf0flu_h
  8. #include "univ.i"
  9. #include "buf0types.h"
  10. #include "ut0byte.h"
  11. #include "mtr0types.h"
  12. /************************************************************************
  13. Updates the flush system data structures when a write is completed. */
  14. void
  15. buf_flush_write_complete(
  16. /*=====================*/
  17. buf_block_t* block); /* in: pointer to the block in question */
  18. /*************************************************************************
  19. Flushes pages from the end of the LRU list if there is too small
  20. a margin of replaceable pages there. */
  21. void
  22. buf_flush_free_margin(void);
  23. /*=======================*/
  24. /***********************************************************************
  25. This utility flushes dirty blocks from the end of the LRU list or flush_list.
  26. NOTE 1: in the case of an LRU flush the calling thread may own latches to
  27. pages: to avoid deadlocks, this function must be written so that it cannot
  28. end up waiting for these latches! NOTE 2: in the case of a flush list flush,
  29. the calling thread is not allowed to own any latches on pages! */
  30. ulint
  31. buf_flush_batch(
  32. /*============*/
  33. /* out: number of blocks for which the write
  34. request was queued */
  35. ulint flush_type, /* in: BUF_FLUSH_LRU or BUF_FLUSH_LIST; if
  36. BUF_FLUSH_LIST, then the caller must not own
  37. any latches on pages */
  38. ulint min_n, /* in: wished minimum mumber of blocks flushed
  39. (it is not guaranteed that the actual number
  40. is that big, though) */
  41. dulint lsn_limit); /* in the case BUF_FLUSH_LIST all blocks whose
  42. oldest_modification is smaller than this
  43. should be flushed (if their number does not
  44. exceed min_n), otherwise ignored */
  45. /**********************************************************************
  46. Waits until a flush batch of the given type ends */
  47. void
  48. buf_flush_wait_batch_end(
  49. /*=====================*/
  50. ulint type); /* in: BUF_FLUSH_LRU or BUF_FLUSH_LIST */
  51. /************************************************************************
  52. This function should be called at a mini-transaction commit, if a page was
  53. modified in it. Puts the block to the list of modified blocks, if it not
  54. already in it. */
  55. UNIV_INLINE
  56. void
  57. buf_flush_note_modification(
  58. /*========================*/
  59. buf_block_t* block, /* in: block which is modified */
  60. mtr_t* mtr); /* in: mtr */
  61. /************************************************************************
  62. This function should be called when recovery has modified a buffer page. */
  63. UNIV_INLINE
  64. void
  65. buf_flush_recv_note_modification(
  66. /*=============================*/
  67. buf_block_t* block, /* in: block which is modified */
  68. dulint start_lsn, /* in: start lsn of the first mtr in a
  69. set of mtr's */
  70. dulint end_lsn); /* in: end lsn of the last mtr in the
  71. set of mtr's */
  72. /************************************************************************
  73. Returns TRUE if the file page block is immediately suitable for replacement,
  74. i.e., transition FILE_PAGE => NOT_USED allowed. */
  75. ibool
  76. buf_flush_ready_for_replace(
  77. /*========================*/
  78. /* out: TRUE if can replace immediately */
  79. buf_block_t* block); /* in: buffer control block, must be in state
  80. BUF_BLOCK_FILE_PAGE and in the LRU list */
  81. /**********************************************************************
  82. Validates the flush list. */
  83. ibool
  84. buf_flush_validate(void);
  85. /*====================*/
  86. /* out: TRUE if ok */
  87. /* When buf_flush_free_margin is called, it tries to make this many blocks
  88. available to replacement in the free list and at the end of the LRU list (to
  89. make sure that a read-ahead batch can be read efficiently in a single
  90. sweep). */
  91. #define BUF_FLUSH_FREE_BLOCK_MARGIN  (5 + BUF_READ_AHEAD_AREA)
  92. #define BUF_FLUSH_EXTRA_MARGIN  (BUF_FLUSH_FREE_BLOCK_MARGIN / 4)
  93. #ifndef UNIV_NONINL
  94. #include "buf0flu.ic"
  95. #endif
  96. #endif