139#include <sys/types.h>
153#define SYSTEM_VARIABLE_PREALLOC 200
258template <
class Var_type>
461template <
class Var_type>
468template <
class Var_type>
470 if (unsafe_thd ==
nullptr) {
479 m_thd_finder.set_unsafe_thd(unsafe_thd);
483template <
class Var_type>
485 assert(pfs_thread !=
nullptr);
486 return get_THD(pfs_thread->
m_thd);
493template <
class Var_type>
499 return do_initialize_session();
506template <
class Var_type>
515 return do_initialize_session();
521template <
class Var_type>
523 if (is_materialized()) {
527 return do_materialize_global();
533template <
class Var_type>
539 if (is_materialized(unsafe_thd)) {
543 return do_materialize_all(unsafe_thd);
549template <
class Var_type>
555 if (is_materialized(unsafe_thd)) {
559 return do_materialize_session(unsafe_thd);
565template <
class Var_type>
572 if (is_materialized(pfs_thread)) {
580 m_use_mem_root = use_mem_root;
582 return do_materialize_session(pfs_thread);
588template <
class Var_type>
601 return do_materialize_session(pfs_thread, index);
745 bool nested_array,
bool strict);
Base class to find specific thd from the thd list.
Definition: mysqld_thd_manager.h:63
Get and lock a validated THD from the thread manager.
Definition: pfs_variable.h:243
THD * m_unsafe_thd
Definition: pfs_variable.h:252
void set_unsafe_thd(THD *unsafe_thd)
Definition: pfs_variable.h:249
Find_THD_variable()
Definition: pfs_variable.h:245
Find_THD_variable(THD *unsafe_thd)
Definition: pfs_variable.h:246
bool operator()(THD *thd) override
Override this operator to provide implementation to find specific thd.
Definition: pfs_variable.cc:55
static Global_THD_manager * get_instance()
Retrieves singleton instance.
Definition: mysqld_thd_manager.h:212
THD_ptr find_thd(Find_THD_Impl *func)
Returns a THD_ptr containing first THD for which operator() returns true.
Definition: mysqld_thd_manager.cc:317
Status variable cache.
Definition: pfs_variable.h:679
int do_materialize_client(PFS_client *pfs_client)
Build cache of SESSION status variables using the status values provided.
Definition: pfs_variable.cc:1357
void expand_show_var_array(const SHOW_VAR *show_var_array, const char *prefix, bool strict)
Expand a nested sub array of status variables, indicated by a type of SHOW_ARRAY.
Definition: pfs_variable.cc:1069
bool filter_by_name(const SHOW_VAR *show_var)
Definition: pfs_variable.cc:931
int do_materialize_all(THD *thd) override
Build GLOBAL and SESSION status variable cache using values for a non-instrumented thread.
Definition: pfs_variable.cc:1220
bool m_show_command
Definition: pfs_variable.h:695
int materialize_host(PFS_host *pfs_host)
Build cache of SESSION status variables for a host.
Definition: pfs_variable.cc:857
bool do_initialize_session(void) override
Build an internal SHOW_VAR array from the external status variable array.
Definition: pfs_variable.cc:1134
int do_materialize_global(void) override
Build cache for GLOBAL status variables using values totaled from all threads.
Definition: pfs_variable.cc:1168
int do_materialize_session(THD *thd) override
Build SESSION status variable cache using values for a non-instrumented thread.
Definition: pfs_variable.cc:1267
bool can_aggregate(enum_mysql_show_type variable_type)
Check that the variable type is aggregatable.
Definition: pfs_variable.cc:952
char * make_show_var_name(const char *prefix, const char *name, char *name_buf, size_t buf_len)
Build the complete status variable name, with prefix.
Definition: pfs_variable.cc:1097
void(* m_sum_client_status)(PFS_client *pfs_client, System_status_var *status_totals)
Definition: pfs_variable.h:709
int do_materialize_session(PFS_thread *, uint) override
Definition: pfs_variable.h:705
PFS_status_variable_cache(bool external_init)
CLASS PFS_status_variable_cache.
Definition: pfs_variable.cc:825
bool filter_show_var(const SHOW_VAR *show_var, bool strict)
Check if a status variable should be excluded from the query.
Definition: pfs_variable.cc:999
int materialize_account(PFS_account *pfs_account)
Build cache of SESSION status variables for an account.
Definition: pfs_variable.cc:878
int materialize_user(PFS_user *pfs_user)
Build cache of SESSION status variables for a user.
Definition: pfs_variable.cc:836
virtual PFS_client * get_pfs(PFS_thread *)
Definition: pfs_variable.h:692
void manifest(THD *thd, const SHOW_VAR *show_var_array, System_status_var *status_var_array, const char *prefix, bool nested_array, bool strict)
Definition: pfs_variable.cc:1398
bool init_show_var_array(enum_var_type scope, bool strict)
Build an array of SHOW_VARs from the global status array.
Definition: pfs_variable.cc:1025
System_status_var * set_status_vars(void)
For the current THD, use initial_status_vars taken from before the query start.
Definition: pfs_variable.cc:1153
bool match_scope(SHOW_SCOPE variable_scope, bool strict)
Compare status variable scope to desired scope.
Definition: pfs_variable.cc:901
ulonglong get_status_array_version(void)
Definition: pfs_variable.h:687
Persisted variables cache.
Definition: pfs_variable.h:665
int do_materialize_all(THD *thd) override
CLASS PFS_system_persisted_variables_cache.
Definition: pfs_variable.cc:503
~PFS_system_persisted_variables_cache() override=default
PFS_system_persisted_variables_cache(bool external_init)
Definition: pfs_variable.h:667
System variable cache.
Definition: pfs_variable.h:607
ulonglong get_sysvar_hash_version(void)
Definition: pfs_variable.h:611
int do_materialize_session(THD *thd) override
Build a SESSION system variable cache for a THD.
Definition: pfs_variable.cc:394
int do_materialize_global(void) override
Build a GLOBAL system variable cache.
Definition: pfs_variable.cc:158
MEM_ROOT m_mem_sysvar
Definition: pfs_variable.h:627
bool init_show_var_array(enum_var_type scope, bool strict)
Build a sorted list of all system variables from the system variable hash.
Definition: pfs_variable.cc:89
MEM_ROOT * m_mem_sysvar_ptr
Definition: pfs_variable.h:633
MEM_ROOT ** m_mem_thd
Definition: pfs_variable.h:629
PFS_system_variable_cache(bool external_init)
Definition: pfs_variable.cc:79
~PFS_system_variable_cache() override
Definition: pfs_variable.h:612
int do_materialize_all(THD *thd) override
Build a GLOBAL and SESSION system variable cache.
Definition: pfs_variable.cc:197
MEM_ROOT * m_mem_thd_save
Definition: pfs_variable.h:631
void set_mem_root(void)
Allocate and assign mem_root for system variable materialization.
Definition: pfs_variable.cc:247
void clear_mem_root(void)
Mark memory blocks in the temporary mem_root as free.
Definition: pfs_variable.cc:261
bool match_scope(int scope)
Match system variable scope to desired scope.
Definition: pfs_variable.cc:134
bool do_initialize_session(void) override
Build an array of SHOW_VARs from the system variable hash.
Definition: pfs_variable.cc:120
void free_mem_root(void)
Free the temporary mem_root.
Definition: pfs_variable.cc:274
System variable info cache.
Definition: pfs_variable.h:651
int do_materialize_all(THD *thd) override
CLASS PFS_system_variable_info_cache.
Definition: pfs_variable.cc:450
PFS_system_variable_info_cache(bool external_init)
Definition: pfs_variable.h:653
~PFS_system_variable_info_cache() override=default
Base class for a system or status variable cache.
Definition: pfs_variable.h:259
virtual int do_materialize_session(PFS_thread *)
Definition: pfs_variable.h:402
THD_ptr get_THD(THD *thd)
Get a validated THD from the thread manager.
Definition: pfs_variable.h:469
bool m_materialized
Definition: pfs_variable.h:437
PFS_client * m_pfs_client
Definition: pfs_variable.h:419
THD * m_unsafe_thd
Definition: pfs_variable.h:410
bool is_materialized(PFS_client *pfs_client)
True if variables have been materialized for given PFS_user/host/account.
Definition: pfs_variable.h:366
virtual int do_materialize_session(THD *)
Definition: pfs_variable.h:401
ulonglong m_version
Definition: pfs_variable.h:446
virtual int do_materialize_all(THD *)
Definition: pfs_variable.h:400
virtual bool do_initialize_session(void)
Definition: pfs_variable.h:398
PFS_thread * m_pfs_thread
Definition: pfs_variable.h:416
bool m_external_init
Definition: pfs_variable.h:434
int materialize_session(PFS_thread *pfs_thread, uint index)
Cache a single SESSION variable for an instrumented thread.
Definition: pfs_variable.h:589
bool is_materialized(PFS_user *pfs_user)
True if variables have been materialized for given PFS_user.
Definition: pfs_variable.h:342
bool is_materialized(PFS_thread *pfs_thread)
True if variables have been materialized for given PFS_thread.
Definition: pfs_variable.h:335
bool m_use_mem_root
Definition: pfs_variable.h:452
Variable_array m_cache
Definition: pfs_variable.h:425
int materialize_session(THD *thd)
Build cache of SESSION variables for a non-instrumented thread.
Definition: pfs_variable.h:550
THD_ptr get_THD(PFS_thread *pfs_thread)
Definition: pfs_variable.h:484
PFS_variable_cache(bool external_init)
Definition: pfs_variable.cc:61
THD * m_current_thd
Definition: pfs_variable.h:413
int materialize_user(PFS_user *pfs_user)
Build cache of SESSION status variables for a user.
bool is_materialized(void)
True if variables have been materialized.
Definition: pfs_variable.h:323
Prealloced_array< Var_type, SYSTEM_VARIABLE_PREALLOC > Variable_array
Definition: pfs_variable.h:261
uint size()
Number of elements in the cache.
Definition: pfs_variable.h:394
virtual int do_materialize_session(PFS_thread *, uint)
Definition: pfs_variable.h:403
int materialize_global()
Build cache of GLOBAL system or status variables.
Definition: pfs_variable.h:522
Show_var_array m_show_var_array
Definition: pfs_variable.h:440
int materialize_session(PFS_thread *pfs_thread, bool use_mem_root=false)
Build cache of SESSION variables for an instrumented thread.
Definition: pfs_variable.h:566
THD * m_safe_thd
Definition: pfs_variable.h:407
virtual ~PFS_variable_cache()=0
Destructor.
bool initialize_session(void)
Build array of SHOW_VARs from the external variable source.
Definition: pfs_variable.h:494
bool is_materialized(PFS_host *pfs_host)
True if variables have been materialized for given PFS_host.
Definition: pfs_variable.h:350
const Var_type * get(uint index=0) const
Get a single variable from the cache.
Definition: pfs_variable.h:382
int materialize_host(PFS_host *pfs_host)
Build cache of SESSION status variables for a host.
bool is_materialized(PFS_account *pfs_account)
True if variables have been materialized for given PFS_account.
Definition: pfs_variable.h:358
virtual bool do_initialize_global(void)
Definition: pfs_variable.h:397
virtual int do_materialize_global(void)
Definition: pfs_variable.h:399
Find_THD_variable m_thd_finder
Definition: pfs_variable.h:422
bool m_initialized
Definition: pfs_variable.h:428
System_variable_tracker::Array m_sys_var_tracker_array
Definition: pfs_variable.h:443
bool initialize_client_session(void)
Build array of SHOW_VARs suitable for aggregation by user, host or account.
Definition: pfs_variable.h:507
enum_var_type m_query_scope
Definition: pfs_variable.h:449
bool is_materialized(THD *unsafe_thd)
True if variables have been materialized for given THD.
Definition: pfs_variable.h:328
int materialize_account(PFS_account *pfs_account)
Build cache of SESSION status variables for an account.
bool m_aggregate
Definition: pfs_variable.h:455
int materialize_all(THD *thd)
Build cache of GLOBAL and SESSION variables for a non-instrumented thread.
Definition: pfs_variable.h:534
Element_type & at(size_t n)
Definition: prealloced_array.h:230
size_t size() const
Definition: prealloced_array.h:226
Status variable derived from SHOW_VAR.
Definition: pfs_variable.h:209
bool m_initialized
Definition: pfs_variable.h:235
bool is_null() const
Definition: pfs_variable.h:223
size_t m_name_length
Definition: pfs_variable.h:227
Status_variable()
Definition: pfs_variable.h:211
void init(const SHOW_VAR *show_var, System_status_var *status_array, enum_var_type query_scope)
Resolve status value, convert to string.
Definition: pfs_variable.cc:1483
size_t m_value_length
Definition: pfs_variable.h:229
char m_value_str[SHOW_VAR_FUNC_BUFF_SIZE+1]
Definition: pfs_variable.h:228
SHOW_SCOPE m_scope
Definition: pfs_variable.h:231
const CHARSET_INFO * m_charset
Definition: pfs_variable.h:232
const char * m_name
Definition: pfs_variable.h:226
SHOW_TYPE m_type
Definition: pfs_variable.h:230
System variable derived from sys_var object.
Definition: pfs_variable.h:170
size_t m_value_length
Definition: pfs_variable.h:183
size_t m_path_length
Definition: pfs_variable.h:189
char m_set_user_str[USERNAME_LENGTH]
Definition: pfs_variable.h:195
char m_set_host_str[HOSTNAME_LENGTH]
Definition: pfs_variable.h:197
bool m_initialized
Definition: pfs_variable.h:201
void init(THD *thd, const SHOW_VAR *show_var, enum_var_type query_scope)
Get sys_var value from global or local source then convert to string.
Definition: pfs_variable.cc:681
char m_min_value_str[SHOW_VAR_FUNC_BUFF_SIZE+1]
Definition: pfs_variable.h:190
const char * m_name
Definition: pfs_variable.h:180
size_t m_set_host_str_length
Definition: pfs_variable.h:198
int m_scope
Definition: pfs_variable.h:185
char m_value_str[SHOW_VAR_FUNC_BUFF_SIZE+1]
Definition: pfs_variable.h:182
bool is_null() const
Definition: pfs_variable.h:177
char m_max_value_str[SHOW_VAR_FUNC_BUFF_SIZE+1]
Definition: pfs_variable.h:192
enum_mysql_show_type m_type
Definition: pfs_variable.h:184
enum_variable_source m_source
Definition: pfs_variable.h:187
size_t m_name_length
Definition: pfs_variable.h:181
size_t m_min_value_length
Definition: pfs_variable.h:191
ulonglong m_set_time
Definition: pfs_variable.h:194
char m_path_str[SHOW_VAR_FUNC_BUFF_SIZE+1]
Definition: pfs_variable.h:188
const CHARSET_INFO * m_charset
Definition: pfs_variable.h:186
System_variable()
CLASS System_variable.
Definition: pfs_variable.cc:600
size_t m_set_user_str_length
Definition: pfs_variable.h:196
size_t m_max_value_length
Definition: pfs_variable.h:193
This class encapsulates THD instance, controls access to the actual THD.
Definition: mysqld_thd_manager.h:97
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:33
const char * p
Definition: ctype-mb.cc:1236
Fido Client Authentication nullptr
Definition: fido_client_plugin.cc:221
static constexpr int HOSTNAME_LENGTH
Definition: my_hostname.h:42
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:55
#define USERNAME_LENGTH
Definition: mysql_com.h:68
Performance schema account (declarations).
Performance schema host (declarations).
Performance schema instruments (declarations).
Performance schema user (declarations).
void sum_host_status(PFS_client *pfs_host, System_status_var *status_totals)
Definition: pfs_variable.cc:1524
bool status_vars_inited
Definition: sql_show.cc:3144
Status_var_array all_status_vars
void sum_user_status(PFS_client *pfs_user, System_status_var *status_totals)
Definition: pfs_variable.cc:1513
static const uint SYSVAR_MEMROOT_BLOCK_SIZE
Definition: pfs_variable.h:159
void sum_account_status(PFS_client *pfs_account, System_status_var *status_totals)
Definition: pfs_variable.cc:1536
Prealloced_array< SHOW_VAR, SYSTEM_VARIABLE_PREALLOC > Show_var_array
Definition: pfs_variable.h:154
PFS_connection_slice PFS_client
Definition: pfs_variable.h:164
void status_variable_warning(void)
Warning issued if the global status variable array changes during a query.
Definition: pfs_variable.cc:1570
std::vector< SHOW_VAR > Status_var_array
Definition: pfs_variable.h:150
mysql_mutex_t LOCK_plugin_delete
Definition: sql_plugin.cc:437
void system_variable_warning(void)
Warning issued if the version of the system variable hash table changes during a query.
Definition: pfs_variable.cc:1559
"public" interface to sys_var - server configuration variables.
enum enum_mysql_show_type SHOW_TYPE
Definition: set_var.h:72
enum enum_mysql_show_scope SHOW_SCOPE
Definition: set_var.h:73
enum_var_type
Definition: set_var.h:89
std::vector< SHOW_VAR > Status_var_array
Definition: sql_show.cc:3141
case opt name
Definition: sslopt-case.h:32
enum_mysql_show_type
Declarations for SHOW STATUS support in plugins.
Definition: status_var.h:29
@ SHOW_UNDEF
Definition: status_var.h:30
#define SHOW_VAR_FUNC_BUFF_SIZE
Definition: status_var.h:86
@ SHOW_SCOPE_UNDEF
Definition: status_var.h:68
Definition: m_ctype.h:382
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:82
Per account statistics.
Definition: pfs_account.h:66
A connection slice, an arbitrary grouping of several connections.
Definition: pfs_con_slice.h:53
Per host statistics.
Definition: pfs_host.h:63
Instrumented thread implementation.
Definition: pfs_instr.h:372
pfs_lock m_lock
Internal lock.
Definition: pfs_instr.h:456
THD * m_thd
Definition: pfs_instr.h:643
Per user statistics.
Definition: pfs_user.h:62
SHOW STATUS Server status variable.
Definition: status_var.h:78
Per thread status variables.
Definition: system_variables.h:510
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:49
bool is_populated(void)
Returns true if the record contains values that can be read.
Definition: pfs_lock.h:186
enum_variable_source
This enum values define how system variables are set.
Definition: system_variable_source_type.h:32
unsigned int uint
Definition: uca-dump.cc:29