MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
table_socket_summary_by_event_name.cc
Go to the documentation of this file.
1 /* Copyright (c) 2008, 2011, 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 
21 #include "my_global.h"
22 #include "my_pthread.h"
23 #include "pfs_instr.h"
24 #include "pfs_column_types.h"
25 #include "pfs_column_values.h"
27 #include "pfs_global.h"
28 #include "pfs_visitor.h"
29 
30 THR_LOCK table_socket_summary_by_event_name::m_table_lock;
31 
32 static const TABLE_FIELD_TYPE field_types[]=
33 {
34  {
35  { C_STRING_WITH_LEN("EVENT_NAME") },
36  { C_STRING_WITH_LEN("varchar(128)") },
37  { NULL, 0}
38  },
39  {
40  { C_STRING_WITH_LEN("COUNT_STAR") },
41  { C_STRING_WITH_LEN("bigint(20)") },
42  { NULL, 0}
43  },
44  {
45  { C_STRING_WITH_LEN("SUM_TIMER_WAIT") },
46  { C_STRING_WITH_LEN("bigint(20)") },
47  { NULL, 0}
48  },
49  {
50  { C_STRING_WITH_LEN("MIN_TIMER_WAIT") },
51  { C_STRING_WITH_LEN("bigint(20)") },
52  { NULL, 0}
53  },
54  {
55  { C_STRING_WITH_LEN("AVG_TIMER_WAIT") },
56  { C_STRING_WITH_LEN("bigint(20)") },
57  { NULL, 0}
58  },
59  {
60  { C_STRING_WITH_LEN("MAX_TIMER_WAIT") },
61  { C_STRING_WITH_LEN("bigint(20)") },
62  { NULL, 0}
63  },
64 
66  {
67  { C_STRING_WITH_LEN("COUNT_READ") },
68  { C_STRING_WITH_LEN("bigint(20)") },
69  { NULL, 0}
70  },
71  {
72  { C_STRING_WITH_LEN("SUM_TIMER_READ") },
73  { C_STRING_WITH_LEN("bigint(20)") },
74  { NULL, 0}
75  },
76  {
77  { C_STRING_WITH_LEN("MIN_TIMER_READ") },
78  { C_STRING_WITH_LEN("bigint(20)") },
79  { NULL, 0}
80  },
81  {
82  { C_STRING_WITH_LEN("AVG_TIMER_READ") },
83  { C_STRING_WITH_LEN("bigint(20)") },
84  { NULL, 0}
85  },
86  {
87  { C_STRING_WITH_LEN("MAX_TIMER_READ") },
88  { C_STRING_WITH_LEN("bigint(20)") },
89  { NULL, 0}
90  },
91  {
92  { C_STRING_WITH_LEN("SUM_NUMBER_OF_BYTES_READ") },
93  { C_STRING_WITH_LEN("bigint(20)") },
94  { NULL, 0}
95  },
96 
98  {
99  { C_STRING_WITH_LEN("COUNT_WRITE") },
100  { C_STRING_WITH_LEN("bigint(20)") },
101  { NULL, 0}
102  },
103  {
104  { C_STRING_WITH_LEN("SUM_TIMER_WRITE") },
105  { C_STRING_WITH_LEN("bigint(20)") },
106  { NULL, 0}
107  },
108  {
109  { C_STRING_WITH_LEN("MIN_TIMER_WRITE") },
110  { C_STRING_WITH_LEN("bigint(20)") },
111  { NULL, 0}
112  },
113  {
114  { C_STRING_WITH_LEN("AVG_TIMER_WRITE") },
115  { C_STRING_WITH_LEN("bigint(20)") },
116  { NULL, 0}
117  },
118  {
119  { C_STRING_WITH_LEN("MAX_TIMER_WRITE") },
120  { C_STRING_WITH_LEN("bigint(20)") },
121  { NULL, 0}
122  },
123  {
124  { C_STRING_WITH_LEN("SUM_NUMBER_OF_BYTES_WRITE") },
125  { C_STRING_WITH_LEN("bigint(20)") },
126  { NULL, 0}
127  },
128 
130  {
131  { C_STRING_WITH_LEN("COUNT_MISC") },
132  { C_STRING_WITH_LEN("bigint(20)") },
133  { NULL, 0}
134  },
135  {
136  { C_STRING_WITH_LEN("SUM_TIMER_MISC") },
137  { C_STRING_WITH_LEN("bigint(20)") },
138  { NULL, 0}
139  },
140  {
141  { C_STRING_WITH_LEN("MIN_TIMER_MISC") },
142  { C_STRING_WITH_LEN("bigint(20)") },
143  { NULL, 0}
144  },
145  {
146  { C_STRING_WITH_LEN("AVG_TIMER_MISC") },
147  { C_STRING_WITH_LEN("bigint(20)") },
148  { NULL, 0}
149  },
150  {
151  { C_STRING_WITH_LEN("MAX_TIMER_MISC") },
152  { C_STRING_WITH_LEN("bigint(20)") },
153  { NULL, 0}
154  }
155 };
156 
158 table_socket_summary_by_event_name::m_field_def=
159 { 23, field_types };
160 
163 {
164  { C_STRING_WITH_LEN("socket_summary_by_event_name") },
166  &table_socket_summary_by_event_name::create,
167  NULL, /* write_row */
168  table_socket_summary_by_event_name::delete_all_rows,
169  NULL, /* get_row_count */
170  1000, /* records */
171  sizeof(PFS_simple_index),
172  &m_table_lock,
173  &m_field_def,
174  false /* checked */
175 };
176 
177 PFS_engine_table* table_socket_summary_by_event_name::create(void)
178 {
180 }
181 
182 table_socket_summary_by_event_name::table_socket_summary_by_event_name()
183  : PFS_engine_table(&m_share, &m_pos),
184  m_row_exists(false), m_pos(1), m_next_pos(1)
185 {}
186 
187 int table_socket_summary_by_event_name::delete_all_rows(void)
188 {
191  return 0;
192 }
193 
195 {
196  m_pos.m_index= 1;
197  m_next_pos.m_index= 1;
198 }
199 
201 {
202  PFS_socket_class *socket_class;
203 
204  m_pos.set_at(&m_next_pos);
205 
206  socket_class= find_socket_class(m_pos.m_index);
207  if (socket_class)
208  {
209  make_row(socket_class);
210  m_next_pos.set_after(&m_pos);
211  return 0;
212  }
213 
214  return HA_ERR_END_OF_FILE;
215 }
216 
218 {
219  PFS_socket_class *socket_class;
220 
221  set_position(pos);
222 
223  socket_class= find_socket_class(m_pos.m_index);
224  if (socket_class)
225  {
226  make_row(socket_class);
227  return 0;
228  }
229 
230  return HA_ERR_RECORD_DELETED;
231 }
232 
233 void table_socket_summary_by_event_name::make_row(PFS_socket_class *socket_class)
234 {
235  m_row.m_event_name.make_row(socket_class);
236 
238  PFS_instance_iterator::visit_socket_instances(socket_class, &visitor);
239 
241 
242  /* Collect timer and byte count stats */
243  m_row.m_io_stat.set(normalizer, &visitor.m_socket_io_stat);
244  m_row_exists= true;
245 }
246 
247 int table_socket_summary_by_event_name::read_row_values(TABLE *table,
248  unsigned char *,
249  Field **fields,
250  bool read_all)
251 {
252  Field *f;
253 
254  if (unlikely(!m_row_exists))
255  return HA_ERR_RECORD_DELETED;
256 
257  /* Set the null bits */
258  DBUG_ASSERT(table->s->null_bytes == 0);
259 
260  for (; (f= *fields) ; fields++)
261  {
262  if (read_all || bitmap_is_set(table->read_set, f->field_index))
263  {
264  switch(f->field_index)
265  {
266  case 0: /* EVENT_NAME */
267  m_row.m_event_name.set_field(f);
268  break;
269  case 1: /* COUNT_STAR */
270  set_field_ulonglong(f, m_row.m_io_stat.m_all.m_waits.m_count);
271  break;
272  case 2: /* SUM_TIMER_WAIT */
273  set_field_ulonglong(f, m_row.m_io_stat.m_all.m_waits.m_sum);
274  break;
275  case 3: /* MIN_TIMER_WAIT */
276  set_field_ulonglong(f, m_row.m_io_stat.m_all.m_waits.m_min);
277  break;
278  case 4: /* AVG_TIMER_WAIT */
279  set_field_ulonglong(f, m_row.m_io_stat.m_all.m_waits.m_avg);
280  break;
281  case 5: /* MAX_TIMER_WAIT */
282  set_field_ulonglong(f, m_row.m_io_stat.m_all.m_waits.m_max);
283  break;
284 
285  case 6: /* COUNT_READ */
286  set_field_ulonglong(f, m_row.m_io_stat.m_read.m_waits.m_count);
287  break;
288  case 7: /* SUM_TIMER_READ */
289  set_field_ulonglong(f, m_row.m_io_stat.m_read.m_waits.m_sum);
290  break;
291  case 8: /* MIN_TIMER_READ */
292  set_field_ulonglong(f, m_row.m_io_stat.m_read.m_waits.m_min);
293  break;
294  case 9: /* AVG_TIMER_READ */
295  set_field_ulonglong(f, m_row.m_io_stat.m_read.m_waits.m_avg);
296  break;
297  case 10: /* MAX_TIMER_READ */
298  set_field_ulonglong(f, m_row.m_io_stat.m_read.m_waits.m_max);
299  break;
300  case 11: /* SUM_NUMBER_OF_BYTES_READ */
301  set_field_ulonglong(f, m_row.m_io_stat.m_read.m_bytes);
302  break;
303 
304  case 12: /* COUNT_WRITE */
305  set_field_ulonglong(f, m_row.m_io_stat.m_write.m_waits.m_count);
306  break;
307  case 13: /* SUM_TIMER_WRITE */
308  set_field_ulonglong(f, m_row.m_io_stat.m_write.m_waits.m_sum);
309  break;
310  case 14: /* MIN_TIMER_WRITE */
311  set_field_ulonglong(f, m_row.m_io_stat.m_write.m_waits.m_min);
312  break;
313  case 15: /* AVG_TIMER_WRITE */
314  set_field_ulonglong(f, m_row.m_io_stat.m_write.m_waits.m_avg);
315  break;
316  case 16: /* MAX_TIMER_WRITE */
317  set_field_ulonglong(f, m_row.m_io_stat.m_write.m_waits.m_max);
318  break;
319  case 17: /* SUM_NUMBER_OF_BYTES_WRITE */
320  set_field_ulonglong(f, m_row.m_io_stat.m_write.m_bytes);
321  break;
322 
323  case 18: /* COUNT_MISC */
324  set_field_ulonglong(f, m_row.m_io_stat.m_misc.m_waits.m_count);
325  break;
326  case 19: /* SUM_TIMER_MISC */
327  set_field_ulonglong(f, m_row.m_io_stat.m_misc.m_waits.m_sum);
328  break;
329  case 20: /* MIN_TIMER_MISC */
330  set_field_ulonglong(f, m_row.m_io_stat.m_misc.m_waits.m_min);
331  break;
332  case 21: /* AVG_TIMER_MISC */
333  set_field_ulonglong(f, m_row.m_io_stat.m_misc.m_waits.m_avg);
334  break;
335  case 22: /* MAX_TIMER_MISC */
336  set_field_ulonglong(f, m_row.m_io_stat.m_misc.m_waits.m_max);
337  break;
338 
339  default:
340  DBUG_ASSERT(false);
341  break;
342  }
343  } // if
344  } // for
345 
346  return 0;
347 }
348