Skip to content

Commit 9b40d87

Browse files
committed
Bug#12346211 PERF IMPACT OF PERFORMANCE-SCHEMA WITH DISABLED INSTRUMENTS/CONSUMERS
Not a fix. Instrumentation patch, to help investigations. The code can now be compiled with the added #defines: DISABLE_PSI_MUTEX DISABLE_PSI_RWLOCK DISABLE_PSI_COND DISABLE_PSI_FILE DISABLE_PSI_TABLE DISABLE_PSI_STAGE DISABLE_PSI_STATEMENT to avoid building with a given instrumentation. For example, to disable mutexes, add -DDISABLE_PSI_MUTEX to CFLAGS.
1 parent 74a6b0b commit 9b40d87

38 files changed

Lines changed: 561 additions & 395 deletions

include/mysql/psi/mysql_file.h

Lines changed: 150 additions & 125 deletions
Large diffs are not rendered by default.

include/mysql/psi/mysql_stage.h

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,36 @@
2929
@{
3030
*/
3131

32-
#ifdef HAVE_PSI_INTERFACE
32+
/**
33+
@def mysql_stage_register(P1, P2, P3)
34+
Stage registration.
35+
*/
36+
#ifdef HAVE_PSI_STAGE_INTERFACE
37+
#define mysql_stage_register(P1, P2, P3) \
38+
inline_mysql_stage_register(P1, P2, P3)
39+
#else
40+
#define mysql_stage_register(P1, P2, P3) \
41+
do {} while (0)
42+
#endif
43+
44+
#ifdef HAVE_PSI_STAGE_INTERFACE
3345
#define MYSQL_SET_STAGE(K, F, L) \
3446
inline_mysql_set_stage(K, F, L)
3547
#else
3648
#define MYSQL_SET_STAGE(K, F, L) \
3749
do {} while (0)
3850
#endif
3951

40-
#ifdef HAVE_PSI_INTERFACE
52+
#ifdef HAVE_PSI_STAGE_INTERFACE
53+
static inline void inline_mysql_stage_register(
54+
const char *category, PSI_stage_info **info, int count)
55+
{
56+
if (likely(PSI_server != NULL))
57+
PSI_server->register_stage(category, info, count);
58+
}
59+
#endif
60+
61+
#ifdef HAVE_PSI_STAGE_INTERFACE
4162
static inline void
4263
inline_mysql_set_stage(PSI_stage_key key,
4364
const char *src_file, int src_line)

include/mysql/psi/mysql_statement.h

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,63 +29,82 @@
2929
@{
3030
*/
3131

32-
#ifdef HAVE_PSI_INTERFACE
32+
/**
33+
@def mysql_statement_register(P1, P2, P3)
34+
Statement registration.
35+
*/
36+
#ifdef HAVE_PSI_STATEMENT_INTERFACE
37+
#define mysql_statement_register(P1, P2, P3) \
38+
inline_mysql_statement_register(P1, P2, P3)
39+
#else
40+
#define mysql_statement_register(P1, P2, P3) \
41+
do {} while (0)
42+
#endif
43+
44+
#ifdef HAVE_PSI_STATEMENT_INTERFACE
3345
#define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN) \
3446
inline_mysql_start_statement(STATE, K, DB, DB_LEN, __FILE__, __LINE__)
3547
#else
3648
#define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN) \
3749
NULL
3850
#endif
3951

40-
#ifdef HAVE_PSI_INTERFACE
52+
#ifdef HAVE_PSI_STATEMENT_INTERFACE
4153
#define MYSQL_REFINE_STATEMENT(LOCKER, K) \
4254
inline_mysql_refine_statement(LOCKER, K)
4355
#else
4456
#define MYSQL_REFINE_STATEMENT(LOCKER, K) \
4557
NULL
4658
#endif
4759

48-
#ifdef HAVE_PSI_INTERFACE
60+
#ifdef HAVE_PSI_STATEMENT_INTERFACE
4961
#define MYSQL_SET_STATEMENT_TEXT(LOCKER, P1, P2) \
5062
inline_mysql_set_statement_text(LOCKER, P1, P2)
5163
#else
5264
#define MYSQL_SET_STATEMENT_TEXT(LOCKER, P1, P2) \
5365
do {} while (0)
5466
#endif
5567

56-
#ifdef HAVE_PSI_INTERFACE
68+
#ifdef HAVE_PSI_STATEMENT_INTERFACE
5769
#define MYSQL_SET_STATEMENT_LOCK_TIME(LOCKER, P1) \
5870
inline_mysql_set_statement_lock_time(LOCKER, P1)
5971
#else
6072
#define MYSQL_SET_STATEMENT_LOCK_TIME(LOCKER, P1) \
6173
do {} while (0)
6274
#endif
6375

64-
#ifdef HAVE_PSI_INTERFACE
76+
#ifdef HAVE_PSI_STATEMENT_INTERFACE
6577
#define MYSQL_SET_STATEMENT_ROWS_SENT(LOCKER, P1) \
6678
inline_mysql_set_statement_rows_sent(LOCKER, P1)
6779
#else
6880
#define MYSQL_SET_STATEMENT_ROWS_SENT(LOCKER, P1) \
6981
do {} while (0)
7082
#endif
7183

72-
#ifdef HAVE_PSI_INTERFACE
84+
#ifdef HAVE_PSI_STATEMENT_INTERFACE
7385
#define MYSQL_SET_STATEMENT_ROWS_EXAMINED(LOCKER, P1) \
7486
inline_mysql_set_statement_rows_examined(LOCKER, P1)
7587
#else
7688
#define MYSQL_SET_STATEMENT_ROWS_EXAMINED(LOCKER, P1) \
7789
do {} while (0)
7890
#endif
7991

80-
#ifdef HAVE_PSI_INTERFACE
92+
#ifdef HAVE_PSI_STATEMENT_INTERFACE
8193
#define MYSQL_END_STATEMENT(LOCKER, DA) \
8294
inline_mysql_end_statement(LOCKER, DA)
8395
#else
8496
#define MYSQL_END_STATEMENT(LOCKER, DA) \
8597
do {} while (0)
8698
#endif
8799

88-
#ifdef HAVE_PSI_INTERFACE
100+
#ifdef HAVE_PSI_STATEMENT_INTERFACE
101+
static inline void inline_mysql_statement_register(
102+
const char *category, PSI_statement_info *info, int count)
103+
{
104+
if (likely(PSI_server != NULL))
105+
PSI_server->register_statement(category, info, count);
106+
}
107+
89108
static inline struct PSI_statement_locker *
90109
inline_mysql_start_statement(PSI_statement_locker_state *state,
91110
PSI_statement_key key,

include/mysql/psi/mysql_table.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
@sa MYSQL_START_TABLE_LOCK_WAIT.
4242
@sa MYSQL_END_TABLE_LOCK_WAIT.
4343
*/
44-
#ifdef HAVE_PSI_INTERFACE
44+
#ifdef HAVE_PSI_TABLE_INTERFACE
4545
#define MYSQL_TABLE_WAIT_VARIABLES(LOCKER, STATE) \
4646
struct PSI_table_locker* LOCKER; \
4747
PSI_table_locker_state STATE;
@@ -61,7 +61,7 @@
6161
@param FLAGS per table operation flags.
6262
@sa MYSQL_END_TABLE_WAIT.
6363
*/
64-
#ifdef HAVE_PSI_INTERFACE
64+
#ifdef HAVE_PSI_TABLE_INTERFACE
6565
#define MYSQL_START_TABLE_IO_WAIT(LOCKER, STATE, PSI, OP, INDEX, FLAGS) \
6666
LOCKER= inline_mysql_start_table_io_wait(STATE, PSI, \
6767
OP, INDEX, __FILE__, __LINE__)
@@ -77,15 +77,15 @@
7777
@param LOCKER the locker
7878
@sa MYSQL_START_TABLE_IO_WAIT.
7979
*/
80-
#ifdef HAVE_PSI_INTERFACE
80+
#ifdef HAVE_PSI_TABLE_INTERFACE
8181
#define MYSQL_END_TABLE_IO_WAIT(LOCKER) \
8282
inline_mysql_end_table_io_wait(LOCKER)
8383
#else
8484
#define MYSQL_END_TABLE_IO_WAIT(LOCKER) \
8585
do {} while (0)
8686
#endif
8787

88-
#ifdef HAVE_PSI_INTERFACE
88+
#ifdef HAVE_PSI_TABLE_INTERFACE
8989
/**
9090
Instrumentation calls for MYSQL_START_TABLE_IO_WAIT.
9191
@sa MYSQL_END_TABLE_IO_WAIT.
@@ -130,7 +130,7 @@ inline_mysql_end_table_io_wait(struct PSI_table_locker *locker)
130130
@param FLAGS per table operation flags.
131131
@sa MYSQL_END_TABLE_LOCK_WAIT.
132132
*/
133-
#ifdef HAVE_PSI_INTERFACE
133+
#ifdef HAVE_PSI_TABLE_INTERFACE
134134
#define MYSQL_START_TABLE_LOCK_WAIT(LOCKER, STATE, PSI, OP, FLAGS) \
135135
LOCKER= inline_mysql_start_table_lock_wait(STATE, PSI, \
136136
OP, FLAGS, __FILE__, __LINE__)
@@ -146,15 +146,15 @@ inline_mysql_end_table_io_wait(struct PSI_table_locker *locker)
146146
@param LOCKER the locker
147147
@sa MYSQL_START_TABLE_LOCK_WAIT.
148148
*/
149-
#ifdef HAVE_PSI_INTERFACE
149+
#ifdef HAVE_PSI_TABLE_INTERFACE
150150
#define MYSQL_END_TABLE_LOCK_WAIT(LOCKER) \
151151
inline_mysql_end_table_lock_wait(LOCKER)
152152
#else
153153
#define MYSQL_END_TABLE_LOCK_WAIT(LOCKER) \
154154
do {} while (0)
155155
#endif
156156

157-
#ifdef HAVE_PSI_INTERFACE
157+
#ifdef HAVE_PSI_TABLE_INTERFACE
158158
/**
159159
Instrumentation calls for MYSQL_START_TABLE_LOCK_WAIT.
160160
@sa MYSQL_END_TABLE_LOCK_WAIT.

0 commit comments

Comments
 (0)