| 1 | /* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. |
| 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 as published by |
| 5 | the Free Software Foundation; version 2 of the License. |
| 6 | |
| 7 | This program is distributed in the hope that it will be useful, |
| 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 10 | GNU General Public License for more details. |
| 11 | |
| 12 | You should have received a copy of the GNU General Public License |
| 13 | along with this program; if not, write to the Free Software Foundation, |
| 14 | 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ |
| 15 | |
| 16 | #ifndef PFS_SERVER_H |
| 17 | #define PFS_SERVER_H |
| 18 | |
| 19 | /** |
| 20 | @file storage/perfschema/pfs_server.h |
| 21 | Private interface for the server (declarations). |
| 22 | */ |
| 23 | |
| 24 | #ifndef PFS_MAX_MUTEX_CLASS |
| 25 | #define PFS_MAX_MUTEX_CLASS 200 |
| 26 | #endif |
| 27 | #ifndef PFS_MAX_RWLOCK_CLASS |
| 28 | #define PFS_MAX_RWLOCK_CLASS 40 |
| 29 | #endif |
| 30 | #ifndef PFS_MAX_COND_CLASS |
| 31 | #define PFS_MAX_COND_CLASS 80 |
| 32 | #endif |
| 33 | #ifndef PFS_MAX_THREAD_CLASS |
| 34 | #define PFS_MAX_THREAD_CLASS 50 |
| 35 | #endif |
| 36 | #ifndef PFS_MAX_FILE_CLASS |
| 37 | #define PFS_MAX_FILE_CLASS 50 |
| 38 | #endif |
| 39 | #ifndef PFS_MAX_FILE_HANDLE |
| 40 | #define PFS_MAX_FILE_HANDLE 32768 |
| 41 | #endif |
| 42 | #ifndef PFS_MAX_SOCKET_CLASS |
| 43 | #define PFS_MAX_SOCKET_CLASS 10 |
| 44 | #endif |
| 45 | #ifndef PFS_MAX_SETUP_ACTOR |
| 46 | #define PFS_MAX_SETUP_ACTOR 100 |
| 47 | #endif |
| 48 | #ifndef PFS_MAX_SETUP_OBJECT |
| 49 | #define PFS_MAX_SETUP_OBJECT 100 |
| 50 | #endif |
| 51 | #ifndef PFS_MAX_STAGE_CLASS |
| 52 | #define PFS_MAX_STAGE_CLASS 160 |
| 53 | #endif |
| 54 | #ifndef PFS_STATEMENTS_STACK_SIZE |
| 55 | #define PFS_STATEMENTS_STACK_SIZE 10 |
| 56 | #endif |
| 57 | #ifndef PFS_CONNECT_ATTRS_SIZE |
| 58 | #define PFS_SESSION_CONNECT_ATTRS_SIZE 2048 |
| 59 | #endif |
| 60 | |
| 61 | struct PFS_sizing_hints |
| 62 | { |
| 63 | long m_table_definition_cache; |
| 64 | long m_table_open_cache; |
| 65 | long m_max_connections; |
| 66 | long m_open_files_limit; |
| 67 | }; |
| 68 | |
| 69 | /** Performance schema global sizing parameters. */ |
| 70 | struct PFS_global_param |
| 71 | { |
| 72 | /** True if the performance schema is enabled. */ |
| 73 | bool m_enabled; |
| 74 | /** Default values for SETUP_CONSUMERS. */ |
| 75 | bool m_consumer_events_stages_current_enabled; |
| 76 | bool m_consumer_events_stages_history_enabled; |
| 77 | bool m_consumer_events_stages_history_long_enabled; |
| 78 | bool m_consumer_events_statements_current_enabled; |
| 79 | bool m_consumer_events_statements_history_enabled; |
| 80 | bool m_consumer_events_statements_history_long_enabled; |
| 81 | bool m_consumer_events_waits_current_enabled; |
| 82 | bool m_consumer_events_waits_history_enabled; |
| 83 | bool m_consumer_events_waits_history_long_enabled; |
| 84 | bool m_consumer_global_instrumentation_enabled; |
| 85 | bool m_consumer_thread_instrumentation_enabled; |
| 86 | bool m_consumer_statement_digest_enabled; |
| 87 | |
| 88 | /** Default instrument configuration option. */ |
| 89 | char *m_pfs_instrument; |
| 90 | |
| 91 | /** |
| 92 | Maximum number of instrumented mutex classes. |
| 93 | @sa mutex_class_lost. |
| 94 | */ |
| 95 | ulong m_mutex_class_sizing; |
| 96 | /** |
| 97 | Maximum number of instrumented rwlock classes. |
| 98 | @sa rwlock_class_lost. |
| 99 | */ |
| 100 | ulong m_rwlock_class_sizing; |
| 101 | /** |
| 102 | Maximum number of instrumented cond classes. |
| 103 | @sa cond_class_lost. |
| 104 | */ |
| 105 | ulong m_cond_class_sizing; |
| 106 | /** |
| 107 | Maximum number of instrumented thread classes. |
| 108 | @sa thread_class_lost. |
| 109 | */ |
| 110 | ulong m_thread_class_sizing; |
| 111 | /** |
| 112 | Maximum number of instrumented table share. |
| 113 | @sa table_share_lost. |
| 114 | */ |
| 115 | long m_table_share_sizing; |
| 116 | /** |
| 117 | Maximum number of instrumented file classes. |
| 118 | @sa file_class_lost. |
| 119 | */ |
| 120 | ulong m_file_class_sizing; |
| 121 | /** |
| 122 | Maximum number of instrumented mutex instances. |
| 123 | @sa mutex_lost. |
| 124 | */ |
| 125 | long m_mutex_sizing; |
| 126 | /** |
| 127 | Maximum number of instrumented rwlock instances. |
| 128 | @sa rwlock_lost. |
| 129 | */ |
| 130 | long m_rwlock_sizing; |
| 131 | /** |
| 132 | Maximum number of instrumented cond instances. |
| 133 | @sa cond_lost. |
| 134 | */ |
| 135 | long m_cond_sizing; |
| 136 | /** |
| 137 | Maximum number of instrumented thread instances. |
| 138 | @sa thread_lost. |
| 139 | */ |
| 140 | long m_thread_sizing; |
| 141 | /** |
| 142 | Maximum number of instrumented table handles. |
| 143 | @sa table_lost. |
| 144 | */ |
| 145 | long m_table_sizing; |
| 146 | /** |
| 147 | Maximum number of instrumented file instances. |
| 148 | @sa file_lost. |
| 149 | */ |
| 150 | long m_file_sizing; |
| 151 | /** |
| 152 | Maximum number of instrumented file handles. |
| 153 | @sa file_handle_lost. |
| 154 | */ |
| 155 | long m_file_handle_sizing; |
| 156 | /** |
| 157 | Maxium number of instrumented socket instances |
| 158 | @sa socket_lost |
| 159 | */ |
| 160 | long m_socket_sizing; |
| 161 | /** |
| 162 | Maximum number of instrumented socket classes. |
| 163 | @sa socket_class_lost. |
| 164 | */ |
| 165 | ulong m_socket_class_sizing; |
| 166 | /** Maximum number of rows per thread in table EVENTS_WAITS_HISTORY. */ |
| 167 | long m_events_waits_history_sizing; |
| 168 | /** Maximum number of rows in table EVENTS_WAITS_HISTORY_LONG. */ |
| 169 | long m_events_waits_history_long_sizing; |
| 170 | /** Maximum number of rows in table SETUP_ACTORS. */ |
| 171 | ulong m_setup_actor_sizing; |
| 172 | /** Maximum number of rows in table SETUP_OBJECTS. */ |
| 173 | ulong m_setup_object_sizing; |
| 174 | /** Maximum number of rows in table HOSTS. */ |
| 175 | long m_host_sizing; |
| 176 | /** Maximum number of rows in table USERS. */ |
| 177 | long m_user_sizing; |
| 178 | /** Maximum number of rows in table ACCOUNTS. */ |
| 179 | long m_account_sizing; |
| 180 | /** |
| 181 | Maximum number of instrumented stage classes. |
| 182 | @sa stage_class_lost. |
| 183 | */ |
| 184 | ulong m_stage_class_sizing; |
| 185 | /** Maximum number of rows per thread in table EVENTS_STAGES_HISTORY. */ |
| 186 | long m_events_stages_history_sizing; |
| 187 | /** Maximum number of rows in table EVENTS_STAGES_HISTORY_LONG. */ |
| 188 | long m_events_stages_history_long_sizing; |
| 189 | /** |
| 190 | Maximum number of instrumented statement classes. |
| 191 | @sa statement_class_lost. |
| 192 | */ |
| 193 | ulong m_statement_class_sizing; |
| 194 | /** Maximum number of rows per thread in table EVENTS_STATEMENT_HISTORY. */ |
| 195 | long m_events_statements_history_sizing; |
| 196 | /** Maximum number of rows in table EVENTS_STATEMENTS_HISTORY_LONG. */ |
| 197 | long m_events_statements_history_long_sizing; |
| 198 | /** Maximum number of digests to be captured */ |
| 199 | long m_digest_sizing; |
| 200 | /** Maximum number of session attribute strings per thread */ |
| 201 | long m_session_connect_attrs_sizing; |
| 202 | |
| 203 | long m_max_digest_length; |
| 204 | |
| 205 | /** Sizing hints, for auto tuning. */ |
| 206 | PFS_sizing_hints m_hints; |
| 207 | }; |
| 208 | |
| 209 | /** |
| 210 | Performance schema sizing values for the server. |
| 211 | This global variable is set when parsing server startup options. |
| 212 | */ |
| 213 | extern PFS_global_param pfs_param; |
| 214 | |
| 215 | /** |
| 216 | Initialize the performance schema. |
| 217 | @param param Size parameters to use. |
| 218 | @return A boostrap handle, or NULL. |
| 219 | */ |
| 220 | struct PSI_bootstrap* |
| 221 | initialize_performance_schema(PFS_global_param *param); |
| 222 | |
| 223 | void pfs_automated_sizing(PFS_global_param *param); |
| 224 | |
| 225 | /** |
| 226 | Initialize the performance schema ACL. |
| 227 | ACL is strictly enforced when the server is running in normal mode, |
| 228 | to enforce that only legal operations are allowed. |
| 229 | When running in boostrap mode, ACL restrictions are relaxed, |
| 230 | to allow the boostrap scripts to DROP / CREATE performance schema tables. |
| 231 | @sa ACL_internal_schema_registry |
| 232 | @param bootstrap True if the server is starting in bootstrap mode. |
| 233 | */ |
| 234 | void initialize_performance_schema_acl(bool bootstrap); |
| 235 | |
| 236 | /** |
| 237 | Initialize the dynamic array holding individual instrument settings collected |
| 238 | from the server configuration options. |
| 239 | */ |
| 240 | void init_pfs_instrument_array(); |
| 241 | |
| 242 | /** |
| 243 | Process one PFS_INSTRUMENT configuration string. |
| 244 | */ |
| 245 | int add_pfs_instr_to_array(const char* name, const char* value); |
| 246 | |
| 247 | /** |
| 248 | Shutdown the performance schema. |
| 249 | */ |
| 250 | void shutdown_performance_schema(); |
| 251 | |
| 252 | #endif |
| 253 | |