MySQL  8.0.27
Source Code Documentation
tablespace_stats.h
Go to the documentation of this file.
1 /* Copyright (c) 2017, 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
21  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
22 
23 #ifndef DD_INFO_SCHEMA_TABLESPACE_STATS_INCLUDED
24 #define DD_INFO_SCHEMA_TABLESPACE_STATS_INCLUDED
25 
26 #include "sql/handler.h" // ha_tablespace_statistics
27 #include "sql_string.h" // String
28 
29 class THD;
30 struct TABLE_LIST;
31 
32 namespace dd {
33 namespace info_schema {
34 
35 // Tablespace statistics that are cached.
37  TS_ID,
38  TS_TYPE,
47  TS_VERSION,
50  TS_STATUS,
51  TS_EXTRA
52 };
53 
54 /**
55  The class hold dynamic table statistics for a table.
56  This cache is used by internal UDF's defined for the purpose
57  of INFORMATION_SCHEMA queries which retrieve dynamic table
58  statistics. The class caches statistics for just one table.
59 
60  Overall aim of introducing this cache is to avoid making
61  multiple calls to same SE API to retrieve the statistics.
62 */
63 
65  public:
67 
68  /**
69  Check if the stats are cached for given tablespace_name and file_name.
70 
71  @param tablespace_name - Tablespace name.
72  @param file_name - File name.
73 
74  @return true if stats are cached, else false.
75  */
76  bool is_stat_cached(const String &tablespace_name, const String &file_name) {
77  return (m_key == form_key(tablespace_name, file_name));
78  }
79 
80  /**
81  Store the statistics form the given handler
82 
83  @param tablespace_name - Tablespace name.
84  @param file_name - File name.
85  @param stats - ha_tablespace_statistics.
86  */
87  void cache_stats(const String &tablespace_name, const String &file_name,
89  m_stats = stats;
90  m_found_error = false;
91  set_stat_cached(tablespace_name, file_name);
92  }
93 
94  /**
95  Read dynamic tablespace statistics from SE API OR by reading cached
96  statistics from Query_block.
97 
98  @param thd - Current thread.
99  @param tablespace_name_ptr - Tablespace name of which we need stats.
100  @param file_name_ptr - File name.
101  @param engine_name_ptr - Engine name.
102  @param ts_se_private_data - Tablespace se private data.
103 
104  @return true if statistics were not fetched from SE, otherwise false.
105  */
106  bool read_stat(THD *thd, const String &tablespace_name_ptr,
107  const String &file_name_ptr, const String &engine_name_ptr,
108  const char *ts_se_private_data);
109 
110  // Invalidate the cache.
111  void invalidate_cache(void) {
112  m_key.clear();
113  m_found_error = false;
114  }
115 
116  /**
117  Mark that error was found for the given key. The combination of
118  tablespace and file name forms the key.
119 
120  @param tablespace_name - Tablespace name.
121  @param file_name - File name.
122  */
123  void mark_as_error_found(const String &tablespace_name,
124  const String &file_name) {
125  m_stats = {};
126  m_found_error = true;
127  m_key = form_key(tablespace_name, file_name);
128  }
129 
130  /**
131  Return statistics of the a given type.
132 
133  @param stype Type of statistics requested.
134  @param[out] result Value for stype.
135  */
137 
139 
140  private:
141  /**
142  Mark the cache as valid for a given table. This creates a key for the
143  cache element. We store just a single table statistics in this cache.
144 
145  @param tablespace_name - Tablespace name.
146  @param file_name - File name.
147  */
148  void set_stat_cached(const String &tablespace_name, const String &file_name) {
149  m_key = form_key(tablespace_name, file_name);
150  }
151 
152  /**
153  Build a key representating the table for which stats are cached.
154 
155  @param tablespace_name - Tablespace name.
156  @param file_name - File name.
157 
158  @returns String_type representing the key.
159  */
160  String_type form_key(const String &tablespace_name, const String &file_name) {
161  return String_type(tablespace_name.ptr()) + String_type(file_name.ptr());
162  }
163 
164  /**
165  Check if we have seen a error.
166 
167  @param tablespace_name - Tablespace name.
168  @param file_name - File name.
169 
170  @returns true if there is error reported.
171  false if not.
172  */
173  inline bool check_error_for_key(const String &tablespace_name,
174  const String &file_name) {
175  if (is_stat_cached(tablespace_name, file_name) && m_found_error)
176  return true;
177 
178  return false;
179  }
180 
181  /**
182  Read dynamic tablespace statistics from SE API.
183 
184  @param thd - Current thread.
185  @param tablespace_name_ptr - Tablespace name of which we need stats.
186  @param file_name_ptr - File name.
187  @param engine_name_ptr - Engine name.
188  @param ts_se_private_data - Tablespace se private data.
189 
190  @return true if statistics were not fetched from SE, otherwise false.
191  */
192  bool read_stat_from_SE(THD *thd, const String &tablespace_name_ptr,
193  const String &file_name_ptr,
194  const String &engine_name_ptr,
195  const char *ts_se_private_data);
196 
197  private:
198  // The cache key
199  String_type m_key; // Format '<tablespace_name>'
200 
201  // Error found when reading statistics.
203 
204  public:
205  // Cached statistics.
207 };
208 
209 } // namespace info_schema
210 } // namespace dd
211 
212 #endif // DD_INFO_SCHEMA_TABLESPACE_STATS_INCLUDED
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:165
const char * ptr() const
Definition: sql_string.h:247
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_class.h:821
The class hold dynamic table statistics for a table.
Definition: tablespace_stats.h:64
bool check_error_for_key(const String &tablespace_name, const String &file_name)
Check if we have seen a error.
Definition: tablespace_stats.h:173
bool is_stat_cached(const String &tablespace_name, const String &file_name)
Check if the stats are cached for given tablespace_name and file_name.
Definition: tablespace_stats.h:76
void set_stat_cached(const String &tablespace_name, const String &file_name)
Mark the cache as valid for a given table.
Definition: tablespace_stats.h:148
void cache_stats(const String &tablespace_name, const String &file_name, ha_tablespace_statistics &stats)
Store the statistics form the given handler.
Definition: tablespace_stats.h:87
bool m_found_error
Definition: tablespace_stats.h:202
void mark_as_error_found(const String &tablespace_name, const String &file_name)
Mark that error was found for the given key.
Definition: tablespace_stats.h:123
String_type m_key
Definition: tablespace_stats.h:199
String_type form_key(const String &tablespace_name, const String &file_name)
Build a key representating the table for which stats are cached.
Definition: tablespace_stats.h:160
void invalidate_cache(void)
Definition: tablespace_stats.h:111
bool read_stat(THD *thd, const String &tablespace_name_ptr, const String &file_name_ptr, const String &engine_name_ptr, const char *ts_se_private_data)
Read dynamic tablespace statistics from SE API OR by reading cached statistics from Query_block.
Definition: tablespace_stats.cc:139
bool read_stat_from_SE(THD *thd, const String &tablespace_name_ptr, const String &file_name_ptr, const String &engine_name_ptr, const char *ts_se_private_data)
Read dynamic tablespace statistics from SE API.
Definition: tablespace_stats.cc:192
ha_tablespace_statistics m_stats
Definition: tablespace_stats.h:206
Tablespace_statistics()
Definition: tablespace_stats.h:66
void get_stat(enum_tablespace_stats_type stype, ulonglong *result)
Return statistics of the a given type.
Definition: tablespace_stats.cc:34
Definition: handler.h:7018
unsigned long long int ulonglong
Definition: my_inttypes.h:55
struct stats stats
Definition: mysqlslap.cc:232
enum_tablespace_stats_type
Definition: tablespace_stats.h:36
The version of the current data dictionary table definitions.
Definition: dictionary_client.h:42
Char_string_template< String_type_allocator > String_type
Definition: string_type.h:50
Our own string classes, used pervasively throughout the executor.
Definition: table.h:2694
Definition: result.h:29
Definition: mysqlslap.cc:234