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

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. The database buffer pool LRU replacement algorithm
  3. (c) 1995 Innobase Oy
  4. Created 11/5/1995 Heikki Tuuri
  5. *******************************************************/
  6. #ifndef buf0lru_h
  7. #define buf0lru_h
  8. #include "univ.i"
  9. #include "ut0byte.h"
  10. #include "buf0types.h"
  11. /**********************************************************************
  12. Tries to remove LRU flushed blocks from the end of the LRU list and put them
  13. to the free list. This is beneficial for the efficiency of the insert buffer
  14. operation, as flushed pages from non-unique non-clustered indexes are here
  15. taken out of the buffer pool, and their inserts redirected to the insert
  16. buffer. Otherwise, the flushed blocks could get modified again before read
  17. operations need new buffer blocks, and the i/o work done in flushing would be
  18. wasted. */
  19. void
  20. buf_LRU_try_free_flushed_blocks(void);
  21. /*==================================*/
  22. /**********************************************************************
  23. Returns TRUE if less than 15 % of the buffer pool is available. This can be
  24. used in heuristics to prevent huge transactions eating up the whole buffer
  25. pool for their locks. */
  26. ibool
  27. buf_LRU_buf_pool_running_out(void);
  28. /*==============================*/
  29. /* out: TRUE if less than 15 % of buffer pool
  30. left */
  31. /*#######################################################################
  32. These are low-level functions
  33. #########################################################################*/
  34. /* Minimum LRU list length for which the LRU_old pointer is defined */
  35. #define BUF_LRU_OLD_MIN_LEN 80
  36. #define BUF_LRU_FREE_SEARCH_LEN (5 + 2 * BUF_READ_AHEAD_AREA)
  37. /**********************************************************************
  38. Invalidates all pages belonging to a given tablespace when we are deleting
  39. the data file(s) of that tablespace. A PROBLEM: if readahead is being started,
  40. what guarantees that it will not try to read in pages after this operation has
  41. completed? */
  42. void
  43. buf_LRU_invalidate_tablespace(
  44. /*==========================*/
  45. ulint id); /* in: space id */
  46. /**********************************************************************
  47. Gets the minimum LRU_position field for the blocks in an initial segment
  48. (determined by BUF_LRU_INITIAL_RATIO) of the LRU list. The limit is not
  49. guaranteed to be precise, because the ulint_clock may wrap around. */
  50. ulint
  51. buf_LRU_get_recent_limit(void);
  52. /*==========================*/
  53. /* out: the limit; zero if could not determine it */
  54. /**********************************************************************
  55. Look for a replaceable block from the end of the LRU list and put it to
  56. the free list if found. */
  57. ibool
  58. buf_LRU_search_and_free_block(
  59. /*==========================*/
  60. /* out: TRUE if freed */
  61. ulint n_iterations);   /* in: how many times this has been called
  62. repeatedly without result: a high value means
  63. that we should search farther; if value is
  64. k < 10, then we only search k/10 * number
  65. of pages in the buffer pool from the end
  66. of the LRU list */
  67. /**********************************************************************
  68. Returns a free block from the buf_pool. The block is taken off the
  69. free list. If it is empty, blocks are moved from the end of the
  70. LRU list to the free list. */
  71. buf_block_t*
  72. buf_LRU_get_free_block(void);
  73. /*=========================*/
  74. /* out: the free control block; also if AWE is
  75. used, it is guaranteed that the block has its
  76. page mapped to a frame when we return */
  77. /**********************************************************************
  78. Puts a block back to the free list. */
  79. void
  80. buf_LRU_block_free_non_file_page(
  81. /*=============================*/
  82. buf_block_t* block); /* in: block, must not contain a file page */
  83. /**********************************************************************
  84. Adds a block to the LRU list. */
  85. void
  86. buf_LRU_add_block(
  87. /*==============*/
  88. buf_block_t* block, /* in: control block */
  89. ibool old); /* in: TRUE if should be put to the old
  90. blocks in the LRU list, else put to the
  91. start; if the LRU list is very short, added to
  92. the start regardless of this parameter */
  93. /**********************************************************************
  94. Moves a block to the start of the LRU list. */
  95. void
  96. buf_LRU_make_block_young(
  97. /*=====================*/
  98. buf_block_t* block); /* in: control block */
  99. /**********************************************************************
  100. Moves a block to the end of the LRU list. */
  101. void
  102. buf_LRU_make_block_old(
  103. /*===================*/
  104. buf_block_t* block); /* in: control block */
  105. /**************************************************************************
  106. Validates the LRU list. */
  107. ibool
  108. buf_LRU_validate(void);
  109. /*==================*/
  110. /**************************************************************************
  111. Prints the LRU list. */
  112. void
  113. buf_LRU_print(void);
  114. /*===============*/
  115. #ifndef UNIV_NONINL
  116. #include "buf0lru.ic"
  117. #endif
  118. #endif