23#ifndef TABLE_CACHE_INCLUDED
24#define TABLE_CACHE_INCLUDED
31#include <unordered_map>
101 std::unordered_map<std::string, std::unique_ptr<Table_cache_element>>
m_cache;
119#ifdef HAVE_PSI_INTERFACE
349 assert(
table->in_use == thd);
366 const std::string
key(
table->s->table_cache_key.str,
367 table->s->table_cache_key.length);
371 m_cache.emplace(
key, std::unique_ptr<Table_cache_element>(el));
412 const std::string
key(
table->s->table_cache_key.str,
413 table->s->table_cache_key.length);
452 const std::string key_str(
key, key_length);
453 const auto el_it =
m_cache.find(key_str);
454 if (el_it ==
m_cache.end())
return nullptr;
460 assert(!
table->in_use);
501 assert(
table->in_use);
505 assert(!
table->s->has_old_version());
507 table->in_use =
nullptr;
529 : share(share_arg), current_cache_index(0), current_table(
nullptr) {
Iterator for I_P_List.
Definition: sql_plist.h:167
Intrusive parameterized list.
Definition: sql_plist.h:74
void remove(T *a)
Definition: sql_plist.h:123
bool is_empty() const
Definition: sql_plist.h:89
T * front()
Definition: sql_plist.h:132
void push_front(T *a)
Definition: sql_plist.h:90
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:33
my_thread_id thread_id() const
Definition: sql_class.h:2488
struct System_status_var status_var
Definition: sql_class.h:1118
Element that represents the table in the specific table cache.
Definition: table_cache.h:228
TABLE_SHARE * get_share() const
Definition: table_cache.h:245
Table_cache_element(TABLE_SHARE *share_arg)
Definition: table_cache.h:243
TABLE_list used_tables
Definition: table_cache.h:238
I_P_List< TABLE, I_P_List_adapter< TABLE, &TABLE::cache_next, &TABLE::cache_prev > > TABLE_list
Definition: table_cache.h:236
TABLE_list free_tables
Definition: table_cache.h:239
TABLE_SHARE * share
Definition: table_cache.h:240
Iterator which allows to go through all used TABLE instances for the table in all table caches.
Definition: table_cache.h:257
const TABLE_SHARE * share
Definition: table_cache.h:258
Table_cache_iterator(const TABLE_SHARE *share_arg)
Construct iterator over all used TABLE objects for the table share.
Definition: table_cache.h:528
uint current_cache_index
Definition: table_cache.h:259
void move_to_next_table()
Helper that moves iterator to the next used TABLE for the table share.
Definition: table_cache.h:536
TABLE * current_table
Definition: table_cache.h:260
void rewind()
Definition: table_cache.h:572
TABLE * operator++(int)
Get current used TABLE instance and move iterator to the next one.
Definition: table_cache.h:552
Container class for all table cache instances in the system.
Definition: table_cache.h:169
Table_cache m_table_cache[MAX_TABLE_CACHES]
An array of Table_cache instances.
Definition: table_cache.h:214
uint cached_tables()
Get total number of used and unused TABLE objects in all table caches.
Definition: table_cache.cc:213
void unlock_all_and_tdc()
Release locks on all instances of table cache and table definition cache.
Definition: table_cache.cc:238
void print_tables()
Print debug information for the contents of all table cache instances.
Definition: table_cache.cc:348
void lock_all_and_tdc()
Acquire locks on all instances of table cache and table definition cache (i.e.
Definition: table_cache.cc:227
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:268
bool init()
Initialize all instances of table cache to be used by server.
Definition: table_cache.cc:188
uint cache_index(Table_cache *cache) const
Get index for the table cache in container.
Definition: table_cache.h:186
void assert_owner_all()
Assert that caller owns locks on all instances of table cache.
Definition: table_cache.cc:258
void free_all_unused_tables()
Free all unused TABLE objects in all table cache instances.
Definition: table_cache.cc:336
static const int MAX_TABLE_CACHES
Maximum supported number of table cache instances.
Definition: table_cache.h:172
Table_cache * get_cache(THD *thd)
Get instance of table cache to be used by particular connection.
Definition: table_cache.h:181
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:285
static const int DEFAULT_MAX_TABLE_CACHES
Default number of table cache instances.
Definition: table_cache.h:175
void assert_owner(THD *thd)
Assert that caller owns lock on the table cache.
Definition: table_cache.cc:249
void destroy()
Destroy all instances of table cache which were used by server.
Definition: table_cache.cc:202
Cache for open TABLE objects.
Definition: table_cache.h:67
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:444
void lock()
Acquire lock on table cache instance.
Definition: table_cache.h:141
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:344
void unlock()
Release lock on table cache instance.
Definition: table_cache.h:143
bool init()
Initialize instance of table cache.
Definition: table_cache.cc:54
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:495
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:101
void destroy()
Destroy instance of table cache.
Definition: table_cache.cc:63
mysql_mutex_t m_lock
The table cache lock protects the following data:
Definition: table_cache.h:92
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:117
void assert_owner()
Assert that caller owns lock on the table cache.
Definition: table_cache.h:145
void free_all_unused_tables()
Free all unused TABLE objects in the table cache.
Definition: table_cache.cc:122
void check_unused()
Definition: table_cache.h:128
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:109
void link_unused_table(TABLE *table)
Add table to the tail of unused tables list for table cache (i.e.
Definition: table_cache.h:280
static PSI_mutex_info m_mutex_keys[]
Definition: table_cache.h:121
static void init_psi_keys()
Init P_S instrumentation key for mutex protecting Table_cache instance.
Definition: table_cache.cc:67
void unlink_unused_table(TABLE *table)
Remove table from the unused tables list for table cache.
Definition: table_cache.h:293
uint cached_tables() const
Get number of TABLE instances in the cache.
Definition: table_cache.h:156
static PSI_mutex_key m_lock_key
Definition: table_cache.h:120
void print_tables()
Print debug information for the contents of the table cache.
Definition: table_cache.cc:137
void remove_table(TABLE *table)
Prepare used or unused TABLE instance for destruction by removing it from the table cache.
Definition: table_cache.h:392
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:312
#define mysql_mutex_lock(M)
Definition: mysql_mutex.h:49
#define mysql_mutex_unlock(M)
Definition: mysql_mutex.h:56
Fido Client Authentication nullptr
Definition: fido_client_plugin.cc:221
mysql_mutex_t LOCK_open
LOCK_open protects the following variables/objects:
Definition: sql_base.cc:274
void intern_close_table(TABLE *table)
Definition: sql_base.cc:1137
unsigned int PSI_mutex_key
Instrumented mutex key.
Definition: psi_mutex_bits.h:51
#define mysql_mutex_assert_owner(M)
Wrapper, to use safe_mutex_assert_owner with instrumented mutexes.
Definition: mysql_mutex.h:111
This file includes constants used by all storage engines.
@ HA_EXTRA_IS_ATTACHED_CHILDREN
Definition: my_base.h:398
Defines various enable/disable and HAVE_ macros related to the performance schema instrumentation sys...
ABI for instrumented mutexes.
static PFS_engine_table_share_proxy table
Definition: pfs.cc:60
struct result result
Definition: result.h:33
Instrumentation helpers for mutexes.
Instrumentation helpers for mutexes.
required string key
Definition: replication_asynchronous_connection_failover.proto:59
enum_tdc_remove_table_type
Definition: sql_base.h:99
Hook class which via its methods specifies which members of T should be used for participating in a i...
Definition: sql_plist.h:197
Mutex information.
Definition: psi_mutex_bits.h:72
ulonglong table_open_cache_overflows
Definition: system_variables.h:541
This structure is shared between different table objects.
Definition: table.h:691
Table_cache_element ** cache_element
Array of table_cache_instances pointers to elements of table caches respresenting this table in each ...
Definition: table.h:736
TABLE * next
Definition: table.h:1397
TABLE * prev
Definition: table.h:1397
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:49
ulong table_cache_instances
Definition: table_cache.h:50
Table_cache_manager table_cache_manager
Container for all table cache instances in the system.
Definition: table_cache.cc:39
ulong table_cache_size_per_instance
Definition: mysqld.cc:1339