46#define PROFILE_NONE (uint)0
47#define PROFILE_CPU (uint)(1 << 0)
48#define PROFILE_MEMORY (uint)(1 << 1)
49#define PROFILE_BLOCK_IO (uint)(1 << 2)
50#define PROFILE_CONTEXT (uint)(1 << 3)
51#define PROFILE_PAGE_FAULTS (uint)(1 << 4)
52#define PROFILE_IPC (uint)(1 << 5)
53#define PROFILE_SWAPS (uint)(1 << 6)
54#define PROFILE_SOURCE (uint)(1 << 16)
55#define PROFILE_ALL (uint)(~0)
57#if defined(ENABLED_PROFILING)
59#ifdef HAVE_SYS_RESOURCE_H
60#include <sys/resource.h>
110 if (
last !=
nullptr) {
115 new_item->
next =
nullptr;
125 if (
first ==
nullptr) {
126 DBUG_PRINT(
"warning", (
"tried to pop nonexistent item from Queue"));
156 return ((
struct queue_item *)current)->payload;
173 FILETIME ftKernel, ftUser;
176 const char *
function;
184 void set_label(
const char *status_arg,
const char *function_arg,
185 const char *file_arg,
unsigned int line_arg);
188 const char *function_arg,
const char *file_arg,
189 unsigned int line_arg);
215 void set_query_source(
const char *query_source_arg,
size_t query_length_arg);
218 void new_status(
const char *status_arg,
const char *function_arg,
219 const char *file_arg,
unsigned int line_arg);
247 void set_query_source(
const char *query_source_arg,
size_t query_length_arg);
255 void status_change(
const char *status_arg,
const char *function_arg,
256 const char *file_arg,
unsigned int line_arg);
int64 query_id_t
Definition: binlog.h:71
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:932
Profiling state for a single THD; contains multiple QUERY_PROFILE objects.
Definition: sql_profile.h:225
void discard_current_query()
Throw away the current profile, because it's useless or unwanted or corrupted.
Definition: sql_profile.cc:392
void set_thd(THD *thd_arg)
Definition: sql_profile.h:258
void status_change(const char *status_arg, const char *function_arg, const char *file_arg, unsigned int line_arg)
A new state is given, and that signals the profiler to start a new timed step for the current query's...
Definition: sql_profile.cc:349
void cleanup()
Clear all the profiling information.
Definition: sql_profile.cc:697
bool enabled
Definition: sql_profile.h:236
bool show_profiles()
Definition: sql_profile.cc:431
bool keeping
Definition: sql_profile.h:235
query_id_t profile_id_counter
Definition: sql_profile.h:233
THD * thd
Definition: sql_profile.h:234
void finish_current_query()
Try to save the current profile entry, clean up the data if it shouldn't be saved,...
Definition: sql_profile.cc:404
int fill_statistics_info(THD *thd, Table_ref *tables)
Fill the information schema table, "query_profile", as defined in show.cc .
Definition: sql_profile.cc:501
Queue< QUERY_PROFILE > history
Definition: sql_profile.h:240
~PROFILING()
Definition: sql_profile.cc:334
QUERY_PROFILE * current
Definition: sql_profile.h:238
void set_query_source(const char *query_source_arg, size_t query_length_arg)
At a point in execution where we know the query source, save the text of it in the query profile.
Definition: sql_profile.cc:484
PROFILING()
Definition: sql_profile.cc:331
void start_new_query(const char *initial_state="starting")
Prepare to start processing a new query.
Definition: sql_profile.cc:369
QUERY_PROFILE * last
Definition: sql_profile.h:239
query_id_t next_profile_id()
Definition: sql_profile.h:242
A single entry in a single profile.
Definition: sql_profile.h:163
PROF_MEASUREMENT(QUERY_PROFILE *profile_arg, const char *status_arg)
Definition: sql_profile.cc:190
double time_usecs
Definition: sql_profile.h:181
void collect()
This updates the statistics for this moment of time.
Definition: sql_profile.cc:263
~PROF_MEASUREMENT()
Definition: sql_profile.cc:206
struct rusage rusage
Definition: sql_profile.h:171
ulong m_seq
Definition: sql_profile.h:180
void set_label(const char *status_arg, const char *function_arg, const char *file_arg, unsigned int line_arg)
Definition: sql_profile.cc:211
const char * file
Definition: sql_profile.h:177
QUERY_PROFILE * profile
Definition: sql_profile.h:168
char * allocated_status_memory
Definition: sql_profile.h:182
const char * status
Definition: sql_profile.h:169
unsigned int line
Definition: sql_profile.h:178
The full profile for a single query, and includes multiple PROF_MEASUREMENT objects.
Definition: sql_profile.h:198
void set_query_source(const char *query_source_arg, size_t query_length_arg)
Definition: sql_profile.cc:297
double m_start_time_usecs
Definition: sql_profile.h:207
~QUERY_PROFILE()
Definition: sql_profile.cc:288
query_id_t profiling_query_id
Definition: sql_profile.h:204
QUERY_PROFILE(PROFILING *profiling_arg, const char *status_arg)
Definition: sql_profile.cc:276
LEX_STRING m_query_source
Definition: sql_profile.h:205
void new_status(const char *status_arg, const char *function_arg, const char *file_arg, unsigned int line_arg)
Definition: sql_profile.cc:310
Queue< PROF_MEASUREMENT > entries
Definition: sql_profile.h:210
ulong m_seq_counter
Definition: sql_profile.h:209
PROFILING * profiling
Definition: sql_profile.h:202
double m_end_time_usecs
Definition: sql_profile.h:208
Implements a persistent FIFO using server List method names.
Definition: sql_profile.h:75
void * iterator_next(void *current)
Definition: sql_profile.h:151
struct queue_item * first
Definition: sql_profile.h:82
ulong elements
Definition: sql_profile.h:99
bool is_empty()
Definition: sql_profile.h:143
void push_back(T *payload)
Definition: sql_profile.h:101
struct queue_item * last
Definition: sql_profile.h:82
void empty()
Definition: sql_profile.h:90
T * iterator_value(void *current)
Definition: sql_profile.h:155
Queue()
Definition: sql_profile.h:85
void * new_iterator()
Definition: sql_profile.h:149
T * pop()
Definition: sql_profile.h:121
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:35
unsigned int PSI_memory_key
Instrumented memory key.
Definition: psi_memory_bits.h:48
#define DBUG_PRINT(keyword, arglist)
Definition: my_dbug.h:180
Some integer typedefs for easier portability.
int64_t int64
Definition: my_inttypes.h:67
#define MYF(v)
Definition: my_inttypes.h:96
void * my_malloc(PSI_memory_key key, size_t size, int flags)
Allocates size bytes of memory.
Definition: my_memory.cc:56
void my_free(void *ptr)
Frees the memory pointed by the ptr.
Definition: my_memory.cc:80
int64 query_id_t
Definition: sql_profile.h:38
PSI_memory_key key_memory_queue_item
Definition: psi_memory_key.cc:129
int make_profile_table_for_show(THD *thd, ST_SCHEMA_TABLE *schema_table)
Definition: sql_profile.cc:126
ST_FIELD_INFO query_profile_statistics_info[]
Definition: sql_profile.cc:100
int fill_query_profile_statistics_info(THD *thd, Table_ref *tables, Item *)
Connects Information_Schema and Profiling.
Definition: sql_profile.cc:82
Definition: mysql_lex_string.h:34
Definition: sql_profile.h:77
struct queue_item * previous
Definition: sql_profile.h:79
T * payload
Definition: sql_profile.h:78
struct queue_item * next
Definition: sql_profile.h:79
#define NULL
Definition: types.h:54