24#ifndef TABLE_CACHE_INCLUDED
25#define TABLE_CACHE_INCLUDED
32#include <unordered_map>
102 std::unordered_map<std::string, std::unique_ptr<Table_cache_element>>
m_cache;
120#ifdef HAVE_PSI_INTERFACE
350 assert(table->
in_use == thd);
372 m_cache.emplace(
key, std::unique_ptr<Table_cache_element>(el));
453 std::string key_str(
key, key_length);
454 const auto el_it =
m_cache.find(key_str);
455 if (el_it ==
m_cache.end())
return nullptr;
530 : share(share_arg), current_cache_index(0), current_table(
nullptr) {
Iterator for I_P_List.
Definition: sql_plist.h:168
Intrusive parameterized list.
Definition: sql_plist.h:75
void remove(T *a)
Definition: sql_plist.h:124
bool is_empty() const
Definition: sql_plist.h:90
T * front()
Definition: sql_plist.h:133
void push_front(T *a)
Definition: sql_plist.h:91
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:34
my_thread_id thread_id() const
Definition: sql_class.h:2462
struct System_status_var status_var
Definition: sql_class.h:1109
Element that represents the table in the specific table cache.
Definition: table_cache.h:229
TABLE_SHARE * get_share() const
Definition: table_cache.h:246
Table_cache_element(TABLE_SHARE *share_arg)
Definition: table_cache.h:244
TABLE_list used_tables
Definition: table_cache.h:239
I_P_List< TABLE, I_P_List_adapter< TABLE, &TABLE::cache_next, &TABLE::cache_prev > > TABLE_list
Definition: table_cache.h:237
TABLE_list free_tables
Definition: table_cache.h:240
TABLE_SHARE * share
Definition: table_cache.h:241
Iterator which allows to go through all used TABLE instances for the table in all table caches.
Definition: table_cache.h:258
const TABLE_SHARE * share
Definition: table_cache.h:259
Table_cache_iterator(const TABLE_SHARE *share_arg)
Construct iterator over all used TABLE objects for the table share.
Definition: table_cache.h:529
uint current_cache_index
Definition: table_cache.h:260
void move_to_next_table()
Helper that moves iterator to the next used TABLE for the table share.
Definition: table_cache.h:537
TABLE * current_table
Definition: table_cache.h:261
void rewind()
Definition: table_cache.h:573
TABLE * operator++(int)
Get current used TABLE instance and move iterator to the next one.
Definition: table_cache.h:553
Container class for all table cache instances in the system.
Definition: table_cache.h:170
Table_cache m_table_cache[MAX_TABLE_CACHES]
An array of Table_cache instances.
Definition: table_cache.h:215
uint cached_tables()
Get total number of used and unused TABLE objects in all table caches.
Definition: table_cache.cc:214
void unlock_all_and_tdc()
Release locks on all instances of table cache and table definition cache.
Definition: table_cache.cc:239
void print_tables()
Print debug information for the contents of all table cache instances.
Definition: table_cache.cc:349
void lock_all_and_tdc()
Acquire locks on all instances of table cache and table definition cache (i.e.
Definition: table_cache.cc:228
void assert_owner_all_and_tdc()
Assert that caller owns locks on all instances of table cache and table definition cache.
Definition: table_cache.cc:269
bool init()
Initialize all instances of table cache to be used by server.
Definition: table_cache.cc:189
uint cache_index(Table_cache *cache) const
Get index for the table cache in container.
Definition: table_cache.h:187
void assert_owner_all()
Assert that caller owns locks on all instances of table cache.
Definition: table_cache.cc:259
void free_all_unused_tables()
Free all unused TABLE objects in all table cache instances.
Definition: table_cache.cc:337
static const int MAX_TABLE_CACHES
Maximum supported number of table cache instances.
Definition: table_cache.h:173
Table_cache * get_cache(THD *thd)
Get instance of table cache to be used by particular connection.
Definition: table_cache.h:182
void free_table(THD *thd, enum_tdc_remove_table_type remove_type, TABLE_SHARE *share)
Remove and free all or some (depending on parameter) TABLE objects for the table from all table cache...
Definition: table_cache.cc:286
static const int DEFAULT_MAX_TABLE_CACHES
Default number of table cache instances.
Definition: table_cache.h:176
void assert_owner(THD *thd)
Assert that caller owns lock on the table cache.
Definition: table_cache.cc:250
void destroy()
Destroy all instances of table cache which were used by server.
Definition: table_cache.cc:203
Cache for open TABLE objects.
Definition: table_cache.h:68
TABLE * get_table(THD *thd, const char *key, size_t key_length, TABLE_SHARE **share)
Get an unused TABLE instance from the table cache.
Definition: table_cache.h:445
void lock()
Acquire lock on table cache instance.
Definition: table_cache.h:142
bool add_used_table(THD *thd, TABLE *table)
Add newly created TABLE object which is going to be used right away to the table cache.
Definition: table_cache.h:345
void unlock()
Release lock on table cache instance.
Definition: table_cache.h:144
bool init()
Initialize instance of table cache.
Definition: table_cache.cc:55
void release_table(THD *thd, TABLE *table)
Put used TABLE instance back to the table cache and mark it as unused.
Definition: table_cache.h:496
std::unordered_map< std::string, std::unique_ptr< Table_cache_element > > m_cache
The hash of Table_cache_element objects, each table/table share that has any TABLE object in the Tabl...
Definition: table_cache.h:102
void destroy()
Destroy instance of table cache.
Definition: table_cache.cc:64
mysql_mutex_t m_lock
The table cache lock protects the following data:
Definition: table_cache.h:93
uint m_table_count
Total number of TABLE instances for tables in this particular table cache (both in use by threads and...
Definition: table_cache.h:118
void assert_owner()
Assert that caller owns lock on the table cache.
Definition: table_cache.h:146
void free_all_unused_tables()
Free all unused TABLE objects in the table cache.
Definition: table_cache.cc:123
void check_unused()
Definition: table_cache.h:129
TABLE * m_unused_tables
List that contains all TABLE instances for tables in this particular table cache that are in not use ...
Definition: table_cache.h:110
void link_unused_table(TABLE *table)
Add table to the tail of unused tables list for table cache (i.e.
Definition: table_cache.h:281
static PSI_mutex_info m_mutex_keys[]
Definition: table_cache.h:122
static void init_psi_keys()
Init P_S instrumentation key for mutex protecting Table_cache instance.
Definition: table_cache.cc:68
void unlink_unused_table(TABLE *table)
Remove table from the unused tables list for table cache.
Definition: table_cache.h:294
uint cached_tables() const
Get number of TABLE instances in the cache.
Definition: table_cache.h:157
static PSI_mutex_key m_lock_key
Definition: table_cache.h:121
void print_tables()
Print debug information for the contents of the table cache.
Definition: table_cache.cc:138
void remove_table(TABLE *table)
Prepare used or unused TABLE instance for destruction by removing it from the table cache.
Definition: table_cache.h:393
void free_unused_tables_if_necessary(THD *thd)
Free unused TABLE instances if total number of TABLE objects in table cache has exceeded table_cache_...
Definition: table_cache.h:313
int ha_extra(enum ha_extra_function operation)
Request storage engine to do an extra operation: enable,disable or run some functionality.
Definition: handler.cc:8464
#define mysql_mutex_lock(M)
Definition: mysql_mutex.h:50
#define mysql_mutex_unlock(M)
Definition: mysql_mutex.h:57
Fido Client Authentication nullptr
Definition: fido_client_plugin.cc:222
mysql_mutex_t LOCK_open
LOCK_open protects the following variables/objects:
Definition: sql_base.cc:267
void intern_close_table(TABLE *table)
Definition: sql_base.cc:1118
unsigned int PSI_mutex_key
Instrumented mutex key.
Definition: psi_mutex_bits.h:52
#define mysql_mutex_assert_owner(M)
Wrapper, to use safe_mutex_assert_owner with instrumented mutexes.
Definition: mysql_mutex.h:112
This file includes constants used by all storage engines.
@ HA_EXTRA_IS_ATTACHED_CHILDREN
Definition: my_base.h:399
Defines various enable/disable and HAVE_ macros related to the performance schema instrumentation sys...
ABI for instrumented mutexes.
struct result result
Definition: result.h:34
Instrumentation helpers for mutexes.
Instrumentation helpers for mutexes.
required string key
Definition: replication_asynchronous_connection_failover.proto:60
enum_tdc_remove_table_type
Definition: sql_base.h:101
Hook class which via its methods specifies which members of T should be used for participating in a i...
Definition: sql_plist.h:198
const char * str
Definition: mysql_lex_string.h:41
size_t length
Definition: mysql_lex_string.h:42
Mutex information.
Definition: psi_mutex_bits.h:73
ulonglong table_open_cache_overflows
Definition: system_variables.h:542
This structure is shared between different table objects.
Definition: table.h:690
Table_cache_element ** cache_element
Array of table_cache_instances pointers to elements of table caches respresenting this table in each ...
Definition: table.h:741
LEX_CSTRING table_cache_key
Definition: table.h:773
bool has_old_version() const
Is this table share being expelled from the table definition cache?
Definition: table.h:1105
THD * in_use
The current session using this table object.
Definition: table.h:1437
uint db_stat
Definition: table.h:1708
TABLE * next
Definition: table.h:1402
handler * file
Definition: table.h:1401
TABLE * prev
Definition: table.h:1402
TABLE_SHARE * s
Definition: table.h:1400
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:50
ulong table_cache_instances
Definition: table_cache.h:51
Table_cache_manager table_cache_manager
Container for all table cache instances in the system.
Definition: table_cache.cc:40
ulong table_cache_size_per_instance
Definition: mysqld.cc:1332
unsigned int uint
Definition: uca9-dump.cc:75