mirror of
https://github.com/MariaDB/server.git
synced 2025-09-11 05:52:26 +03:00
Bug 12635227 - 61188: DROP TABLE EXTREMELY SLOW
approved by: Marko rb://681 Coalescing of free buf_page_t descriptors can prove to be one severe bottleneck in performance of compression. One such workload where it hurts badly is DROP TABLE. This patch removes buf_page_t allocations from buf_buddy and uses ut_malloc instead. In order to further reduce overhead of colaescing we no longer attempt to coalesce a block if the corresponding free_list is less than 16 in size.
This commit is contained in:
@@ -30,18 +30,6 @@ Created 11/5/1995 Heikki Tuuri
|
||||
#include "ut0byte.h"
|
||||
#include "buf0types.h"
|
||||
|
||||
/** The return type of buf_LRU_free_block() */
|
||||
enum buf_lru_free_block_status {
|
||||
/** freed */
|
||||
BUF_LRU_FREED = 0,
|
||||
/** not freed because the caller asked to remove the
|
||||
uncompressed frame but the control block cannot be
|
||||
relocated */
|
||||
BUF_LRU_CANNOT_RELOCATE,
|
||||
/** not freed because of some other reason */
|
||||
BUF_LRU_NOT_FREED
|
||||
};
|
||||
|
||||
/******************************************************************//**
|
||||
Tries to remove LRU flushed blocks from the end of the LRU list and put them
|
||||
to the free list. This is beneficial for the efficiency of the insert buffer
|
||||
@@ -98,17 +86,16 @@ buf_LRU_insert_zip_clean(
|
||||
Try to free a block. If bpage is a descriptor of a compressed-only
|
||||
page, the descriptor object will be freed as well.
|
||||
|
||||
NOTE: If this function returns BUF_LRU_FREED, it will temporarily
|
||||
NOTE: If this function returns TRUE, it will temporarily
|
||||
release buf_pool_mutex. Furthermore, the page frame will no longer be
|
||||
accessible via bpage.
|
||||
|
||||
The caller must hold buf_pool_mutex and buf_page_get_mutex(bpage) and
|
||||
release these two mutexes after the call. No other
|
||||
buf_page_get_mutex() may be held when calling this function.
|
||||
@return BUF_LRU_FREED if freed, BUF_LRU_CANNOT_RELOCATE or
|
||||
BUF_LRU_NOT_FREED otherwise. */
|
||||
@return TRUE if freed, FALSE otherwise. */
|
||||
UNIV_INTERN
|
||||
enum buf_lru_free_block_status
|
||||
ibool
|
||||
buf_LRU_free_block(
|
||||
/*===============*/
|
||||
buf_page_t* bpage, /*!< in: block to be freed */
|
||||
|
Reference in New Issue
Block a user