mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
ff5d306e29
SHOW ENGINE INNODB MUTEX functionality is completely removed, as are the InnoDB latching order checks. We will enforce innodb_fatal_semaphore_wait_threshold only for dict_sys.mutex and lock_sys.mutex. dict_sys_t::mutex_lock(): A single entry point for dict_sys.mutex. lock_sys_t::mutex_lock(): A single entry point for lock_sys.mutex. FIXME: srv_sys should be removed altogether; it is duplicating tpool functionality. fil_crypt_threads_init(): To prevent SAFE_MUTEX warnings, we must not hold fil_system.mutex. fil_close_all_files(): To prevent SAFE_MUTEX warnings for fil_space_destroy_crypt_data(), we must not hold fil_system.mutex while invoking fil_space_free_low() on a detached tablespace.
112 lines
4.1 KiB
C++
112 lines
4.1 KiB
C++
/*****************************************************************************
|
|
|
|
Copyright (c) 2014, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
|
Copyright (c) 2019, 2020, MariaDB Corporation.
|
|
|
|
This program is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published by the Free Software
|
|
Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
|
|
|
|
*****************************************************************************/
|
|
|
|
/**************************************************//**
|
|
@file ut/ut0new.cc
|
|
Instrumented memory allocator.
|
|
|
|
Created May 26, 2014 Vasil Dimov
|
|
*******************************************************/
|
|
|
|
#include "univ.i"
|
|
#include "ut0new.h"
|
|
/** The total amount of memory currently allocated from the operating
|
|
system with allocate_large(). */
|
|
Atomic_counter<ulint> os_total_large_mem_allocated;
|
|
|
|
/** Maximum number of retries to allocate memory. */
|
|
const size_t alloc_max_retries = 60;
|
|
|
|
/** Keys for registering allocations with performance schema.
|
|
Keep this list alphabetically sorted. */
|
|
#ifdef BTR_CUR_HASH_ADAPT
|
|
PSI_memory_key mem_key_ahi;
|
|
#endif /* BTR_CUR_HASH_ADAPT */
|
|
PSI_memory_key mem_key_buf_buf_pool;
|
|
PSI_memory_key mem_key_dict_stats_bg_recalc_pool_t;
|
|
PSI_memory_key mem_key_dict_stats_index_map_t;
|
|
PSI_memory_key mem_key_dict_stats_n_diff_on_level;
|
|
PSI_memory_key mem_key_other;
|
|
PSI_memory_key mem_key_row_log_buf;
|
|
PSI_memory_key mem_key_row_merge_sort;
|
|
PSI_memory_key mem_key_std;
|
|
|
|
#ifdef UNIV_PFS_MEMORY
|
|
|
|
/** Auxiliary array of performance schema 'PSI_memory_info'.
|
|
Each allocation appears in
|
|
performance_schema.memory_summary_global_by_event_name (and alike) in the form
|
|
of e.g. 'memory/innodb/NAME' where the last component NAME is picked from
|
|
the list below:
|
|
1. If key is specified, then the respective name is used
|
|
2. Without a specified key, allocations from inside std::* containers use
|
|
mem_key_std
|
|
3. Without a specified key, allocations from outside std::* pick up the key
|
|
based on the file name, and if file name is not found in the predefined list
|
|
(in ut_new_boot()) then mem_key_other is used.
|
|
Keep this list alphabetically sorted. */
|
|
static PSI_memory_info pfs_info[] = {
|
|
#ifdef BTR_CUR_HASH_ADAPT
|
|
{&mem_key_ahi, "adaptive hash index", 0},
|
|
#endif /* BTR_CUR_HASH_ADAPT */
|
|
{&mem_key_buf_buf_pool, "buf_buf_pool", 0},
|
|
{&mem_key_dict_stats_bg_recalc_pool_t, "dict_stats_bg_recalc_pool_t", 0},
|
|
{&mem_key_dict_stats_index_map_t, "dict_stats_index_map_t", 0},
|
|
{&mem_key_dict_stats_n_diff_on_level, "dict_stats_n_diff_on_level", 0},
|
|
{&mem_key_other, "other", 0},
|
|
{&mem_key_row_log_buf, "row_log_buf", 0},
|
|
{&mem_key_row_merge_sort, "row_merge_sort", 0},
|
|
{&mem_key_std, "std", 0},
|
|
};
|
|
|
|
static const int NKEYS = static_cast<int>UT_ARR_SIZE(auto_event_names)-1;
|
|
static PSI_memory_key auto_event_keys[NKEYS];
|
|
|
|
/** Setup the internal objects needed for UT_NEW() to operate.
|
|
This must be called before the first call to UT_NEW(). */
|
|
void ut_new_boot()
|
|
{
|
|
PSI_MEMORY_CALL(register_memory)("innodb", pfs_info, static_cast<int>
|
|
UT_ARR_SIZE(pfs_info));
|
|
|
|
PSI_memory_info pfs_info_auto[NKEYS];
|
|
for (int i= 0; i < NKEYS; i++)
|
|
{
|
|
pfs_info_auto[i]= {&auto_event_keys[i], auto_event_names[i], 0};
|
|
}
|
|
|
|
PSI_MEMORY_CALL(register_memory)("innodb", pfs_info_auto,NKEYS);
|
|
}
|
|
|
|
/** Retrieve a memory key (registered with PFS), corresponding to source file .
|
|
|
|
@param[in] autoevent_idx - offset to the auto_event_names corresponding to the
|
|
file name of the caller.
|
|
|
|
@return registered memory key or PSI_NOT_INSTRUMENTED
|
|
*/
|
|
PSI_memory_key ut_new_get_key_by_file(uint32_t autoevent_idx)
|
|
{
|
|
ut_ad(autoevent_idx < NKEYS);
|
|
return auto_event_keys[autoevent_idx];
|
|
}
|
|
|
|
#else /* UNIV_PFS_MEMORY */
|
|
void ut_new_boot(){}
|
|
#endif
|