Skip to content
This repository was archived by the owner on Mar 1, 2026. It is now read-only.

Commit af20272

Browse files
committed
WL#14432 Session memory limits in performance schema
Approved by: Chris Powers <chris.powers@oracle.com> Approved by: Miroslav Rajcic <miroslav.rajcic@oracle.com> Change-Id: I22e0a67f5ffdfd27274d1cc7ff419d8379465340
1 parent 05ce43f commit af20272

143 files changed

Lines changed: 3109 additions & 893 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎include/mysql/components/services/bits/psi_statement_bits.h‎

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,30 +49,37 @@ typedef unsigned int PSI_statement_key;
4949
/**
5050
@def PSI_STATEMENT_VERSION_1
5151
Performance Schema Statement Interface number for version 1.
52-
This version is deprecated.
52+
This version is obsolete.
5353
*/
5454
#define PSI_STATEMENT_VERSION_1 1
5555

5656
/**
5757
@def PSI_STATEMENT_VERSION_2
5858
Performance Schema Statement Interface number for version 2.
59-
This version is deprecated.
59+
This version is obsolete.
6060
*/
6161
#define PSI_STATEMENT_VERSION_2 2
6262

6363
/**
6464
@def PSI_STATEMENT_VERSION_3
6565
Performance Schema Statement Interface number for version 3.
66-
This version is supported.
66+
This version is obsolete.
6767
*/
6868
#define PSI_STATEMENT_VERSION_3 3
6969

70+
/**
71+
@def PSI_STATEMENT_VERSION_4
72+
Performance Schema Statement Interface number for version 4.
73+
This version is supported.
74+
*/
75+
#define PSI_STATEMENT_VERSION_4 4
76+
7077
/**
7178
@def PSI_CURRENT_STATEMENT_VERSION
7279
Performance Schema Statement Interface number for the most recent version.
73-
The most current version is @c PSI_STATEMENT_VERSION_3
80+
The most current version is @c PSI_STATEMENT_VERSION_4
7481
*/
75-
#define PSI_CURRENT_STATEMENT_VERSION 3
82+
#define PSI_CURRENT_STATEMENT_VERSION 4
7683

