1 /* Copyright (c) 2014, 2021, Oracle and/or its affiliates.
2 
3   This program is free software; you can redistribute it and/or modify
4   it under the terms of the GNU General Public License, version 2.0,
5   as published by the Free Software Foundation.
6 
7   This program is also distributed with certain software (including
8   but not limited to OpenSSL) that is licensed under separate terms,
9   as designated in a particular file or component or in included license
10   documentation.  The authors of MySQL hereby grant you an additional
11   permission to link the program and your derivative works with the
12   separately licensed software that they have included with MySQL.
13 
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License, version 2.0, for more details.
18 
19   You should have received a copy of the GNU General Public License
20   along with this program; if not, write to the Free Software Foundation,
21   51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
22 
23 #include "my_global.h"
24 #include "m_string.h"
25 #include "pfs_global.h"
26 #include "pfs_builtin_memory.h"
27 
28 PFS_builtin_memory_class builtin_memory_mutex;
29 PFS_builtin_memory_class builtin_memory_rwlock;
30 PFS_builtin_memory_class builtin_memory_cond;
31 PFS_builtin_memory_class builtin_memory_file;
32 PFS_builtin_memory_class builtin_memory_socket;
33 PFS_builtin_memory_class builtin_memory_mdl;
34 PFS_builtin_memory_class builtin_memory_file_handle;
35 
36 PFS_builtin_memory_class builtin_memory_account;
37 PFS_builtin_memory_class builtin_memory_account_waits;
38 PFS_builtin_memory_class builtin_memory_account_stages;
39 PFS_builtin_memory_class builtin_memory_account_statements;
40 PFS_builtin_memory_class builtin_memory_account_transactions;
41 PFS_builtin_memory_class builtin_memory_account_memory;
42 
43 PFS_builtin_memory_class builtin_memory_global_stages;
44 PFS_builtin_memory_class builtin_memory_global_statements;
45 PFS_builtin_memory_class builtin_memory_global_memory;
46 
47 PFS_builtin_memory_class builtin_memory_host;
48 PFS_builtin_memory_class builtin_memory_host_waits;
49 PFS_builtin_memory_class builtin_memory_host_stages;
50 PFS_builtin_memory_class builtin_memory_host_statements;
51 PFS_builtin_memory_class builtin_memory_host_transactions;
52 PFS_builtin_memory_class builtin_memory_host_memory;
53 
54 PFS_builtin_memory_class builtin_memory_thread;
55 PFS_builtin_memory_class builtin_memory_thread_waits;
56 PFS_builtin_memory_class builtin_memory_thread_stages;
57 PFS_builtin_memory_class builtin_memory_thread_statements;
58 PFS_builtin_memory_class builtin_memory_thread_transactions;
59 PFS_builtin_memory_class builtin_memory_thread_memory;
60 
61 PFS_builtin_memory_class builtin_memory_thread_waits_history;
62 PFS_builtin_memory_class builtin_memory_thread_stages_history;
63 PFS_builtin_memory_class builtin_memory_thread_statements_history;
64 PFS_builtin_memory_class builtin_memory_thread_statements_history_tokens;
65 PFS_builtin_memory_class builtin_memory_thread_statements_history_sqltext;
66 PFS_builtin_memory_class builtin_memory_thread_statements_stack;
67 PFS_builtin_memory_class builtin_memory_thread_statements_stack_tokens;
68 PFS_builtin_memory_class builtin_memory_thread_statements_stack_sqltext;
69 PFS_builtin_memory_class builtin_memory_thread_transaction_history;
70 PFS_builtin_memory_class builtin_memory_thread_session_connect_attrs;
71 
72 PFS_builtin_memory_class builtin_memory_user;
73 PFS_builtin_memory_class builtin_memory_user_waits;
74 PFS_builtin_memory_class builtin_memory_user_stages;
75 PFS_builtin_memory_class builtin_memory_user_statements;
76 PFS_builtin_memory_class builtin_memory_user_transactions;
77 PFS_builtin_memory_class builtin_memory_user_memory;
78 
79 PFS_builtin_memory_class builtin_memory_mutex_class;
80 PFS_builtin_memory_class builtin_memory_rwlock_class;
81 PFS_builtin_memory_class builtin_memory_cond_class;
82 PFS_builtin_memory_class builtin_memory_thread_class;
83 PFS_builtin_memory_class builtin_memory_file_class;
84 PFS_builtin_memory_class builtin_memory_socket_class;
85 PFS_builtin_memory_class builtin_memory_stage_class;
86 PFS_builtin_memory_class builtin_memory_statement_class;
87 PFS_builtin_memory_class builtin_memory_memory_class;
88 
89 PFS_builtin_memory_class builtin_memory_setup_actor;
90 PFS_builtin_memory_class builtin_memory_setup_object;
91 
92 PFS_builtin_memory_class builtin_memory_digest;
93 PFS_builtin_memory_class builtin_memory_digest_tokens;
94 
95 PFS_builtin_memory_class builtin_memory_stages_history_long;
96 PFS_builtin_memory_class builtin_memory_statements_history_long;
97 PFS_builtin_memory_class builtin_memory_statements_history_long_tokens;
98 PFS_builtin_memory_class builtin_memory_statements_history_long_sqltext;
99 PFS_builtin_memory_class builtin_memory_transactions_history_long;
100 PFS_builtin_memory_class builtin_memory_waits_history_long;
101 
102 PFS_builtin_memory_class builtin_memory_table;
103 PFS_builtin_memory_class builtin_memory_table_share;
104 PFS_builtin_memory_class builtin_memory_table_share_index;
105 PFS_builtin_memory_class builtin_memory_table_share_lock;
106 
107 PFS_builtin_memory_class builtin_memory_program;
108 PFS_builtin_memory_class builtin_memory_prepared_stmt;
109 
110 PFS_builtin_memory_class builtin_memory_scalable_buffer;
111 
init_builtin_memory_class(PFS_builtin_memory_class * klass,const char * name)112 static void init_builtin_memory_class(PFS_builtin_memory_class *klass, const char* name)
113 {
114   klass->m_class.m_type= PFS_CLASS_MEMORY;
115   klass->m_class.m_enabled= true; /* Immutable */
116   klass->m_class.m_timed= false; /* Immutable */
117   klass->m_class.m_flags= PSI_FLAG_GLOBAL;
118   klass->m_class.m_event_name_index= 0;
119   my_snprintf(klass->m_class.m_name, sizeof(klass->m_class.m_name), "%.*s",
120               PFS_MAX_INFO_NAME_LENGTH - 1, name);
121   klass->m_class.m_name_length= strlen(name);
122   assert(klass->m_class.m_name_length < sizeof(klass->m_class.m_name));
123   klass->m_class.m_timer= NULL;
124 
125   klass->m_stat.reset();
126 }
127 
init_all_builtin_memory_class()128 void init_all_builtin_memory_class()
129 {
130   init_builtin_memory_class( & builtin_memory_mutex,
131                              "memory/performance_schema/mutex_instances");
132   init_builtin_memory_class( & builtin_memory_rwlock,
133                              "memory/performance_schema/rwlock_instances");
134   init_builtin_memory_class( & builtin_memory_cond,
135                              "memory/performance_schema/cond_instances");
136   init_builtin_memory_class( & builtin_memory_file,
137                              "memory/performance_schema/file_instances");
138   init_builtin_memory_class( & builtin_memory_socket,
139                              "memory/performance_schema/socket_instances");
140   init_builtin_memory_class( & builtin_memory_mdl,
141                              "memory/performance_schema/metadata_locks");
142   init_builtin_memory_class( & builtin_memory_file_handle,
143                              "memory/performance_schema/file_handle");
144 
145   init_builtin_memory_class( & builtin_memory_account,
146                              "memory/performance_schema/accounts");
147   init_builtin_memory_class( & builtin_memory_account_waits,
148                              "memory/performance_schema/events_waits_summary_by_account_by_event_name");
149   init_builtin_memory_class( & builtin_memory_account_stages,
150                              "memory/performance_schema/events_stages_summary_by_account_by_event_name");
151   init_builtin_memory_class( & builtin_memory_account_statements,
152                              "memory/performance_schema/events_statements_summary_by_account_by_event_name");
153   init_builtin_memory_class( & builtin_memory_account_transactions,
154                              "memory/performance_schema/events_transactions_summary_by_account_by_event_name");
155   init_builtin_memory_class( & builtin_memory_account_memory,
156                              "memory/performance_schema/memory_summary_by_account_by_event_name");
157 
158   init_builtin_memory_class( & builtin_memory_global_stages,
159                              "memory/performance_schema/events_stages_summary_global_by_event_name");
160   init_builtin_memory_class( & builtin_memory_global_statements,
161                              "memory/performance_schema/events_statements_summary_global_by_event_name");
162   init_builtin_memory_class( & builtin_memory_global_memory,
163                              "memory/performance_schema/memory_summary_global_by_event_name");
164 
165   init_builtin_memory_class( & builtin_memory_host,
166                              "memory/performance_schema/hosts");
167   init_builtin_memory_class( & builtin_memory_host_waits,
168                              "memory/performance_schema/events_waits_summary_by_host_by_event_name");
169   init_builtin_memory_class( & builtin_memory_host_stages,
170                              "memory/performance_schema/events_stages_summary_by_host_by_event_name");
171   init_builtin_memory_class( & builtin_memory_host_statements,
172                              "memory/performance_schema/events_statements_summary_by_host_by_event_name");
173   init_builtin_memory_class( & builtin_memory_host_transactions,
174                              "memory/performance_schema/events_transactions_summary_by_host_by_event_name");
175   init_builtin_memory_class( & builtin_memory_host_memory,
176                              "memory/performance_schema/memory_summary_by_host_by_event_name");
177 
178   init_builtin_memory_class( & builtin_memory_thread,
179                              "memory/performance_schema/threads");
180   init_builtin_memory_class( & builtin_memory_thread_waits,
181                              "memory/performance_schema/events_waits_summary_by_thread_by_event_name");
182   init_builtin_memory_class( & builtin_memory_thread_stages,
183                              "memory/performance_schema/events_stages_summary_by_thread_by_event_name");
184   init_builtin_memory_class( & builtin_memory_thread_statements,
185                              "memory/performance_schema/events_statements_summary_by_thread_by_event_name");
186   init_builtin_memory_class( & builtin_memory_thread_transactions,
187                              "memory/performance_schema/events_transactions_summary_by_thread_by_event_name");
188   init_builtin_memory_class( & builtin_memory_thread_memory,
189                              "memory/performance_schema/memory_summary_by_thread_by_event_name");
190 
191   init_builtin_memory_class( & builtin_memory_thread_waits_history,
192                              "memory/performance_schema/events_waits_history");
193   init_builtin_memory_class( & builtin_memory_thread_stages_history,
194                              "memory/performance_schema/events_stages_history");
195   init_builtin_memory_class( & builtin_memory_thread_statements_history,
196                              "memory/performance_schema/events_statements_history");
197   init_builtin_memory_class( & builtin_memory_thread_statements_history_tokens,
198                              "memory/performance_schema/events_statements_history.tokens");
199   init_builtin_memory_class( & builtin_memory_thread_statements_history_sqltext,
200                              "memory/performance_schema/events_statements_history.sqltext");
201   init_builtin_memory_class( & builtin_memory_thread_statements_stack,
202                              "memory/performance_schema/events_statements_current");
203   init_builtin_memory_class( & builtin_memory_thread_statements_stack_tokens,
204                              "memory/performance_schema/events_statements_current.tokens");
205   init_builtin_memory_class( & builtin_memory_thread_statements_stack_sqltext,
206                              "memory/performance_schema/events_statements_current.sqltext");
207   init_builtin_memory_class( & builtin_memory_thread_transaction_history,
208                              "memory/performance_schema/events_transactions_history");
209   init_builtin_memory_class( & builtin_memory_thread_session_connect_attrs,
210                              "memory/performance_schema/session_connect_attrs");
211 
212   init_builtin_memory_class( & builtin_memory_user,
213                              "memory/performance_schema/users");
214   init_builtin_memory_class( & builtin_memory_user_waits,
215                              "memory/performance_schema/events_waits_summary_by_user_by_event_name");
216   init_builtin_memory_class( & builtin_memory_user_stages,
217                              "memory/performance_schema/events_stages_summary_by_user_by_event_name");
218   init_builtin_memory_class( & builtin_memory_user_statements,
219                              "memory/performance_schema/events_statements_summary_by_user_by_event_name");
220   init_builtin_memory_class( & builtin_memory_user_transactions,
221                              "memory/performance_schema/events_transactions_summary_by_user_by_event_name");
222   init_builtin_memory_class( & builtin_memory_user_memory,
223                              "memory/performance_schema/memory_summary_by_user_by_event_name");
224 
225   init_builtin_memory_class( & builtin_memory_mutex_class,
226                              "memory/performance_schema/mutex_class");
227   init_builtin_memory_class( & builtin_memory_rwlock_class,
228                              "memory/performance_schema/rwlock_class");
229   init_builtin_memory_class( & builtin_memory_cond_class,
230                              "memory/performance_schema/cond_class");
231   init_builtin_memory_class( & builtin_memory_thread_class,
232                              "memory/performance_schema/thread_class");
233   init_builtin_memory_class( & builtin_memory_file_class,
234                              "memory/performance_schema/file_class");
235   init_builtin_memory_class( & builtin_memory_socket_class,
236                              "memory/performance_schema/socket_class");
237   init_builtin_memory_class( & builtin_memory_stage_class,
238                              "memory/performance_schema/stage_class");
239   init_builtin_memory_class( & builtin_memory_statement_class,
240                              "memory/performance_schema/statement_class");
241   init_builtin_memory_class( & builtin_memory_memory_class,
242                              "memory/performance_schema/memory_class");
243 
244   init_builtin_memory_class( & builtin_memory_setup_actor,
245                              "memory/performance_schema/setup_actors");
246   init_builtin_memory_class( & builtin_memory_setup_object,
247                              "memory/performance_schema/setup_objects");
248 
249   init_builtin_memory_class( & builtin_memory_digest,
250                              "memory/performance_schema/events_statements_summary_by_digest");
251   init_builtin_memory_class( & builtin_memory_digest_tokens,
252                              "memory/performance_schema/events_statements_summary_by_digest.tokens");
253 
254   init_builtin_memory_class( & builtin_memory_stages_history_long,
255                              "memory/performance_schema/events_stages_history_long");
256   init_builtin_memory_class( & builtin_memory_statements_history_long,
257                              "memory/performance_schema/events_statements_history_long");
258   init_builtin_memory_class( & builtin_memory_statements_history_long_tokens,
259                              "memory/performance_schema/events_statements_history_long.tokens");
260   init_builtin_memory_class( & builtin_memory_statements_history_long_sqltext,
261                              "memory/performance_schema/events_statements_history_long.sqltext");
262   init_builtin_memory_class( & builtin_memory_transactions_history_long,
263                              "memory/performance_schema/events_transactions_history_long");
264   init_builtin_memory_class( & builtin_memory_waits_history_long,
265                              "memory/performance_schema/events_waits_history_long");
266 
267   init_builtin_memory_class( & builtin_memory_table,
268                              "memory/performance_schema/table_handles");
269   init_builtin_memory_class( & builtin_memory_table_share,
270                              "memory/performance_schema/table_shares");
271   init_builtin_memory_class( & builtin_memory_table_share_index,
272                              "memory/performance_schema/table_io_waits_summary_by_index_usage");
273   init_builtin_memory_class( & builtin_memory_table_share_lock,
274                              "memory/performance_schema/table_lock_waits_summary_by_table");
275 
276   init_builtin_memory_class( & builtin_memory_program,
277                              "memory/performance_schema/events_statements_summary_by_program");
278   init_builtin_memory_class( & builtin_memory_prepared_stmt,
279                              "memory/performance_schema/prepared_statements_instances");
280 
281   init_builtin_memory_class( & builtin_memory_scalable_buffer,
282                              "memory/performance_schema/scalable_buffer");
283 }
284 
285 static PFS_builtin_memory_class* all_builtin_memory[]=
286 {
287   & builtin_memory_mutex,
288   & builtin_memory_rwlock,
289   & builtin_memory_cond,
290   & builtin_memory_file,
291   & builtin_memory_socket,
292   & builtin_memory_mdl,
293   & builtin_memory_file_handle,
294 
295   & builtin_memory_account,
296   & builtin_memory_account_waits,
297   & builtin_memory_account_stages,
298   & builtin_memory_account_statements,
299   & builtin_memory_account_transactions,
300   & builtin_memory_account_memory,
301 
302   & builtin_memory_global_stages,
303   & builtin_memory_global_statements,
304   & builtin_memory_global_memory,
305 
306   & builtin_memory_host,
307   & builtin_memory_host_waits,
308   & builtin_memory_host_stages,
309   & builtin_memory_host_statements,
310   & builtin_memory_host_transactions,
311   & builtin_memory_host_memory,
312 
313   & builtin_memory_thread,
314   & builtin_memory_thread_waits,
315   & builtin_memory_thread_stages,
316   & builtin_memory_thread_statements,
317   & builtin_memory_thread_transactions,
318   & builtin_memory_thread_memory,
319 
320   & builtin_memory_thread_waits_history,
321   & builtin_memory_thread_stages_history,
322   & builtin_memory_thread_statements_history,
323   & builtin_memory_thread_statements_history_tokens,
324   & builtin_memory_thread_statements_history_sqltext,
325   & builtin_memory_thread_statements_stack,
326   & builtin_memory_thread_statements_stack_tokens,
327   & builtin_memory_thread_statements_stack_sqltext,
328   & builtin_memory_thread_transaction_history,
329   & builtin_memory_thread_session_connect_attrs,
330 
331   & builtin_memory_user,
332   & builtin_memory_user_waits,
333   & builtin_memory_user_stages,
334   & builtin_memory_user_statements,
335   & builtin_memory_user_transactions,
336   & builtin_memory_user_memory,
337 
338   & builtin_memory_mutex_class,
339   & builtin_memory_rwlock_class,
340   & builtin_memory_cond_class,
341   & builtin_memory_thread_class,
342   & builtin_memory_file_class,
343   & builtin_memory_socket_class,
344   & builtin_memory_stage_class,
345   & builtin_memory_statement_class,
346   & builtin_memory_memory_class,
347 
348   & builtin_memory_setup_actor,
349   & builtin_memory_setup_object,
350 
351   & builtin_memory_digest,
352   & builtin_memory_digest_tokens,
353 
354   & builtin_memory_stages_history_long,
355   & builtin_memory_statements_history_long,
356   & builtin_memory_statements_history_long_tokens,
357   & builtin_memory_statements_history_long_sqltext,
358   & builtin_memory_transactions_history_long,
359   & builtin_memory_waits_history_long,
360 
361   & builtin_memory_table,
362   & builtin_memory_table_share,
363   & builtin_memory_table_share_index,
364   & builtin_memory_table_share_lock,
365 
366   & builtin_memory_program,
367   & builtin_memory_prepared_stmt,
368 
369   & builtin_memory_scalable_buffer,
370 
371   NULL
372 };
373 
374 
find_builtin_memory_class(PFS_builtin_memory_key key)375 PFS_builtin_memory_class *find_builtin_memory_class(PFS_builtin_memory_key key)
376 {
377   if (key == 0)
378     return NULL;
379 
380   return all_builtin_memory[key - 1];
381 }
382 
383