139#include <sys/types.h>
151#define SYSTEM_VARIABLE_PREALLOC 200
256template <
class Var_type>
380 const Var_type *
get(uint index = 0)
const {
459template <
class Var_type>
466template <
class Var_type>
468 if (unsafe_thd ==
nullptr) {
477 m_thd_finder.set_unsafe_thd(unsafe_thd);
481template <
class Var_type>
483 assert(pfs_thread !=
nullptr);
484 return get_THD(pfs_thread->
m_thd);
491template <
class Var_type>
497 return do_initialize_session();
504template <
class Var_type>
513 return do_initialize_session();
519template <
class Var_type>
521 if (is_materialized()) {
525 return do_materialize_global();
531template <
class Var_type>
537 if (is_materialized(unsafe_thd)) {
541 return do_materialize_all(unsafe_thd);
547template <
class Var_type>
553 if (is_materialized(unsafe_thd)) {
557 return do_materialize_session(unsafe_thd);
563template <
class Var_type>
570 if (is_materialized(pfs_thread)) {
578 m_use_mem_root = use_mem_root;
580 return do_materialize_session(pfs_thread);
586template <
class Var_type>
599 return do_materialize_session(pfs_thread, index);
743 bool nested_array,
bool strict);
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:250
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:241
THD * m_unsafe_thd
Definition: pfs_variable.h:250
void set_unsafe_thd(THD *unsafe_thd)
Definition: pfs_variable.h:247
Find_THD_variable()
Definition: pfs_variable.h:243
Find_THD_variable(THD *unsafe_thd)
Definition: pfs_variable.h:244
bool operator()(THD *thd) override
Override this operator to provide implementation to find specific thd.
Definition: pfs_variable.cc:54
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:330
Status variable cache.
Definition: pfs_variable.h:677
int do_materialize_client(PFS_client *pfs_client)
Build cache of SESSION status variables using the status values provided.
Definition: pfs_variable.cc:1366
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:1075
bool filter_by_name(const SHOW_VAR *show_var)
Definition: pfs_variable.cc:940
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:1226
bool m_show_command
Definition: pfs_variable.h:693
int materialize_host(PFS_host *pfs_host)
Build cache of SESSION status variables for a host.
Definition: pfs_variable.cc:866
bool do_initialize_session() override
Build an internal SHOW_VAR array from the external status variable array.
Definition: pfs_variable.cc:1140
int do_materialize_session(THD *thd) override
Build SESSION status variable cache using values for a non-instrumented thread.
Definition: pfs_variable.cc:1274
bool can_aggregate(enum_mysql_show_type variable_type)
Check that the variable type is aggregatable.
Definition: pfs_variable.cc:961
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:1103
void(* m_sum_client_status)(PFS_client *pfs_client, System_status_var *status_totals)
Definition: pfs_variable.h:707
int do_materialize_session(PFS_thread *, uint) override
Definition: pfs_variable.h:703
PFS_status_variable_cache(bool external_init)
CLASS PFS_status_variable_cache.
Definition: pfs_variable.cc:834
ulonglong get_status_array_version()
Definition: pfs_variable.h:685
void manifest(THD *thd, const SHOW_VAR *show_var_array, System_status_var *status_vars, const char *prefix, bool nested_array, bool strict)
Definition: pfs_variable.cc:1407
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:1008
int materialize_account(PFS_account *pfs_account)
Build cache of SESSION status variables for an account.
Definition: pfs_variable.cc:887
int materialize_user(PFS_user *pfs_user)
Build cache of SESSION status variables for a user.
Definition: pfs_variable.cc:845
virtual PFS_client * get_pfs(PFS_thread *)
Definition: pfs_variable.h:690
int do_materialize_global() override
Build cache for GLOBAL status variables using values totaled from all threads.
Definition: pfs_variable.cc:1174
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:1034
bool match_scope(SHOW_SCOPE variable_scope, bool strict)
Compare status variable scope to desired scope.
Definition: pfs_variable.cc:910
System_status_var * set_status_vars()
For the current THD, use initial_status_vars taken from before the query start.
Definition: pfs_variable.cc:1159
Persisted variables cache.
Definition: pfs_variable.h:663
int do_materialize_all(THD *thd) override
CLASS PFS_system_persisted_variables_cache.
Definition: pfs_variable.cc:511
~PFS_system_persisted_variables_cache() override=default
PFS_system_persisted_variables_cache(bool external_init)
Definition: pfs_variable.h:665
System variable cache.
Definition: pfs_variable.h:605
int do_materialize_session(THD *thd) override
Build a SESSION system variable cache for a THD.
Definition: pfs_variable.cc:399
void set_mem_root()
Allocate and assign mem_root for system variable materialization.
Definition: pfs_variable.cc:248
MEM_ROOT m_mem_sysvar
Definition: pfs_variable.h:625
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:88
MEM_ROOT * m_mem_sysvar_ptr
Definition: pfs_variable.h:631
MEM_ROOT ** m_mem_thd
Definition: pfs_variable.h:627
void free_mem_root()
Free the temporary mem_root.
Definition: pfs_variable.cc:275
PFS_system_variable_cache(bool external_init)
Definition: pfs_variable.cc:78
~PFS_system_variable_cache() override
Definition: pfs_variable.h:610
ulonglong get_sysvar_hash_version()
Definition: pfs_variable.h:609
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:629
int do_materialize_global() override
Build a GLOBAL system variable cache.
Definition: pfs_variable.cc:157
bool match_scope(int scope)
Match system variable scope to desired scope.
Definition: pfs_variable.cc:133
void clear_mem_root()
Mark memory blocks in the temporary mem_root as free.
Definition: pfs_variable.cc:262
bool do_initialize_session() override
Build an array of SHOW_VARs from the system variable hash.
Definition: pfs_variable.cc:119
System variable info cache.
Definition: pfs_variable.h:649
int do_materialize_all(THD *thd) override
CLASS PFS_system_variable_info_cache.
Definition: pfs_variable.cc:457
PFS_system_variable_info_cache(bool external_init)
Definition: pfs_variable.h:651
~PFS_system_variable_info_cache() override=default
Base class for a system or status variable cache.
Definition: pfs_variable.h:257
virtual int do_materialize_session(PFS_thread *)
Definition: pfs_variable.h:400
THD_ptr get_THD(THD *thd)
Get a validated THD from the thread manager.
Definition: pfs_variable.h:467
bool is_materialized()
True if variables have been materialized.
Definition: pfs_variable.h:321
bool m_materialized
Definition: pfs_variable.h:435
PFS_client * m_pfs_client
Definition: pfs_variable.h:417
bool initialize_session()
Build array of SHOW_VARs from the external variable source.
Definition: pfs_variable.h:492
THD * m_unsafe_thd
Definition: pfs_variable.h:408
bool is_materialized(PFS_client *pfs_client)
True if variables have been materialized for given PFS_user/host/account.
Definition: pfs_variable.h:364
virtual int do_materialize_session(THD *)
Definition: pfs_variable.h:399
virtual int do_materialize_global()
Definition: pfs_variable.h:397
ulonglong m_version
Definition: pfs_variable.h:444
virtual int do_materialize_all(THD *)
Definition: pfs_variable.h:398
bool initialize_client_session()
Build array of SHOW_VARs suitable for aggregation by user, host or account.
Definition: pfs_variable.h:505
PFS_thread * m_pfs_thread
Definition: pfs_variable.h:414
bool m_external_init
Definition: pfs_variable.h:432
int materialize_session(PFS_thread *pfs_thread, uint index)
Cache a single SESSION variable for an instrumented thread.
Definition: pfs_variable.h:587
bool is_materialized(PFS_user *pfs_user)
True if variables have been materialized for given PFS_user.
Definition: pfs_variable.h:340
bool is_materialized(PFS_thread *pfs_thread)
True if variables have been materialized for given PFS_thread.
Definition: pfs_variable.h:333
bool m_use_mem_root
Definition: pfs_variable.h:450
Variable_array m_cache
Definition: pfs_variable.h:423
int materialize_session(THD *thd)
Build cache of SESSION variables for a non-instrumented thread.
Definition: pfs_variable.h:548
THD_ptr get_THD(PFS_thread *pfs_thread)
Definition: pfs_variable.h:482
PFS_variable_cache(bool external_init)
Definition: pfs_variable.cc:60
THD * m_current_thd
Definition: pfs_variable.h:411
int materialize_user(PFS_user *pfs_user)
Build cache of SESSION status variables for a user.
Prealloced_array< Var_type, SYSTEM_VARIABLE_PREALLOC > Variable_array
Definition: pfs_variable.h:259
uint size()
Number of elements in the cache.
Definition: pfs_variable.h:392
virtual int do_materialize_session(PFS_thread *, uint)
Definition: pfs_variable.h:401
int materialize_global()
Build cache of GLOBAL system or status variables.
Definition: pfs_variable.h:520
Show_var_array m_show_var_array
Definition: pfs_variable.h:438
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:564
THD * m_safe_thd
Definition: pfs_variable.h:405
virtual ~PFS_variable_cache()=0
Destructor.
virtual bool do_initialize_session()
Definition: pfs_variable.h:396
bool is_materialized(PFS_host *pfs_host)
True if variables have been materialized for given PFS_host.
Definition: pfs_variable.h:348
const Var_type * get(uint index=0) const
Get a single variable from the cache.
Definition: pfs_variable.h:380
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:356
Find_THD_variable m_thd_finder
Definition: pfs_variable.h:420
bool m_initialized
Definition: pfs_variable.h:426
System_variable_tracker::Array m_sys_var_tracker_array
Definition: pfs_variable.h:441
enum_var_type m_query_scope
Definition: pfs_variable.h:447
bool is_materialized(THD *unsafe_thd)
True if variables have been materialized for given THD.
Definition: pfs_variable.h:326
int materialize_account(PFS_account *pfs_account)
Build cache of SESSION status variables for an account.
bool m_aggregate
Definition: pfs_variable.h:453
virtual bool do_initialize_global()
Definition: pfs_variable.h:395
int materialize_all(THD *thd)
Build cache of GLOBAL and SESSION variables for a non-instrumented thread.
Definition: pfs_variable.h:532
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:207
bool m_initialized
Definition: pfs_variable.h:233
bool is_null() const
Definition: pfs_variable.h:221
size_t m_name_length
Definition: pfs_variable.h:225
Status_variable()
Definition: pfs_variable.h:209
size_t m_value_length
Definition: pfs_variable.h:227
char m_value_str[SHOW_VAR_FUNC_BUFF_SIZE+1]
Definition: pfs_variable.h:226
SHOW_SCOPE m_scope
Definition: pfs_variable.h:229
void init(const SHOW_VAR *show_var, System_status_var *status_vars, enum_var_type query_scope)
Resolve status value, convert to string.
Definition: pfs_variable.cc:1493
const CHARSET_INFO * m_charset
Definition: pfs_variable.h:230
const char * m_name
Definition: pfs_variable.h:224
SHOW_TYPE m_type
Definition: pfs_variable.h:228
System variable derived from sys_var object.
Definition: pfs_variable.h:168
size_t m_value_length
Definition: pfs_variable.h:181
size_t m_path_length
Definition: pfs_variable.h:187
char m_set_user_str[USERNAME_LENGTH]
Definition: pfs_variable.h:193
char m_set_host_str[HOSTNAME_LENGTH]
Definition: pfs_variable.h:195
bool m_initialized
Definition: pfs_variable.h:199
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:690
char m_min_value_str[SHOW_VAR_FUNC_BUFF_SIZE+1]
Definition: pfs_variable.h:188
const char * m_name
Definition: pfs_variable.h:178
size_t m_set_host_str_length
Definition: pfs_variable.h:196
int m_scope
Definition: pfs_variable.h:183
char m_value_str[SHOW_VAR_FUNC_BUFF_SIZE+1]
Definition: pfs_variable.h:180
bool is_null() const
Definition: pfs_variable.h:175
char m_max_value_str[SHOW_VAR_FUNC_BUFF_SIZE+1]
Definition: pfs_variable.h:190
enum_mysql_show_type m_type
Definition: pfs_variable.h:182
enum_variable_source m_source
Definition: pfs_variable.h:185
size_t m_name_length
Definition: pfs_variable.h:179
size_t m_min_value_length
Definition: pfs_variable.h:189
ulonglong m_set_time
Definition: pfs_variable.h:192
char m_path_str[SHOW_VAR_FUNC_BUFF_SIZE+1]
Definition: pfs_variable.h:186
const CHARSET_INFO * m_charset
Definition: pfs_variable.h:184
System_variable()
CLASS System_variable.
Definition: pfs_variable.cc:609
size_t m_set_user_str_length
Definition: pfs_variable.h:194
size_t m_max_value_length
Definition: pfs_variable.h:191
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:35
const char * p
Definition: ctype-mb.cc:1234
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
SHOW_VAR status_vars[]
Definition: mysqld.cc:11443
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:1534
bool status_vars_inited
Definition: sql_show.cc:3231
Status_var_array all_status_vars
void sum_user_status(PFS_client *pfs_user, System_status_var *status_totals)
Definition: pfs_variable.cc:1523
static const uint SYSVAR_MEMROOT_BLOCK_SIZE
Definition: pfs_variable.h:157
void status_variable_warning()
Warning issued if the global status variable array changes during a query.
Definition: pfs_variable.cc:1580
void system_variable_warning()
Warning issued if the version of the system variable hash table changes during a query.
Definition: pfs_variable.cc:1569
void sum_account_status(PFS_client *pfs_account, System_status_var *status_totals)
Definition: pfs_variable.cc:1546
Prealloced_array< SHOW_VAR, SYSTEM_VARIABLE_PREALLOC > Show_var_array
Definition: pfs_variable.h:152
PFS_connection_slice PFS_client
Definition: pfs_variable.h:162
std::vector< SHOW_VAR > Status_var_array
Definition: pfs_variable.h:148
mysql_mutex_t LOCK_plugin_delete
Definition: sql_plugin.cc:441
"public" interface to sys_var - server configuration variables.
enum enum_mysql_show_type SHOW_TYPE
Definition: set_var.h:73
enum enum_mysql_show_scope SHOW_SCOPE
Definition: set_var.h:74
enum_var_type
Definition: set_var.h:90
std::vector< SHOW_VAR > Status_var_array
Definition: sql_show.cc:3228
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:422
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:374
pfs_lock m_lock
Internal lock.
Definition: pfs_instr.h:458
THD * m_thd
Definition: pfs_instr.h:645
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:523
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:49
bool is_populated()
Returns true if the record contains values that can be read.
Definition: pfs_lock.h:188
enum_variable_source
This enum values define how system variables are set.
Definition: system_variable_source_type.h:32