From: Christopher Powers Date: February 4 2011 10:01pm Subject: bzr push into mysql-trunk-wl5379 branch (chris.powers:3220 to 3221) WL#4896 List-Archive: http://lists.mysql.com/commits/130483 Message-Id: <20110204220112.690521DB0333@xeno.mysql.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5901060193669242110==" --===============5901060193669242110== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3221 Christopher Powers 2011-02-04 WL#4896 "Peformance Schema Net IO" - Intermediate version - Added table socket_summary_by_instance - Updates per worklog review added: storage/perfschema/table_socket_summary_by_instance.cc storage/perfschema/table_socket_summary_by_instance.h modified: include/mysql/psi/mysql_socket.h* storage/perfschema/pfs.cc* storage/perfschema/pfs_column_types.h* storage/perfschema/pfs_engine_table.cc* storage/perfschema/pfs_events_waits.h* storage/perfschema/pfs_instr_class.cc* storage/perfschema/table_events_waits.cc* 3220 Christopher Powers 2011-01-26 Merge w/ mysql-trunk-wl5379 modified: storage/perfschema/CMakeLists.txt* storage/perfschema/pfs.cc* storage/perfschema/pfs_column_types.h* storage/perfschema/pfs_engine_table.cc* storage/perfschema/pfs_events_waits.h* storage/perfschema/pfs_instr_class.cc* storage/perfschema/table_events_waits.cc* === modified file 'include/mysql/psi/mysql_socket.h' (properties changed: +x to -x) === modified file 'storage/perfschema/pfs.cc' (properties changed: +x to -x) === modified file 'storage/perfschema/pfs_column_types.h' (properties changed: +x to -x) === modified file 'storage/perfschema/pfs_engine_table.cc' (properties changed: +x to -x) === modified file 'storage/perfschema/pfs_events_waits.h' (properties changed: +x to -x) === modified file 'storage/perfschema/pfs_instr_class.cc' (properties changed: +x to -x) === modified file 'storage/perfschema/table_events_waits.cc' (properties changed: +x to -x) === added file 'storage/perfschema/table_socket_summary_by_instance.cc' --- a/storage/perfschema/table_socket_summary_by_instance.cc 1970-01-01 00:00:00 +0000 +++ b/storage/perfschema/table_socket_summary_by_instance.cc 2011-02-04 22:00:44 +0000 @@ -0,0 +1,913 @@ +/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +/** + @file storage/perfschema/table_socket_summary_by_instance.cc + Table SOCKET_INSTANCES (implementation). +*/ + +#include "my_global.h" +#include "my_pthread.h" +#include "pfs_instr.h" +#include "pfs_column_types.h" +#include "pfs_column_values.h" +#include "table_socket_summary_by_instance.h" +#include "pfs_global.h" + +THR_LOCK table_socket_summary_by_instance::m_table_lock; + +static const TABLE_FIELD_TYPE field_types[]= +{ + { + { C_STRING_WITH_LEN("EVENT_NAME") }, + { C_STRING_WITH_LEN("varchar(128)") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("OBJECT_INSTANCE_BEGIN") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("OBJECT_NAME") }, + { C_STRING_WITH_LEN("varchar(64)") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("COUNT_STAR") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_TIMER_WAIT") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_TIMER_WAIT") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_TIMER_WAIT") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_TIMER_WAIT") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + + /** Read */ + { + { C_STRING_WITH_LEN("COUNT_READ") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_TIMER_READ") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_TIMER_READ") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_TIMER_READ") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_TIMER_READ") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_NUMBER_OF_BYTES_READ") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_NUMBER_OF_BYTES_READ") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_NUMBER_OF_BYTES_READ") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_NUMBER_OF_BYTES_READ") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + + /** Write */ + { + { C_STRING_WITH_LEN("COUNT_WRITE") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_TIMER_WRITE") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_TIMER_WRITE") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_TIMER_WRITE") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_TIMER_WRITE") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_NUMBER_OF_BYTES_WRITE") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_NUMBER_OF_BYTES_WRITE") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_NUMBER_OF_BYTES_WRITE") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_NUMBER_OF_BYTES_WRITE") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + + /** Recv */ + { + { C_STRING_WITH_LEN("COUNT_RECV") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_TIMER_RECV") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_TIMER_RECV") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_TIMER_RECV") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_TIMER_RECV") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_NUMBER_OF_BYTES_RECV") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_NUMBER_OF_BYTES_RECV") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_NUMBER_OF_BYTES_RECV") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_NUMBER_OF_BYTES_RECV") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + + /** Send */ + { + { C_STRING_WITH_LEN("COUNT_SEND") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_TIMER_SEND") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_TIMER_SEND") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_TIMER_SEND") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_TIMER_SEND") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_NUMBER_OF_BYTES_SEND") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_NUMBER_OF_BYTES_SEND") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_NUMBER_OF_BYTES_SEND") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_NUMBER_OF_BYTES_SEND") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + + /** Recvfrom */ + { + { C_STRING_WITH_LEN("COUNT_RECVFROM") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_TIMER_RECVFROM") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_TIMER_RECVFROM") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_TIMER_RECVFROM") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_TIMER_RECVFROM") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_NUMBER_OF_BYTES_RECVFROM") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_NUMBER_OF_BYTES_RECVFROM") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_NUMBER_OF_BYTES_RECVFROM") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_NUMBER_OF_BYTES_RECVFROM") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + + /** Sendto */ + { + { C_STRING_WITH_LEN("COUNT_SENDTO") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_TIMER_SENDTO") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_TIMER_SENDTO") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_TIMER_SENDTO") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_TIMER_SENDTO") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_NUMBER_OF_BYTES_SENDTO") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_NUMBER_OF_BYTES_SENDTO") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_NUMBER_OF_BYTES_SENDTO") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_NUMBER_OF_BYTES_SENDTO") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + + /** Recvmsg */ + { + { C_STRING_WITH_LEN("COUNT_RECVMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_TIMER_RECVMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_TIMER_RECVMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_TIMER_RECVMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_TIMER_RECVMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_NUMBER_OF_BYTES_RECVMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_NUMBER_OF_BYTES_RECVMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_NUMBER_OF_BYTES_RECVMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_NUMBER_OF_BYTES_RECVMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + + /** Sendmsg */ + { + { C_STRING_WITH_LEN("COUNT_SENDMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_TIMER_SENDMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_TIMER_SENDMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_TIMER_SENDMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_TIMER_SENDMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_NUMBER_OF_BYTES_SENDMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_NUMBER_OF_BYTES_SENDMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_NUMBER_OF_BYTES_SENDMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_NUMBER_OF_BYTES_SENDMSG") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + + /** Connect */ + { + { C_STRING_WITH_LEN("COUNT_CONNECT") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_TIMER_CONNECT") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_TIMER_CONNECT") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_TIMER_CONNECT") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_TIMER_CONNECT") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + + /** Misc */ + { + { C_STRING_WITH_LEN("COUNT_MISC") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("SUM_TIMER_MISC") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MIN_TIMER_MISC") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("AVG_TIMER_MISC") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + }, + { + { C_STRING_WITH_LEN("MAX_TIMER_MISC") }, + { C_STRING_WITH_LEN("bigint") }, + { NULL, 0} + } +}; + +TABLE_FIELD_DEF +table_socket_summary_by_instance::m_field_def= +{ 90, field_types }; + +PFS_engine_table_share +table_socket_summary_by_instance::m_share= +{ + { C_STRING_WITH_LEN("socket_summary_by_instance") }, + &pfs_readonly_acl, + &table_socket_summary_by_instance::create, + NULL, /* write_row */ + NULL, /* delete_all_rows */ + NULL, /* get_row_count */ + 1000, /* records */ // TBD: Check this + sizeof(PFS_simple_index), + &m_table_lock, + &m_field_def, + false /* checked */ +}; + +PFS_engine_table* table_socket_summary_by_instance::create(void) +{ + return new table_socket_summary_by_instance(); +} + +table_socket_summary_by_instance::table_socket_summary_by_instance() + : PFS_engine_table(&m_share, &m_pos), + m_row_exists(false), m_pos(0), m_next_pos(0) +{} + +void table_socket_summary_by_instance::reset_position(void) +{ + m_pos.m_index= 0; + m_next_pos.m_index= 0; +} + +int table_socket_summary_by_instance::rnd_next(void) +{ + PFS_socket *pfs; + + for (m_pos.set_at(&m_next_pos); + m_pos.m_index < socket_max; + m_pos.next()) + { + pfs= &socket_array[m_pos.m_index]; + if (pfs->m_lock.is_populated()) + { + make_row(pfs); + m_next_pos.set_after(&m_pos); + return 0; + } + } + + return HA_ERR_END_OF_FILE; +} + +int table_socket_summary_by_instance::rnd_pos(const void *pos) +{ + PFS_socket *pfs; + + set_position(pos); + DBUG_ASSERT(m_pos.m_index < socket_max); + pfs= &socket_array[m_pos.m_index]; + + if (! pfs->m_lock.is_populated()) + return HA_ERR_RECORD_DELETED; + + make_row(pfs); + return 0; +} + +void table_socket_summary_by_instance::make_row(PFS_socket *pfs) +{ + pfs_lock lock; + PFS_socket_class *safe_class; + + m_row_exists= false; + + /* Protect this reader against a socket delete */ + pfs->m_lock.begin_optimistic_lock(&lock); + + safe_class= sanitize_socket_class(pfs->m_class); + if (unlikely(safe_class == NULL)) + return; + + m_row.m_event_name.make_row(safe_class); + m_row.m_identity= pfs->m_identity; + + if (!pfs->m_lock.end_optimistic_lock(&lock)) + return; + + m_row_exists= true; + + time_normalizer *normalizer= time_normalizer::get(wait_timer); + + /* Collect timer and byte count stats */ + m_row.m_io_stat.set(normalizer, &pfs->m_socket_stat.m_io_stat); +} + +int table_socket_summary_by_instance::read_row_values(TABLE *table, + unsigned char *, + Field **fields, + bool read_all) +{ + Field *f; + + if (unlikely(!m_row_exists)) + return HA_ERR_RECORD_DELETED; + + /* Set the null bits */ + DBUG_ASSERT(table->s->null_bytes == 0); + + for (; (f= *fields) ; fields++) + { + if (read_all || bitmap_is_set(table->read_set, f->field_index)) + { + switch(f->field_index) + { + case 0: /* EVENT_NAME */ + m_row.m_event_name.set_field(f); + break; + case 1: /* OBJECT_INSTANCE */ + // TBD: Fix + set_field_ulonglong(f, (ulonglong)m_row.m_identity); + break; + case 2: /* OBJECT_NAME */ + // TBD: Fix + break; + case 3: /* COUNT_STAR */ + set_field_ulonglong(f, m_row.m_io_stat.m_all.m_count); + break; + case 4: /* SUM_TIMER_WAIT */ + set_field_ulonglong(f, m_row.m_io_stat.m_all.m_sum); + break; + case 5: /* MIN_TIMER_WAIT */ + set_field_ulonglong(f, m_row.m_io_stat.m_all.m_min); + break; + case 6: /* AVG_TIMER_WAIT */ + set_field_ulonglong(f, m_row.m_io_stat.m_all.m_avg); + break; + case 7: /* MAX_TIMER_WAIT */ + set_field_ulonglong(f, m_row.m_io_stat.m_all.m_max); + break; + + case 8: /* COUNT_READ */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_read.m_count); + break; + case 9: /* SUM_TIMER_READ */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_read.m_sum); + break; + case 10: /* MIN_TIMER_READ */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_read.m_min); + break; + case 11: /* AVG_TIMER_READ */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_read.m_avg); + break; + case 12: /* MAX_TIMER_READ */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_read.m_max); + break; + case 13: /* SUM_NUMBER_OF_BYTES_READ */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_read.m_sum); + break; + case 14: /* MIN_NUMBER_OF_BYTES_READ */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_read.m_min); + break; + case 15: /* AVG_NUMBER_OF_BYTES_READ */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_read.m_avg); + break; + case 16: /* MAX_NUMBER_OF_BYTES_READ */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_read.m_max); + break; + + case 17: /* COUNT_WRITE */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_write.m_count); + break; + case 18: /* SUM_TIMER_WRITE */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_write.m_sum); + break; + case 19: /* MIN_TIMER_WRITE */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_write.m_min); + break; + case 20: /* AVG_TIMER_WRITE */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_write.m_avg); + break; + case 21: /* MAX_TIMER_WRITE */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_write.m_max); + break; + case 22: /* SUM_NUMBER_OF_BYTES_WRITE */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_write.m_sum); + break; + case 23: /* MIN_NUMBER_OF_BYTES_WRITE */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_write.m_min); + break; + case 24: /* AVG_NUMBER_OF_BYTES_WRITE */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_write.m_avg); + break; + case 25: /* MAX_NUMBER_OF_BYTES_WRITE */ + set_field_ulonglong(f, m_row.m_io_stat.m_all_write.m_max); + break; + + case 26: /* COUNT_RECV */ + set_field_ulonglong(f, m_row.m_io_stat.m_recv.m_count); + break; + case 27: /* SUM_TIMER_RECV */ + set_field_ulonglong(f, m_row.m_io_stat.m_recv.m_sum); + break; + case 28: /* MIN_TIMER_RECV */ + set_field_ulonglong(f, m_row.m_io_stat.m_recv.m_min); + break; + case 29: /* AVG_TIMER_RECV */ + set_field_ulonglong(f, m_row.m_io_stat.m_recv.m_avg); + break; + case 30: /* MAX_TIMER_RECV */ + set_field_ulonglong(f, m_row.m_io_stat.m_recv.m_max); + break; + case 31: /* SUM_NUMBER_OF_BYTES_RECV */ + set_field_ulonglong(f, m_row.m_io_stat.m_recv.m_sum); + break; + case 32: /* MIN_NUMBER_OF_BYTES_RECV */ + set_field_ulonglong(f, m_row.m_io_stat.m_recv.m_min); + break; + case 33: /* AVG_NUMBER_OF_BYTES_RECV */ + set_field_ulonglong(f, m_row.m_io_stat.m_recv.m_avg); + break; + case 34: /* MAX_NUMBER_OF_BYTES_RECV */ + set_field_ulonglong(f, m_row.m_io_stat.m_recv.m_max); + break; + + case 35: /* COUNT_SEND */ + set_field_ulonglong(f, m_row.m_io_stat.m_send.m_count); + break; + case 36: /* SUM_TIMER_SEND */ + set_field_ulonglong(f, m_row.m_io_stat.m_send.m_sum); + break; + case 37: /* MIN_TIMER_SEND */ + set_field_ulonglong(f, m_row.m_io_stat.m_send.m_min); + break; + case 38: /* AVG_TIMER_SEND */ + set_field_ulonglong(f, m_row.m_io_stat.m_send.m_avg); + break; + case 39: /* MAX_TIMER_SEND */ + set_field_ulonglong(f, m_row.m_io_stat.m_send.m_max); + break; + case 40: /* SUM_NUMBER_OF_BYTES_SEND */ + set_field_ulonglong(f, m_row.m_io_stat.m_send.m_sum); + break; + case 41: /* MIN_NUMBER_OF_BYTES_SEND */ + set_field_ulonglong(f, m_row.m_io_stat.m_send.m_min); + break; + case 42: /* AVG_NUMBER_OF_BYTES_SEND */ + set_field_ulonglong(f, m_row.m_io_stat.m_send.m_avg); + break; + case 43: /* MAX_NUMBER_OF_BYTES_SEND */ + set_field_ulonglong(f, m_row.m_io_stat.m_send.m_max); + break; + + case 44: /* COUNT_RECVFROM */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvfrom.m_count); + break; + case 45: /* SUM_TIMER_RECVFROM */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvfrom.m_sum); + break; + case 46: /* MIN_TIMER_RECVFROM */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvfrom.m_min); + break; + case 47: /* AVG_TIMER_RECVFROM */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvfrom.m_avg); + break; + case 48: /* MAX_TIMER_RECVFROM */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvfrom.m_max); + break; + case 49: /* SUM_NUMBER_OF_BYTES_RECVFROM */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvfrom.m_sum); + break; + case 50: /* MIN_NUMBER_OF_BYTES_RECVFROM */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvfrom.m_min); + break; + case 51: /* AVG_NUMBER_OF_BYTES_RECVFROM */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvfrom.m_avg); + break; + case 52: /* MAX_NUMBER_OF_BYTES_RECVFROM */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvfrom.m_max); + break; + + case 53: /* COUNT_SENDTO */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendto.m_count); + break; + case 54: /* SUM_TIMER_SENDTO */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendto.m_sum); + break; + case 55: /* MIN_TIMER_SENDTO */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendto.m_min); + break; + case 56: /* AVG_TIMER_SENDTO */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendto.m_avg); + break; + case 57: /* MAX_TIMER_SENDTO */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendto.m_max); + break; + case 58: /* SUM_NUMBER_OF_BYTES_SENDTO */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendto.m_sum); + break; + case 59: /* MIN_NUMBER_OF_BYTES_SENDTO */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendto.m_min); + break; + case 60: /* AVG_NUMBER_OF_BYTES_SENDTO */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendto.m_avg); + break; + case 61: /* MAX_NUMBER_OF_BYTES_SENDTO */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendto.m_max); + break; + + case 62: /* COUNT_RECVMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvmsg.m_count); + break; + case 63: /* SUM_TIMER_RECVMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvmsg.m_sum); + break; + case 64: /* MIN_TIMER_RECVMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvmsg.m_min); + break; + case 65: /* AVG_TIMER_RECVMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvmsg.m_avg); + break; + case 66: /* MAX_TIMER_RECVMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvmsg.m_max); + break; + case 67: /* SUM_NUMBER_OF_BYTES_RECVMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvmsg.m_sum); + break; + case 68: /* MIN_NUMBER_OF_BYTES_RECVMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvmsg.m_min); + break; + case 69: /* AVG_NUMBER_OF_BYTES_RECVMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvmsg.m_avg); + break; + case 70: /* MAX_NUMBER_OF_BYTES_RECVMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_recvmsg.m_max); + break; + + case 71: /* COUNT_SENDMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendmsg.m_count); + break; + case 72: /* SUM_TIMER_SENDMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendmsg.m_sum); + break; + case 73: /* MIN_TIMER_SENDMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendmsg.m_min); + break; + case 74: /* AVG_TIMER_SENDMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendmsg.m_avg); + break; + case 75: /* MAX_TIMER_SENDMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendmsg.m_max); + break; + case 76: /* SUM_NUMBER_OF_BYTES_SENDMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendmsg.m_sum); + break; + case 77: /* MIN_NUMBER_OF_BYTES_SENDMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendmsg.m_min); + break; + case 78: /* AVG_NUMBER_OF_BYTES_SENDMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendmsg.m_avg); + break; + case 79: /* MAX_NUMBER_OF_BYTES_SENDMSG */ + set_field_ulonglong(f, m_row.m_io_stat.m_sendmsg.m_max); + break; + + case 80: /* COUNT_CONNECT */ + set_field_ulonglong(f, m_row.m_io_stat.m_connect.m_count); + break; + case 81: /* SUM_TIMER_CONNECT */ + set_field_ulonglong(f, m_row.m_io_stat.m_connect.m_sum); + break; + case 82: /* MIN_TIMER_CONNECT */ + set_field_ulonglong(f, m_row.m_io_stat.m_connect.m_min); + break; + case 83: /* AVG_TIMER_CONNECT */ + set_field_ulonglong(f, m_row.m_io_stat.m_connect.m_avg); + break; + case 84: /* MAX_TIMER_CONNECT */ + set_field_ulonglong(f, m_row.m_io_stat.m_connect.m_max); + break; + + case 85: /* COUNT_MISC */ + set_field_ulonglong(f, m_row.m_io_stat.m_misc.m_count); + break; + case 86: /* SUM_TIMER_MISC */ + set_field_ulonglong(f, m_row.m_io_stat.m_misc.m_sum); + break; + case 87: /* MIN_TIMER_MISC */ + set_field_ulonglong(f, m_row.m_io_stat.m_misc.m_min); + break; + case 88: /* AVG_TIMER_MISC */ + set_field_ulonglong(f, m_row.m_io_stat.m_misc.m_avg); + break; + case 89: /* MAX_TIMER_MISC */ + set_field_ulonglong(f, m_row.m_io_stat.m_misc.m_max); + break; + default: + DBUG_ASSERT(false); + break; + } + } + } + + return 0; +} + === added file 'storage/perfschema/table_socket_summary_by_instance.h' --- a/storage/perfschema/table_socket_summary_by_instance.h 1970-01-01 00:00:00 +0000 +++ b/storage/perfschema/table_socket_summary_by_instance.h 2011-02-04 22:00:44 +0000 @@ -0,0 +1,94 @@ +/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +#ifndef TABLE_SOCKET_SUMMARY_BY_INSTANCE_H +#define TABLE_SOCKET_SUMMARY_BY_INSTANCE_H + +/** + @file storage/perfschema/table_socket_summary_by_instance.h + Table SOCKET_SUMMARY_BY_INSTANCE (declarations). +*/ + +#include "pfs_column_types.h" +#include "pfs_engine_table.h" +#include "pfs_instr_class.h" +#include "pfs_instr.h" +#include "table_helper.h" + +/** + @addtogroup Performance_schema_tables + @{ +*/ + +/** + A row of table + PERFORMANCE_SCHEMA.SOCKET_SUMMARY_BY_INSTANCE. +*/ +struct row_socket_summary_by_instance +{ + /** Column EVENT_NAME. */ + PFS_event_name_row m_event_name; + + /** Column OBJECT_INSTANCE_BEGIN */ + const void *m_identity; + + /** Columns COUNT_STAR, SUM/MIN/AVG/MAX TIMER and NUMBER_OF_BYTES for each operation. */ + PFS_socket_io_stat_row m_io_stat; +}; + +/** Table PERFORMANCE_SCHEMA.SOCKET_SUMMARY_BY_INSTANCE. */ +class table_socket_summary_by_instance : public PFS_engine_table +{ +public: + /** Table share */ + static PFS_engine_table_share m_share; + static PFS_engine_table* create(); + + virtual int rnd_next(); + virtual int rnd_pos(const void *pos); + virtual void reset_position(void); + +private: + virtual int read_row_values(TABLE *table, + unsigned char *buf, + Field **fields, + bool read_all); + + table_socket_summary_by_instance(); + +public: + ~table_socket_summary_by_instance() + {} + +private: + void make_row(PFS_socket *pfs); + + /** Table share lock. */ + static THR_LOCK m_table_lock; + /** Fields definition. */ + static TABLE_FIELD_DEF m_field_def; + + /** Current row. */ + row_socket_summary_by_instance m_row; + /** True if the current row exists. */ + bool m_row_exists; + /** Current position. */ + PFS_simple_index m_pos; + /** Next position. */ + PFS_simple_index m_next_pos; +}; + +/** @} */ +#endif --===============5901060193669242110== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/chris.powers@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: chris.powers@stripped # target_branch: file:///home/cpowers/work/dev/mysql-trunk-wl4896/ # testament_sha1: 635fcb9b7cef9469ae76b6b99c8c5ea62cca8ac8 # timestamp: 2011-02-04 16:01:12 -0600 # base_revision_id: chris.powers@stripped\ # htfatb79ldpj5gjk # # Begin bundle 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 --===============5901060193669242110==--