7784
/**
7885
Interface for an instrumented statement.
@@ -133,16 +140,15 @@ typedef struct PSI_statement_info_v1 PSI_statement_info_v1;
133140
#define PSI_SCHEMA_NAME_LEN (64 * 3)
134141

135142
/**
136-
State data storage for @c get_thread_statement_locker_v1_t,
137-
@c get_thread_statement_locker_v1_t.
143+
State data storage for @c get_thread_statement_locker_v4_t.
138144
This structure provide temporary storage to a statement locker.
139145
The content of this structure is considered opaque,
140146
the fields are only hints of what an implementation
141147
of the psi interface can use.
142148
This memory is provided by the instrumented code for performance reasons.
143-
@sa get_thread_statement_locker_v1_t
149+
@sa get_thread_statement_locker_v4_t
144150
*/
145-
struct PSI_statement_locker_state_v1 {
151+
struct PSI_statement_locker_state_v4 {
146152
/** Discarded flag. */
147153
bool m_discarded;
148154
/** In prepare flag. */
@@ -161,6 +167,14 @@ struct PSI_statement_locker_state_v1 {
161167
unsigned long long m_timer_start;
162168
/** THREAD CPU time start. */
163169
unsigned long long m_cpu_time_start;
170+
/** State temporary data for CONTROLLED_MEMORY. */
171+
size_t m_controlled_local_size_start;
172+
/** State temporary data for MAX_CONTROLLED_MEMORY. */
173+
size_t m_controlled_stmt_size_start;
174+
/** State temporary data for TOTAL_MEMORY. */
175+
size_t m_total_local_size_start;
176+
/** State temporary data for MAX_TOTAL_MEMORY. */
177+
size_t m_total_stmt_size_start;
164178
/** Internal data. */
165179
void *m_statement;
166180
/** Locked time. */
@@ -209,7 +223,7 @@ struct PSI_statement_locker_state_v1 {
209223
PSI_sp_share *m_parent_sp_share;
210224
PSI_prepared_stmt *m_parent_prepared_stmt;
211225
};
212-
typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state_v1;
226+
typedef struct PSI_statement_locker_state_v4 PSI_statement_locker_state_v4;
213227

214228
struct PSI_sp_locker_state_v1 {
215229
/** Internal state. */
@@ -243,8 +257,8 @@ typedef void (*register_statement_v1_t)(const char *category,
243257
@param sp_share Parent stored procedure share, if any.
244258
@return a statement locker, or NULL
245259
*/
246-
typedef struct PSI_statement_locker *(*get_thread_statement_locker_v1_t)(
247-
struct PSI_statement_locker_state_v1 *state, PSI_statement_key key,
260+
typedef struct PSI_statement_locker *(*get_thread_statement_locker_v4_t)(
261+
struct PSI_statement_locker_state_v4 *state, PSI_statement_key key,
248262
const void *charset, PSI_sp_share *sp_share);
249263

250264
/**
@@ -533,7 +547,7 @@ typedef void (*drop_sp_v1_t)(unsigned int object_type, const char *schema_name,
533547
unsigned int object_name_length);
534548

535549
typedef struct PSI_statement_info_v1 PSI_statement_info;
536-
typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state;
550+
typedef struct PSI_statement_locker_state_v4 PSI_statement_locker_state;
537551
typedef struct PSI_sp_locker_state_v1 PSI_sp_locker_state;
538552

539553
/** @} (end of group psi_abi_statement) */

‎include/mysql/components/services/psi_statement.h‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@
2626
#include <mysql/components/component_implementation.h>
2727
#include <mysql/components/services/psi_statement_service.h>
2828

29-
#define REQUIRES_PSI_STATEMENT_SERVICE REQUIRES_SERVICE(psi_statement_v3)
29+
#define REQUIRES_PSI_STATEMENT_SERVICE REQUIRES_SERVICE(psi_statement_v4)
3030
#define REQUIRES_PSI_STATEMENT_SERVICE_PLACEHOLDER \
31-
REQUIRES_SERVICE_PLACEHOLDER(psi_statement_v3)
31+
REQUIRES_SERVICE_PLACEHOLDER(psi_statement_v4)
3232

3333
extern REQUIRES_PSI_STATEMENT_SERVICE_PLACEHOLDER;
3434

35-
#define PSI_STATEMENT_CALL(M) mysql_service_psi_statement_v3->M
35+
#define PSI_STATEMENT_CALL(M) mysql_service_psi_statement_v4->M
3636

3737
#endif /* COMPONENTS_SERVICES_PSI_STATEMENT_H */

‎include/mysql/components/services/psi_statement_service.h‎

Lines changed: 17 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -30,182 +30,38 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
3030
Version 1.
3131
Introduced in MySQL 8.0.3
3232
Deprecated in MySQL 8.0.14
33-
Status: Deprecated, use version 2 instead.
34-
Maintained for binary compatibility of components
35-
built against headers from MySQL 8.0.3 -- 8.0.13
33+
Obsoleted in MySQL 8.0.31
34+
Status: Obsolete, use version 4 instead.
3635
*/
3736

38-
BEGIN_SERVICE_DEFINITION(psi_statement_v1)
39-
/** @sa register_statement_v1_t. */
40-
register_statement_v1_t register_statement;
41-
/** @sa get_thread_statement_locker_v1_t. */
42-
get_thread_statement_locker_v1_t get_thread_statement_locker;
43-
/** @sa refine_statement_v1_t. */
44-
refine_statement_v1_t refine_statement;
45-
/** @sa start_statement_v1_t. */
46-
start_statement_v1_t start_statement;
47-
/** @sa set_statement_text_v1_t. */
48-
set_statement_text_v1_t set_statement_text;
49-
/** @sa set_statement_lock_time_t. */
50-
set_statement_lock_time_t set_statement_lock_time;
51-
/** @sa set_statement_rows_sent_t. */
52-
set_statement_rows_sent_t set_statement_rows_sent;
53-
/** @sa set_statement_rows_examined_t. */
54-
set_statement_rows_examined_t set_statement_rows_examined;
55-
/** @sa inc_statement_created_tmp_disk_tables. */
56-
inc_statement_created_tmp_disk_tables_t inc_statement_created_tmp_disk_tables;
57-
/** @sa inc_statement_created_tmp_tables. */
58-
inc_statement_created_tmp_tables_t inc_statement_created_tmp_tables;
59-
/** @sa inc_statement_select_full_join. */
60-
inc_statement_select_full_join_t inc_statement_select_full_join;
61-
/** @sa inc_statement_select_full_range_join. */
62-
inc_statement_select_full_range_join_t inc_statement_select_full_range_join;
63-
/** @sa inc_statement_select_range. */
64-
inc_statement_select_range_t inc_statement_select_range;
65-
/** @sa inc_statement_select_range_check. */
66-
inc_statement_select_range_check_t inc_statement_select_range_check;
67-
/** @sa inc_statement_select_scan. */
68-
inc_statement_select_scan_t inc_statement_select_scan;
69-
/** @sa inc_statement_sort_merge_passes. */
70-
inc_statement_sort_merge_passes_t inc_statement_sort_merge_passes;
71-
/** @sa inc_statement_sort_range. */
72-
inc_statement_sort_range_t inc_statement_sort_range;
73-
/** @sa inc_statement_sort_rows. */
74-
inc_statement_sort_rows_t inc_statement_sort_rows;
75-
/** @sa inc_statement_sort_scan. */
76-
inc_statement_sort_scan_t inc_statement_sort_scan;
77-
/** @sa set_statement_no_index_used. */
78-
set_statement_no_index_used_t set_statement_no_index_used;
79-
/** @sa set_statement_no_good_index_used. */
80-
set_statement_no_good_index_used_t set_statement_no_good_index_used;
81-
/** @sa end_statement_v1_t. */
82-
end_statement_v1_t end_statement;
83-
84-
/** @sa create_prepared_stmt_v1_t. */
85-
create_prepared_stmt_v1_t create_prepared_stmt;
86-
/** @sa destroy_prepared_stmt_v1_t. */
87-
destroy_prepared_stmt_v1_t destroy_prepared_stmt;
88-
/** @sa reprepare_prepared_stmt_v1_t. */
89-
reprepare_prepared_stmt_v1_t reprepare_prepared_stmt;
90-
/** @sa execute_prepared_stmt_v1_t. */
91-
execute_prepared_stmt_v1_t execute_prepared_stmt;
92-
/** @sa set_prepared_stmt_text_v1_t. */
93-
set_prepared_stmt_text_v1_t set_prepared_stmt_text;
94-
95-
/** @sa digest_start_v1_t. */
96-
digest_start_v1_t digest_start;
97-
/** @sa digest_end_v1_t. */
98-
digest_end_v1_t digest_end;
99-
100-
/** @sa get_sp_share_v1_t. */
101-
get_sp_share_v1_t get_sp_share;
102-
/** @sa release_sp_share_v1_t. */
103-
release_sp_share_v1_t release_sp_share;
104-
/** @sa start_sp_v1_t. */
105-
start_sp_v1_t start_sp;
106-
/** @sa start_sp_v1_t. */
107-
end_sp_v1_t end_sp;
108-
/** @sa drop_sp_v1_t. */
109-
drop_sp_v1_t drop_sp;
110-
END_SERVICE_DEFINITION(psi_statement_v1)
111-
11237
/*
11338
Version 2.
11439
Introduced in MySQL 8.0.14
11540
Deprecated in MySQL 8.0.28
116-
Status: Deprecated, use version 3 instead.
117-
Maintained for binary compatibility of components
118-
built against headers from MySQL 8.0.14 -- 8.0.27
41+
Obsoleted in MySQL 8.0.31
42+
Status: Obsolete, use version 4 instead.
11943
*/
120-
BEGIN_SERVICE_DEFINITION(psi_statement_v2)
121-
/** @sa register_statement_v1_t. */
122-
register_statement_v1_t register_statement;
123-
/** @sa get_thread_statement_locker_v1_t. */
124-
get_thread_statement_locker_v1_t get_thread_statement_locker;
125-
/** @sa refine_statement_v1_t. */
126-
refine_statement_v1_t refine_statement;
127-
/** @sa start_statement_v1_t. */
128-
start_statement_v1_t start_statement;
129-
/** @sa set_statement_text_v1_t. */
130-
set_statement_text_v1_t set_statement_text;
131-
/** @sa set_statement_query_id_t. */
132-
set_statement_query_id_t set_statement_query_id;
133-
/** @sa set_statement_lock_time_t. */
134-
set_statement_lock_time_t set_statement_lock_time;
135-
/** @sa set_statement_rows_sent_t. */
136-
set_statement_rows_sent_t set_statement_rows_sent;
137-
/** @sa set_statement_rows_examined_t. */
138-
set_statement_rows_examined_t set_statement_rows_examined;
139-
/** @sa inc_statement_created_tmp_disk_tables. */
140-
inc_statement_created_tmp_disk_tables_t inc_statement_created_tmp_disk_tables;
141-
/** @sa inc_statement_created_tmp_tables. */
142-
inc_statement_created_tmp_tables_t inc_statement_created_tmp_tables;
143-
/** @sa inc_statement_select_full_join. */
144-
inc_statement_select_full_join_t inc_statement_select_full_join;
145-
/** @sa inc_statement_select_full_range_join. */
146-
inc_statement_select_full_range_join_t inc_statement_select_full_range_join;
147-
/** @sa inc_statement_select_range. */
148-
inc_statement_select_range_t inc_statement_select_range;
149-
/** @sa inc_statement_select_range_check. */
150-
inc_statement_select_range_check_t inc_statement_select_range_check;
151-
/** @sa inc_statement_select_scan. */
152-
inc_statement_select_scan_t inc_statement_select_scan;
153-
/** @sa inc_statement_sort_merge_passes. */
154-
inc_statement_sort_merge_passes_t inc_statement_sort_merge_passes;
155-
/** @sa inc_statement_sort_range. */
156-
inc_statement_sort_range_t inc_statement_sort_range;
157-
/** @sa inc_statement_sort_rows. */
158-
inc_statement_sort_rows_t inc_statement_sort_rows;
159-
/** @sa inc_statement_sort_scan. */
160-
inc_statement_sort_scan_t inc_statement_sort_scan;
161-
/** @sa set_statement_no_index_used. */
162-
set_statement_no_index_used_t set_statement_no_index_used;
163-
/** @sa set_statement_no_good_index_used. */
164-
set_statement_no_good_index_used_t set_statement_no_good_index_used;
165-
/** @sa end_statement_v1_t. */
166-
end_statement_v1_t end_statement;
167-
168-
/** @sa create_prepared_stmt_v1_t. */
169-
create_prepared_stmt_v1_t create_prepared_stmt;
170-
/** @sa destroy_prepared_stmt_v1_t. */
171-
destroy_prepared_stmt_v1_t destroy_prepared_stmt;
172-
/** @sa reprepare_prepared_stmt_v1_t. */
173-
reprepare_prepared_stmt_v1_t reprepare_prepared_stmt;
174-
/** @sa execute_prepared_stmt_v1_t. */
175-
execute_prepared_stmt_v1_t execute_prepared_stmt;
176-
/** @sa set_prepared_stmt_text_v1_t. */
177-
set_prepared_stmt_text_v1_t set_prepared_stmt_text;
178-
179-
/** @sa digest_start_v1_t. */
180-
digest_start_v1_t digest_start;
181-
/** @sa digest_end_v1_t. */
182-
digest_end_v1_t digest_end;
183-
184-
/** @sa get_sp_share_v1_t. */
185-
get_sp_share_v1_t get_sp_share;
186-
/** @sa release_sp_share_v1_t. */
187-
release_sp_share_v1_t release_sp_share;
188-
/** @sa start_sp_v1_t. */
189-
start_sp_v1_t start_sp;
190-
/** @sa start_sp_v1_t. */
191-
end_sp_v1_t end_sp;
192-
/** @sa drop_sp_v1_t. */
193-
drop_sp_v1_t drop_sp;
194-
END_SERVICE_DEFINITION(psi_statement_v2)
19544

19645
/*
19746
Version 3.
19847
Introduced in MySQL 8.0.28
48+
Obsoleted in MySQL 8.0.31
49+
Status: Obsolete, use version 4 instead.
50+
*/
51+
52+
/*
53+
Version 4.
54+
Introduced in MySQL 8.0.31
19955
Status: active
200-
Changes compared to version 2:
201-
- added set_statement_secondary_engine
202-
- added set_prepared_stmt_secondary_engine
56+
Changes compared to version 3:
57+
- get_thread_statement_locker_v4_t,
58+
the state structure is bigger.
20359
*/
204-
BEGIN_SERVICE_DEFINITION(psi_statement_v3)
60+
BEGIN_SERVICE_DEFINITION(psi_statement_v4)
20561
/** @sa register_statement_v1_t. */
20662
register_statement_v1_t register_statement;
20763
/** @sa get_thread_statement_locker_v1_t. */
208-
get_thread_statement_locker_v1_t get_thread_statement_locker;
64+
get_thread_statement_locker_v4_t get_thread_statement_locker;
20965
/** @sa refine_statement_v1_t. */
21066
refine_statement_v1_t refine_statement;
21167
/** @sa start_statement_v1_t. */
@@ -279,6 +135,6 @@ start_sp_v1_t start_sp;
279135
end_sp_v1_t end_sp;
280136
/** @sa drop_sp_v1_t. */
281137
drop_sp_v1_t drop_sp;
282-
END_SERVICE_DEFINITION(psi_statement_v3)
138+
END_SERVICE_DEFINITION(psi_statement_v4)
283139

284140
#endif /* COMPONENTS_SERVICES_PSI_STATEMENT_SERVICE_H */

‎include/mysql/psi/psi_abi_statement_v1.h.pp‎

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
const char *m_documentation;
4747
};
4848
typedef struct PSI_statement_info_v1 PSI_statement_info_v1;
49-
struct PSI_statement_locker_state_v1 {
49+
struct PSI_statement_locker_state_v4 {
5050
bool m_discarded;
5151
bool m_in_prepare;
5252
unsigned char m_no_index_used;
@@ -56,6 +56,10 @@
5656
struct PSI_thread *m_thread;
5757
unsigned long long m_timer_start;
5858
unsigned long long m_cpu_time_start;
59+
size_t m_controlled_local_size_start;
60+
size_t m_controlled_stmt_size_start;
61+
size_t m_total_local_size_start;
62+
size_t m_total_stmt_size_start;
5963
void *m_statement;
6064
unsigned long long m_lock_time;
6165
unsigned long long m_rows_sent;
@@ -81,7 +85,7 @@
8185
PSI_sp_share *m_parent_sp_share;
8286
PSI_prepared_stmt *m_parent_prepared_stmt;
8387
};
84-
typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state_v1;
88+
typedef struct PSI_statement_locker_state_v4 PSI_statement_locker_state_v4;
8589
struct PSI_sp_locker_state_v1 {
8690
unsigned int m_flags;
8791
struct PSI_thread *m_thread;
@@ -93,8 +97,8 @@
9397
typedef void (*register_statement_v1_t)(const char *category,
9498
struct PSI_statement_info_v1 *info,
9599
int count);
96-
typedef struct PSI_statement_locker *(*get_thread_statement_locker_v1_t)(
97-
struct PSI_statement_locker_state_v1 *state, PSI_statement_key key,
100+
typedef struct PSI_statement_locker *(*get_thread_statement_locker_v4_t)(
101+
struct PSI_statement_locker_state_v4 *state, PSI_statement_key key,
98102
const void *charset, PSI_sp_share *sp_share);
99103
typedef struct PSI_statement_locker *(*refine_statement_v1_t)(
100104
struct PSI_statement_locker *locker, PSI_statement_key key);
@@ -173,7 +177,7 @@
173177
const char *object_name,
174178
unsigned int object_name_length);
175179
typedef struct PSI_statement_info_v1 PSI_statement_info;
176-
typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state;
180+
typedef struct PSI_statement_locker_state_v4 PSI_statement_locker_state;
177181
typedef struct PSI_sp_locker_state_v1 PSI_sp_locker_state;
178182
struct PSI_statement_bootstrap {
179183
void *(*get_interface)(int version);
@@ -186,8 +190,11 @@
186190
void *this_interface_is_obsolete;
187191
};
188192
struct PSI_statement_service_v3 {
193+
void *this_interface_is_obsolete;
194+
};
195+
struct PSI_statement_service_v4 {
189196
register_statement_v1_t register_statement;
190-
get_thread_statement_locker_v1_t get_thread_statement_locker;
197+
get_thread_statement_locker_v4_t get_thread_statement_locker;
191198
refine_statement_v1_t refine_statement;
192199
start_statement_v1_t start_statement;
193200
set_statement_text_v1_t set_statement_text;
@@ -224,5 +231,5 @@
224231
end_sp_v1_t end_sp;
225232
drop_sp_v1_t drop_sp;
226233
};
227-
typedef struct PSI_statement_service_v3 PSI_statement_service_t;
234+
typedef struct PSI_statement_service_v4 PSI_statement_service_t;
228235
extern PSI_statement_service_t *psi_statement_service;

0 commit comments

Comments
 (0)