24#ifndef TABLE_CACHE_INCLUDED
25#define TABLE_CACHE_INCLUDED
32#include <unordered_map>
104 std::unordered_map<std::string, std::unique_ptr<Table_cache_element>>
m_cache;
122#ifdef HAVE_PSI_INTERFACE
354 assert(
table->in_use == thd);
371 const std::string
key(
table->s->table_cache_key.str,
372 table->s->table_cache_key.length);
376 m_cache.emplace(
key, std::unique_ptr<Table_cache_element>(el));
417 const std::string
key(
table->s->table_cache_key.str,
418 table->s->table_cache_key.length);
457 const std::string key_str(
key, key_length);
458 const auto el_it =
m_cache.find(key_str);
459 if (el_it ==
m_cache.end())
return nullptr;
465 assert(!
table->in_use);
506 assert(
table->in_use);
510 assert(!
table->s->has_old_version());
512 table->in_use =
nullptr;
534 : share(share_arg), current_cache_index(0), current_table(
nullptr) {
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:251
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:36
my_thread_id thread_id() const
Definition: sql_class.h:2534
struct System_status_var status_var
Definition: sql_class.h:1147
Element that represents the table in the specific table cache.
Definition: table_cache.h:231
TABLE_SHARE * get_share() const
Definition: table_cache.h:248
Table_cache_element(TABLE_SHARE *share_arg)
Definition: table_cache.h:246
TABLE_list used_tables
Definition: table_cache.h:241
I_P_List< TABLE, I_P_List_adapter< TABLE, &TABLE::cache_next, &TABLE::cache_prev > > TABLE_list
Definition: table_cache.h:239
TABLE_list free_tables
Definition: table_cache.h:242
TABLE_SHARE * share
Definition: table_cache.h:243
Iterator which allows to go through all used TABLE instances for the table in all table caches.
Definition: table_cache.h:260
const TABLE_SHARE * share
Definition: table_cache.h:261
Table_cache_iterator(const TABLE_SHARE *share_arg)
Construct iterator over all used TABLE objects for the table share.
Definition: table_cache.h:533
uint current_cache_index
Definition: table_cache.h:262
void move_to_next_table()
Helper that moves iterator to the next used TABLE for the table share.
Definition: table_cache.h:541
TABLE * current_table
Definition: table_cache.h:263
void rewind()
Definition: table_cache.h:577
TABLE * operator++(int)
Get current used TABLE instance and move iterator to the next one.
Definition: table_cache.h:557
Container class for all table cache instances in the system.
Definition: table_cache.h:172
Table_cache m_table_cache[MAX_TABLE_CACHES]
An array of Table_cache instances.
Definition: table_cache.h:217
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:189
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:175
Table_cache * get_cache(THD *thd)
Get instance of table cache to be used by particular connection.
Definition: table_cache.h:184
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:178
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:70
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:449
void lock()
Acquire lock on table cache instance.
Definition: table_cache.h:144
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:349
void unlock()
Release lock on table cache instance.
Definition: table_cache.h:146
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:500
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:104
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:95
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:120
void assert_owner()
Assert that caller owns lock on the table cache.
Definition: table_cache.h:148
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:131
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:112
void link_unused_table(TABLE *table)
Add table to the tail of unused tables list for table cache (i.e.
Definition: table_cache.h:283
static PSI_mutex_info m_mutex_keys[]
Definition: table_cache.h:124
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:296
uint cached_tables() const
Get number of TABLE instances in the cache.
Definition: table_cache.h:159
static PSI_mutex_key m_lock_key
Definition: table_cache.h:123
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:397
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:315
#define mysql_mutex_lock(M)
Definition: mysql_mutex.h:50
#define mysql_mutex_unlock(M)
Definition: mysql_mutex.h:57
mysql_mutex_t LOCK_open
LOCK_open protects the following variables/objects:
Definition: sql_base.cc:276
void intern_close_table(TABLE *table)
Definition: sql_base.cc:1191
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:400
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:61
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
Mutex information.
Definition: psi_mutex_bits.h:73
ulonglong table_open_cache_overflows
Definition: system_variables.h:556
This structure is shared between different table objects.
Definition: table.h:701
Table_cache_element ** cache_element
Array of table_cache_instances pointers to elements of table caches respresenting this table in each ...
Definition: table.h:746
TABLE * next
Definition: table.h:1409
TABLE * prev
Definition: table.h:1409
std::atomic_uint64_t table_open_cache_overflows
Definition: aggregated_stats_buffer.h:60
To facilitate calculating values of status variables aggregated per all THDs in real-time,...
Definition: aggregated_stats.h:39
aggregated_stats_buffer & get_shard(my_thread_id thread_id)
Definition: aggregated_stats.h:42
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:50
ulong table_cache_instances
Definition: table_cache.h:52
struct aggregated_stats global_aggregated_stats
Definition: mysqld.cc:1538
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:1343