1 /* Copyright (c) 2010, 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 Street, Fifth Floor, Boston, MA 02110-1301, USA */
22 
23 /**
24   @file storage/perfschema/table_tlws_by_table.cc
25   Table TABLE_LOCK_WAITS_SUMMARY_BY_TABLE (implementation).
26 */
27 
28 #include "my_global.h"
29 #include "my_thread.h"
30 #include "pfs_instr_class.h"
31 #include "pfs_column_types.h"
32 #include "pfs_column_values.h"
33 #include "table_tlws_by_table.h"
34 #include "pfs_global.h"
35 #include "pfs_visitor.h"
36 #include "pfs_buffer_container.h"
37 #include "field.h"
38 
39 THR_LOCK table_tlws_by_table::m_table_lock;
40 
41 static const TABLE_FIELD_TYPE field_types[]=
42 {
43   {
44     { C_STRING_WITH_LEN("OBJECT_TYPE") },
45     { C_STRING_WITH_LEN("varchar(64)") },
46     { NULL, 0}
47   },
48   {
49     { C_STRING_WITH_LEN("OBJECT_SCHEMA") },
50     { C_STRING_WITH_LEN("varchar(64)") },
51     { NULL, 0}
52   },
53   {
54     { C_STRING_WITH_LEN("OBJECT_NAME") },
55     { C_STRING_WITH_LEN("varchar(64)") },
56     { NULL, 0}
57   },
58   {
59     { C_STRING_WITH_LEN("COUNT_STAR") },
60     { C_STRING_WITH_LEN("bigint(20)") },
61     { NULL, 0}
62   },
63   {
64     { C_STRING_WITH_LEN("SUM_TIMER_WAIT") },
65     { C_STRING_WITH_LEN("bigint(20)") },
66     { NULL, 0}
67   },
68   {
69     { C_STRING_WITH_LEN("MIN_TIMER_WAIT") },
70     { C_STRING_WITH_LEN("bigint(20)") },
71     { NULL, 0}
72   },
73   {
74     { C_STRING_WITH_LEN("AVG_TIMER_WAIT") },
75     { C_STRING_WITH_LEN("bigint(20)") },
76     { NULL, 0}
77   },
78   {
79     { C_STRING_WITH_LEN("MAX_TIMER_WAIT") },
80     { C_STRING_WITH_LEN("bigint(20)") },
81     { NULL, 0}
82   },
83   {
84     { C_STRING_WITH_LEN("COUNT_READ") },
85     { C_STRING_WITH_LEN("bigint(20)") },
86     { NULL, 0}
87   },
88   {
89     { C_STRING_WITH_LEN("SUM_TIMER_READ") },
90     { C_STRING_WITH_LEN("bigint(20)") },
91     { NULL, 0}
92   },
93   {
94     { C_STRING_WITH_LEN("MIN_TIMER_READ") },
95     { C_STRING_WITH_LEN("bigint(20)") },
96     { NULL, 0}
97   },
98   {
99     { C_STRING_WITH_LEN("AVG_TIMER_READ") },
100     { C_STRING_WITH_LEN("bigint(20)") },
101     { NULL, 0}
102   },
103   {
104     { C_STRING_WITH_LEN("MAX_TIMER_READ") },
105     { C_STRING_WITH_LEN("bigint(20)") },
106     { NULL, 0}
107   },
108   {
109     { C_STRING_WITH_LEN("COUNT_WRITE") },
110     { C_STRING_WITH_LEN("bigint(20)") },
111     { NULL, 0}
112   },
113   {
114     { C_STRING_WITH_LEN("SUM_TIMER_WRITE") },
115     { C_STRING_WITH_LEN("bigint(20)") },
116     { NULL, 0}
117   },
118   {
119     { C_STRING_WITH_LEN("MIN_TIMER_WRITE") },
120     { C_STRING_WITH_LEN("bigint(20)") },
121     { NULL, 0}
122   },
123   {
124     { C_STRING_WITH_LEN("AVG_TIMER_WRITE") },
125     { C_STRING_WITH_LEN("bigint(20)") },
126     { NULL, 0}
127   },
128   {
129     { C_STRING_WITH_LEN("MAX_TIMER_WRITE") },
130     { C_STRING_WITH_LEN("bigint(20)") },
131     { NULL, 0}
132   },
133   {
134     { C_STRING_WITH_LEN("COUNT_READ_NORMAL") },
135     { C_STRING_WITH_LEN("bigint(20)") },
136     { NULL, 0}
137   },
138   {
139     { C_STRING_WITH_LEN("SUM_TIMER_READ_NORMAL") },
140     { C_STRING_WITH_LEN("bigint(20)") },
141     { NULL, 0}
142   },
143   {
144     { C_STRING_WITH_LEN("MIN_TIMER_READ_NORMAL") },
145     { C_STRING_WITH_LEN("bigint(20)") },
146     { NULL, 0}
147   },
148   {
149     { C_STRING_WITH_LEN("AVG_TIMER_READ_NORMAL") },
150     { C_STRING_WITH_LEN("bigint(20)") },
151     { NULL, 0}
152   },
153   {
154     { C_STRING_WITH_LEN("MAX_TIMER_READ_NORMAL") },
155     { C_STRING_WITH_LEN("bigint(20)") },
156     { NULL, 0}
157   },
158   {
159     { C_STRING_WITH_LEN("COUNT_READ_WITH_SHARED_LOCKS") },
160     { C_STRING_WITH_LEN("bigint(20)") },
161     { NULL, 0}
162   },
163   {
164     { C_STRING_WITH_LEN("SUM_TIMER_READ_WITH_SHARED_LOCKS") },
165     { C_STRING_WITH_LEN("bigint(20)") },
166     { NULL, 0}
167   },
168   {
169     { C_STRING_WITH_LEN("MIN_TIMER_READ_WITH_SHARED_LOCKS") },
170     { C_STRING_WITH_LEN("bigint(20)") },
171     { NULL, 0}
172   },
173   {
174     { C_STRING_WITH_LEN("AVG_TIMER_READ_WITH_SHARED_LOCKS") },
175     { C_STRING_WITH_LEN("bigint(20)") },
176     { NULL, 0}
177   },
178   {
179     { C_STRING_WITH_LEN("MAX_TIMER_READ_WITH_SHARED_LOCKS") },
180     { C_STRING_WITH_LEN("bigint(20)") },
181     { NULL, 0}
182   },
183   {
184     { C_STRING_WITH_LEN("COUNT_READ_HIGH_PRIORITY") },
185     { C_STRING_WITH_LEN("bigint(20)") },
186     { NULL, 0}
187   },
188   {
189     { C_STRING_WITH_LEN("SUM_TIMER_READ_HIGH_PRIORITY") },
190     { C_STRING_WITH_LEN("bigint(20)") },
191     { NULL, 0}
192   },
193   {
194     { C_STRING_WITH_LEN("MIN_TIMER_READ_HIGH_PRIORITY") },
195     { C_STRING_WITH_LEN("bigint(20)") },
196     { NULL, 0}
197   },
198   {
199     { C_STRING_WITH_LEN("AVG_TIMER_READ_HIGH_PRIORITY") },
200     { C_STRING_WITH_LEN("bigint(20)") },
201     { NULL, 0}
202   },
203   {
204     { C_STRING_WITH_LEN("MAX_TIMER_READ_HIGH_PRIORITY") },
205     { C_STRING_WITH_LEN("bigint(20)") },
206     { NULL, 0}
207   },
208   {
209     { C_STRING_WITH_LEN("COUNT_READ_NO_INSERT") },
210     { C_STRING_WITH_LEN("bigint(20)") },
211     { NULL, 0}
212   },
213   {
214     { C_STRING_WITH_LEN("SUM_TIMER_READ_NO_INSERT") },
215     { C_STRING_WITH_LEN("bigint(20)") },
216     { NULL, 0}
217   },
218   {
219     { C_STRING_WITH_LEN("MIN_TIMER_READ_NO_INSERT") },
220     { C_STRING_WITH_LEN("bigint(20)") },
221     { NULL, 0}
222   },
223   {
224     { C_STRING_WITH_LEN("AVG_TIMER_READ_NO_INSERT") },
225     { C_STRING_WITH_LEN("bigint(20)") },
226     { NULL, 0}
227   },
228   {
229     { C_STRING_WITH_LEN("MAX_TIMER_READ_NO_INSERT") },
230     { C_STRING_WITH_LEN("bigint(20)") },
231     { NULL, 0}
232   },
233   {
234     { C_STRING_WITH_LEN("COUNT_READ_EXTERNAL") },
235     { C_STRING_WITH_LEN("bigint(20)") },
236     { NULL, 0}
237   },
238   {
239     { C_STRING_WITH_LEN("SUM_TIMER_READ_EXTERNAL") },
240     { C_STRING_WITH_LEN("bigint(20)") },
241     { NULL, 0}
242   },
243   {
244     { C_STRING_WITH_LEN("MIN_TIMER_READ_EXTERNAL") },
245     { C_STRING_WITH_LEN("bigint(20)") },
246     { NULL, 0}
247   },
248   {
249     { C_STRING_WITH_LEN("AVG_TIMER_READ_EXTERNAL") },
250     { C_STRING_WITH_LEN("bigint(20)") },
251     { NULL, 0}
252   },
253   {
254     { C_STRING_WITH_LEN("MAX_TIMER_READ_EXTERNAL") },
255     { C_STRING_WITH_LEN("bigint(20)") },
256     { NULL, 0}
257   },
258   {
259     { C_STRING_WITH_LEN("COUNT_WRITE_ALLOW_WRITE") },
260     { C_STRING_WITH_LEN("bigint(20)") },
261     { NULL, 0}
262   },
263   {
264     { C_STRING_WITH_LEN("SUM_TIMER_WRITE_ALLOW_WRITE") },
265     { C_STRING_WITH_LEN("bigint(20)") },
266     { NULL, 0}
267   },
268   {
269     { C_STRING_WITH_LEN("MIN_TIMER_WRITE_ALLOW_WRITE") },
270     { C_STRING_WITH_LEN("bigint(20)") },
271     { NULL, 0}
272   },
273   {
274     { C_STRING_WITH_LEN("AVG_TIMER_WRITE_ALLOW_WRITE") },
275     { C_STRING_WITH_LEN("bigint(20)") },
276     { NULL, 0}
277   },
278   {
279     { C_STRING_WITH_LEN("MAX_TIMER_WRITE_ALLOW_WRITE") },
280     { C_STRING_WITH_LEN("bigint(20)") },
281     { NULL, 0}
282   },
283   {
284     { C_STRING_WITH_LEN("COUNT_WRITE_CONCURRENT_INSERT") },
285     { C_STRING_WITH_LEN("bigint(20)") },
286     { NULL, 0}
287   },
288   {
289     { C_STRING_WITH_LEN("SUM_TIMER_WRITE_CONCURRENT_INSERT") },
290     { C_STRING_WITH_LEN("bigint(20)") },
291     { NULL, 0}
292   },
293   {
294     { C_STRING_WITH_LEN("MIN_TIMER_WRITE_CONCURRENT_INSERT") },
295     { C_STRING_WITH_LEN("bigint(20)") },
296     { NULL, 0}
297   },
298   {
299     { C_STRING_WITH_LEN("AVG_TIMER_WRITE_CONCURRENT_INSERT") },
300     { C_STRING_WITH_LEN("bigint(20)") },
301     { NULL, 0}
302   },
303   {
304     { C_STRING_WITH_LEN("MAX_TIMER_WRITE_CONCURRENT_INSERT") },
305     { C_STRING_WITH_LEN("bigint(20)") },
306     { NULL, 0}
307   },
308   {
309     { C_STRING_WITH_LEN("COUNT_WRITE_LOW_PRIORITY") },
310     { C_STRING_WITH_LEN("bigint(20)") },
311     { NULL, 0}
312   },
313   {
314     { C_STRING_WITH_LEN("SUM_TIMER_WRITE_LOW_PRIORITY") },
315     { C_STRING_WITH_LEN("bigint(20)") },
316     { NULL, 0}
317   },
318   {
319     { C_STRING_WITH_LEN("MIN_TIMER_WRITE_LOW_PRIORITY") },
320     { C_STRING_WITH_LEN("bigint(20)") },
321     { NULL, 0}
322   },
323   {
324     { C_STRING_WITH_LEN("AVG_TIMER_WRITE_LOW_PRIORITY") },
325     { C_STRING_WITH_LEN("bigint(20)") },
326     { NULL, 0}
327   },
328   {
329     { C_STRING_WITH_LEN("MAX_TIMER_WRITE_LOW_PRIORITY") },
330     { C_STRING_WITH_LEN("bigint(20)") },
331     { NULL, 0}
332   },
333   {
334     { C_STRING_WITH_LEN("COUNT_WRITE_NORMAL") },
335     { C_STRING_WITH_LEN("bigint(20)") },
336     { NULL, 0}
337   },
338   {
339     { C_STRING_WITH_LEN("SUM_TIMER_WRITE_NORMAL") },
340     { C_STRING_WITH_LEN("bigint(20)") },
341     { NULL, 0}
342   },
343   {
344     { C_STRING_WITH_LEN("MIN_TIMER_WRITE_NORMAL") },
345     { C_STRING_WITH_LEN("bigint(20)") },
346     { NULL, 0}
347   },
348   {
349     { C_STRING_WITH_LEN("AVG_TIMER_WRITE_NORMAL") },
350     { C_STRING_WITH_LEN("bigint(20)") },
351     { NULL, 0}
352   },
353   {
354     { C_STRING_WITH_LEN("MAX_TIMER_WRITE_NORMAL") },
355     { C_STRING_WITH_LEN("bigint(20)") },
356     { NULL, 0}
357   },
358   {
359     { C_STRING_WITH_LEN("COUNT_WRITE_EXTERNAL") },
360     { C_STRING_WITH_LEN("bigint(20)") },
361     { NULL, 0}
362   },
363   {
364     { C_STRING_WITH_LEN("SUM_TIMER_WRITE_EXTERNAL") },
365     { C_STRING_WITH_LEN("bigint(20)") },
366     { NULL, 0}
367   },
368   {
369     { C_STRING_WITH_LEN("MIN_TIMER_WRITE_EXTERNAL") },
370     { C_STRING_WITH_LEN("bigint(20)") },
371     { NULL, 0}
372   },
373   {
374     { C_STRING_WITH_LEN("AVG_TIMER_WRITE_EXTERNAL") },
375     { C_STRING_WITH_LEN("bigint(20)") },
376     { NULL, 0}
377   },
378   {
379     { C_STRING_WITH_LEN("MAX_TIMER_WRITE_EXTERNAL") },
380     { C_STRING_WITH_LEN("bigint(20)") },
381     { NULL, 0}
382   }
383 };
384 
385 TABLE_FIELD_DEF
386 table_tlws_by_table::m_field_def=
387 { sizeof(field_types) / sizeof(TABLE_FIELD_TYPE), field_types };
388 
389 PFS_engine_table_share
390 table_tlws_by_table::m_share=
391 {
392   { C_STRING_WITH_LEN("table_lock_waits_summary_by_table") },
393   &pfs_truncatable_acl,
394   table_tlws_by_table::create,
395   NULL, /* write_row */
396   table_tlws_by_table::delete_all_rows,
397   table_tlws_by_table::get_row_count,
398   sizeof(PFS_simple_index),
399   &m_table_lock,
400   &m_field_def,
401   false, /* checked */
402   false  /* perpetual */
403 };
404 
405 PFS_engine_table*
create(void)406 table_tlws_by_table::create(void)
407 {
408   return new table_tlws_by_table();
409 }
410 
411 int
delete_all_rows(void)412 table_tlws_by_table::delete_all_rows(void)
413 {
414   reset_table_lock_waits_by_table_handle();
415   reset_table_lock_waits_by_table();
416   return 0;
417 }
418 
419 ha_rows
get_row_count(void)420 table_tlws_by_table::get_row_count(void)
421 {
422   return global_table_share_container.get_row_count();
423 }
424 
table_tlws_by_table()425 table_tlws_by_table::table_tlws_by_table()
426   : PFS_engine_table(&m_share, &m_pos),
427     m_row_exists(false), m_pos(0), m_next_pos(0)
428 {}
429 
reset_position(void)430 void table_tlws_by_table::reset_position(void)
431 {
432   m_pos.m_index= 0;
433   m_next_pos.m_index= 0;
434 }
435 
rnd_init(bool scan)436 int table_tlws_by_table::rnd_init(bool scan)
437 {
438   m_normalizer= time_normalizer::get(wait_timer);
439   return 0;
440 }
441 
rnd_next(void)442 int table_tlws_by_table::rnd_next(void)
443 {
444   PFS_table_share *pfs;
445 
446   m_pos.set_at(&m_next_pos);
447   PFS_table_share_iterator it= global_table_share_container.iterate(m_pos.m_index);
448   do
449   {
450     pfs= it.scan_next(& m_pos.m_index);
451     if (pfs != NULL)
452     {
453       if (pfs->m_enabled)
454       {
455         make_row(pfs);
456         m_next_pos.set_after(&m_pos);
457         return 0;
458       }
459     }
460   } while (pfs != NULL);
461 
462   return HA_ERR_END_OF_FILE;
463 }
464 
465 int
rnd_pos(const void * pos)466 table_tlws_by_table::rnd_pos(const void *pos)
467 {
468   PFS_table_share *pfs;
469 
470   set_position(pos);
471 
472   pfs= global_table_share_container.get(m_pos.m_index);
473   if (pfs != NULL)
474   {
475     if (pfs->m_enabled)
476     {
477       make_row(pfs);
478       return 0;
479     }
480   }
481 
482   return HA_ERR_RECORD_DELETED;
483 }
484 
make_row(PFS_table_share * share)485 void table_tlws_by_table::make_row(PFS_table_share *share)
486 {
487   pfs_optimistic_state lock;
488 
489   m_row_exists= false;
490 
491   share->m_lock.begin_optimistic_lock(&lock);
492 
493   if (m_row.m_object.make_row(share))
494     return;
495 
496   PFS_table_lock_stat_visitor visitor;
497   PFS_object_iterator::visit_tables(share, & visitor);
498 
499   if (! share->m_lock.end_optimistic_lock(&lock))
500     return;
501 
502   m_row_exists= true;
503   m_row.m_stat.set(m_normalizer, &visitor.m_stat);
504 }
505 
read_row_values(TABLE * table,unsigned char * buf,Field ** fields,bool read_all)506 int table_tlws_by_table::read_row_values(TABLE *table,
507                                          unsigned char *buf,
508                                          Field **fields,
509                                          bool read_all)
510 {
511   Field *f;
512 
513   if (unlikely(! m_row_exists))
514     return HA_ERR_RECORD_DELETED;
515 
516   /* Set the null bits */
517   assert(table->s->null_bytes == 1);
518   buf[0]= 0;
519 
520   for (; (f= *fields) ; fields++)
521   {
522     if (read_all || bitmap_is_set(table->read_set, f->field_index))
523     {
524       switch(f->field_index)
525       {
526       case 0: /* OBJECT_TYPE */
527       case 1: /* SCHEMA_NAME */
528       case 2: /* OBJECT_NAME */
529         m_row.m_object.set_field(f->field_index, f);
530         break;
531       case 3: /* COUNT_STAR */
532         set_field_ulonglong(f, m_row.m_stat.m_all.m_count);
533         break;
534       case 4: /* SUM_TIMER */
535         set_field_ulonglong(f, m_row.m_stat.m_all.m_sum);
536         break;
537       case 5: /* MIN_TIMER */
538         set_field_ulonglong(f, m_row.m_stat.m_all.m_min);
539         break;
540       case 6: /* AVG_TIMER */
541         set_field_ulonglong(f, m_row.m_stat.m_all.m_avg);
542         break;
543       case 7: /* MAX_TIMER */
544         set_field_ulonglong(f, m_row.m_stat.m_all.m_max);
545         break;
546       case 8: /* COUNT_READ */
547         set_field_ulonglong(f, m_row.m_stat.m_all_read.m_count);
548         break;
549       case 9: /* SUM_TIMER_READ */
550         set_field_ulonglong(f, m_row.m_stat.m_all_read.m_sum);
551         break;
552       case 10: /* MIN_TIMER_READ */
553         set_field_ulonglong(f, m_row.m_stat.m_all_read.m_min);
554         break;
555       case 11: /* AVG_TIMER_READ */
556         set_field_ulonglong(f, m_row.m_stat.m_all_read.m_avg);
557         break;
558       case 12: /* MAX_TIMER_READ */
559         set_field_ulonglong(f, m_row.m_stat.m_all_read.m_max);
560         break;
561       case 13: /* COUNT_WRITE */
562         set_field_ulonglong(f, m_row.m_stat.m_all_write.m_count);
563         break;
564       case 14: /* SUM_TIMER_WRITE */
565         set_field_ulonglong(f, m_row.m_stat.m_all_write.m_sum);
566         break;
567       case 15: /* MIN_TIMER_WRITE */
568         set_field_ulonglong(f, m_row.m_stat.m_all_write.m_min);
569         break;
570       case 16: /* AVG_TIMER_WRITE */
571         set_field_ulonglong(f, m_row.m_stat.m_all_write.m_avg);
572         break;
573       case 17: /* MAX_TIMER_WRITE */
574         set_field_ulonglong(f, m_row.m_stat.m_all_write.m_max);
575         break;
576 
577       case 18: /* COUNT_READ_NORMAL */
578         set_field_ulonglong(f, m_row.m_stat.m_read_normal.m_count);
579         break;
580       case 19: /* SUM_TIMER_READ_NORMAL */
581         set_field_ulonglong(f, m_row.m_stat.m_read_normal.m_sum);
582         break;
583       case 20: /* MIN_TIMER_READ_NORMAL */
584         set_field_ulonglong(f, m_row.m_stat.m_read_normal.m_min);
585         break;
586       case 21: /* AVG_TIMER_READ_NORMAL */
587         set_field_ulonglong(f, m_row.m_stat.m_read_normal.m_avg);
588         break;
589       case 22: /* MAX_TIMER_READ_NORMAL */
590         set_field_ulonglong(f, m_row.m_stat.m_read_normal.m_max);
591         break;
592 
593       case 23: /* COUNT_READ_WITH_SHARED_LOCKS */
594         set_field_ulonglong(f, m_row.m_stat.m_read_with_shared_locks.m_count);
595         break;
596       case 24: /* SUM_TIMER_READ_WITH_SHARED_LOCKS */
597         set_field_ulonglong(f, m_row.m_stat.m_read_with_shared_locks.m_sum);
598         break;
599       case 25: /* MIN_TIMER_READ_WITH_SHARED_LOCKS */
600         set_field_ulonglong(f, m_row.m_stat.m_read_with_shared_locks.m_min);
601         break;
602       case 26: /* AVG_TIMER_READ_WITH_SHARED_LOCKS */
603         set_field_ulonglong(f, m_row.m_stat.m_read_with_shared_locks.m_avg);
604         break;
605       case 27: /* MAX_TIMER_READ_WITH_SHARED_LOCKS */
606         set_field_ulonglong(f, m_row.m_stat.m_read_with_shared_locks.m_max);
607         break;
608 
609       case 28: /* COUNT_READ_HIGH_PRIORITY */
610         set_field_ulonglong(f, m_row.m_stat.m_read_high_priority.m_count);
611         break;
612       case 29: /* SUM_TIMER_READ_HIGH_PRIORITY */
613         set_field_ulonglong(f, m_row.m_stat.m_read_high_priority.m_sum);
614         break;
615       case 30: /* MIN_TIMER_READ_HIGH_PRIORITY */
616         set_field_ulonglong(f, m_row.m_stat.m_read_high_priority.m_min);
617         break;
618       case 31: /* AVG_TIMER_READ_HIGH_PRIORITY */
619         set_field_ulonglong(f, m_row.m_stat.m_read_high_priority.m_avg);
620         break;
621       case 32: /* MAX_TIMER_READ_HIGH_PRIORITY */
622         set_field_ulonglong(f, m_row.m_stat.m_read_high_priority.m_max);
623         break;
624 
625       case 33: /* COUNT_READ_NO_INSERT */
626         set_field_ulonglong(f, m_row.m_stat.m_read_no_insert.m_count);
627         break;
628       case 34: /* SUM_TIMER_READ_NO_INSERT */
629         set_field_ulonglong(f, m_row.m_stat.m_read_no_insert.m_sum);
630         break;
631       case 35: /* MIN_TIMER_READ_NO_INSERT */
632         set_field_ulonglong(f, m_row.m_stat.m_read_no_insert.m_min);
633         break;
634       case 36: /* AVG_TIMER_READ_NO_INSERT */
635         set_field_ulonglong(f, m_row.m_stat.m_read_no_insert.m_avg);
636         break;
637       case 37: /* MAX_TIMER_READ_NO_INSERT */
638         set_field_ulonglong(f, m_row.m_stat.m_read_no_insert.m_max);
639         break;
640 
641       case 38: /* COUNT_READ_EXTERNAL */
642         set_field_ulonglong(f, m_row.m_stat.m_read_external.m_count);
643         break;
644       case 39: /* SUM_TIMER_READ_EXTERNAL */
645         set_field_ulonglong(f, m_row.m_stat.m_read_external.m_sum);
646         break;
647       case 40: /* MIN_TIMER_READ_EXTERNAL */
648         set_field_ulonglong(f, m_row.m_stat.m_read_external.m_min);
649         break;
650       case 41: /* AVG_TIMER_READ_EXTERNAL */
651         set_field_ulonglong(f, m_row.m_stat.m_read_external.m_avg);
652         break;
653       case 42: /* MAX_TIMER_READ_EXTERNAL */
654         set_field_ulonglong(f, m_row.m_stat.m_read_external.m_max);
655         break;
656 
657       case 43: /* COUNT_WRITE_ALLOW_WRITE */
658         set_field_ulonglong(f, m_row.m_stat.m_write_allow_write.m_count);
659         break;
660       case 44: /* SUM_TIMER_WRITE_ALLOW_WRITE */
661         set_field_ulonglong(f, m_row.m_stat.m_write_allow_write.m_sum);
662         break;
663       case 45: /* MIN_TIMER_WRITE_ALLOW_WRITE */
664         set_field_ulonglong(f, m_row.m_stat.m_write_allow_write.m_min);
665         break;
666       case 46: /* AVG_TIMER_WRITE_ALLOW_WRITE */
667         set_field_ulonglong(f, m_row.m_stat.m_write_allow_write.m_avg);
668         break;
669       case 47: /* MAX_TIMER_WRITE_ALLOW_WRITE */
670         set_field_ulonglong(f, m_row.m_stat.m_write_allow_write.m_max);
671         break;
672 
673       case 48: /* COUNT_WRITE_CONCURRENT_INSERT */
674         set_field_ulonglong(f, m_row.m_stat.m_write_concurrent_insert.m_count);
675         break;
676       case 49: /* SUM_TIMER_WRITE_CONCURRENT_INSERT */
677         set_field_ulonglong(f, m_row.m_stat.m_write_concurrent_insert.m_sum);
678         break;
679       case 50: /* MIN_TIMER_WRITE_CONCURRENT_INSERT */
680         set_field_ulonglong(f, m_row.m_stat.m_write_concurrent_insert.m_min);
681         break;
682       case 51: /* AVG_TIMER_WRITE_CONCURRENT_INSERT */
683         set_field_ulonglong(f, m_row.m_stat.m_write_concurrent_insert.m_avg);
684         break;
685       case 52: /* MAX_TIMER_WRITE_CONCURRENT_INSERT */
686         set_field_ulonglong(f, m_row.m_stat.m_write_concurrent_insert.m_max);
687         break;
688 
689       case 53: /* COUNT_WRITE_LOW_PRIORITY */
690         set_field_ulonglong(f, m_row.m_stat.m_write_low_priority.m_count);
691         break;
692       case 54: /* SUM_TIMER_WRITE_LOW_PRIORITY */
693         set_field_ulonglong(f, m_row.m_stat.m_write_low_priority.m_sum);
694         break;
695       case 55: /* MIN_TIMER_WRITE_LOW_PRIORITY */
696         set_field_ulonglong(f, m_row.m_stat.m_write_low_priority.m_min);
697         break;
698       case 56: /* AVG_TIMER_WRITE_LOW_PRIORITY */
699         set_field_ulonglong(f, m_row.m_stat.m_write_low_priority.m_avg);
700         break;
701       case 57: /* MAX_TIMER_WRITE_LOW_PRIORITY */
702         set_field_ulonglong(f, m_row.m_stat.m_write_low_priority.m_max);
703         break;
704 
705       case 58: /* COUNT_WRITE_NORMAL */
706         set_field_ulonglong(f, m_row.m_stat.m_write_normal.m_count);
707         break;
708       case 59: /* SUM_TIMER_WRITE_NORMAL */
709         set_field_ulonglong(f, m_row.m_stat.m_write_normal.m_sum);
710         break;
711       case 60: /* MIN_TIMER_WRITE_NORMAL */
712         set_field_ulonglong(f, m_row.m_stat.m_write_normal.m_min);
713         break;
714       case 61: /* AVG_TIMER_WRITE_NORMAL */
715         set_field_ulonglong(f, m_row.m_stat.m_write_normal.m_avg);
716         break;
717       case 62: /* MAX_TIMER_WRITE_NORMAL */
718         set_field_ulonglong(f, m_row.m_stat.m_write_normal.m_max);
719         break;
720 
721       case 63: /* COUNT_WRITE_EXTERNAL */
722         set_field_ulonglong(f, m_row.m_stat.m_write_external.m_count);
723         break;
724       case 64: /* SUM_TIMER_WRITE_EXTERNAL */
725         set_field_ulonglong(f, m_row.m_stat.m_write_external.m_sum);
726         break;
727       case 65: /* MIN_TIMER_WRITE_EXTERNAL */
728         set_field_ulonglong(f, m_row.m_stat.m_write_external.m_min);
729         break;
730       case 66: /* AVG_TIMER_WRITE_EXTERNAL */
731         set_field_ulonglong(f, m_row.m_stat.m_write_external.m_avg);
732         break;
733       case 67: /* MAX_TIMER_WRITE_EXTERNAL */
734         set_field_ulonglong(f, m_row.m_stat.m_write_external.m_max);
735         break;
736 
737       default:
738         assert(false);
739       }
740     }
741   }
742 
743   return 0;
744 }
745 
746