bool pfs_show_status()

in storage/perfschema/pfs_engine_table.cc [719:1496]


bool pfs_show_status(handlerton *hton, THD *thd,
                     stat_print_fn *print, enum ha_stat_type stat)
{
  char buf[1024];
  uint buflen;
  const char *name;
  int i;
  size_t size;

  DBUG_ENTER("pfs_show_status");

  /*
    Note about naming conventions:
    - Internal buffers exposed as a table in the performance schema are named
    after the table, as in 'events_waits_current'
    - Internal buffers not exposed by a table are named with parenthesis,
    as in '(pfs_mutex_class)'.
  */
  if (stat != HA_ENGINE_STATUS)
    DBUG_RETURN(false);

  size_t total_memory= 0;

  for (i=0; /* empty */; i++)
  {
    switch (i){
    case 0:
      name= "events_waits_current.row_size";
      size= sizeof(PFS_events_waits);
      break;
    case 1:
      name= "events_waits_current.row_count";
      size= WAIT_STACK_SIZE * thread_max;
      break;
    case 2:
      name= "events_waits_history.row_size";
      size= sizeof(PFS_events_waits);
      break;
    case 3:
      name= "events_waits_history.row_count";
      size= events_waits_history_per_thread * thread_max;
      break;
    case 4:
      name= "events_waits_history.memory";
      size= events_waits_history_per_thread * thread_max
        * sizeof(PFS_events_waits);
      total_memory+= size;
      break;
    case 5:
      name= "events_waits_history_long.row_size";
      size= sizeof(PFS_events_waits);
      break;
    case 6:
      name= "events_waits_history_long.row_count";
      size= events_waits_history_long_size;
      break;
    case 7:
      name= "events_waits_history_long.memory";
      size= events_waits_history_long_size * sizeof(PFS_events_waits);
      total_memory+= size;
      break;
    case 8:
      name= "(pfs_mutex_class).row_size";
      size= sizeof(PFS_mutex_class);
      break;
    case 9:
      name= "(pfs_mutex_class).row_count";
      size= mutex_class_max;
      break;
    case 10:
      name= "(pfs_mutex_class).memory";
      size= mutex_class_max * sizeof(PFS_mutex_class);
      total_memory+= size;
      break;
    case 11:
      name= "(pfs_rwlock_class).row_size";
      size= sizeof(PFS_rwlock_class);
      break;
    case 12:
      name= "(pfs_rwlock_class).row_count";
      size= rwlock_class_max;
      break;
    case 13:
      name= "(pfs_rwlock_class).memory";
      size= rwlock_class_max * sizeof(PFS_rwlock_class);
      total_memory+= size;
      break;
    case 14:
      name= "(pfs_cond_class).row_size";
      size= sizeof(PFS_cond_class);
      break;
    case 15:
      name= "(pfs_cond_class).row_count";
      size= cond_class_max;
      break;
    case 16:
      name= "(pfs_cond_class).memory";
      size= cond_class_max * sizeof(PFS_cond_class);
      total_memory+= size;
      break;
    case 17:
      name= "(pfs_thread_class).row_size";
      size= sizeof(PFS_thread_class);
      break;
    case 18:
      name= "(pfs_thread_class).row_count";
      size= thread_class_max;
      break;
    case 19:
      name= "(pfs_thread_class).memory";
      size= thread_class_max * sizeof(PFS_thread_class);
      total_memory+= size;
      break;
    case 20:
      name= "(pfs_file_class).row_size";
      size= sizeof(PFS_file_class);
      break;
    case 21:
      name= "(pfs_file_class).row_count";
      size= file_class_max;
      break;
    case 22:
      name= "(pfs_file_class).memory";
      size= file_class_max * sizeof(PFS_file_class);
      total_memory+= size;
      break;
    case 23:
      name= "mutex_instances.row_size";
      size= sizeof(PFS_mutex);
      break;
    case 24:
      name= "mutex_instances.row_count";
      size= mutex_max;
      break;
    case 25:
      name= "mutex_instances.memory";
      size= mutex_max * sizeof(PFS_mutex);
      total_memory+= size;
      break;
    case 26:
      name= "rwlock_instances.row_size";
      size= sizeof(PFS_rwlock);
      break;
    case 27:
      name= "rwlock_instances.row_count";
      size= rwlock_max;
      break;
    case 28:
      name= "rwlock_instances.memory";
      size= rwlock_max * sizeof(PFS_rwlock);
      total_memory+= size;
      break;
    case 29:
      name= "cond_instances.row_size";
      size= sizeof(PFS_cond);
      break;
    case 30:
      name= "cond_instances.row_count";
      size= cond_max;
      break;
    case 31:
      name= "cond_instances.memory";
      size= cond_max * sizeof(PFS_cond);
      total_memory+= size;
      break;
    case 32:
      name= "threads.row_size";
      size= sizeof(PFS_thread);
      break;
    case 33:
      name= "threads.row_count";
      size= thread_max;
      break;
    case 34:
      name= "threads.memory";
      size= thread_max * sizeof(PFS_thread);
      total_memory+= size;
      break;
    case 35:
      name= "file_instances.row_size";
      size= sizeof(PFS_file);
      break;
    case 36:
      name= "file_instances.row_count";
      size= file_max;
      break;
    case 37:
      name= "file_instances.memory";
      size= file_max * sizeof(PFS_file);
      total_memory+= size;
      break;
    case 38:
      name= "(pfs_file_handle).row_size";
      size= sizeof(PFS_file*);
      break;
    case 39:
      name= "(pfs_file_handle).row_count";
      size= file_handle_max;
      break;
    case 40:
      name= "(pfs_file_handle).memory";
      size= file_handle_max * sizeof(PFS_file*);
      total_memory+= size;
      break;
    case 41:
      name= "events_waits_summary_by_thread_by_event_name.row_size";
      size= sizeof(PFS_single_stat);
      break;
    case 42:
      name= "events_waits_summary_by_thread_by_event_name.row_count";
      size= thread_max * wait_class_max;
      break;
    case 43:
      name= "events_waits_summary_by_thread_by_event_name.memory";
      size= thread_max * wait_class_max * sizeof(PFS_single_stat);
      total_memory+= size;
      break;
    case 44:
      name= "(pfs_table_share).row_size";
      size= sizeof(PFS_table_share);
      break;
    case 45:
      name= "(pfs_table_share).row_count";
      size= table_share_max;
      break;
    case 46:
      name= "(pfs_table_share).memory";
      size= table_share_max * sizeof(PFS_table_share);
      total_memory+= size;
      break;
    case 47:
      name= "(pfs_table).row_size";
      size= sizeof(PFS_table);
      break;
    case 48:
      name= "(pfs_table).row_count";
      size= table_max;
      break;
    case 49:
      name= "(pfs_table).memory";
      size= table_max * sizeof(PFS_table);
      total_memory+= size;
      break;
    case 50:
      name= "setup_actors.row_size";
      size= sizeof(PFS_setup_actor);
      break;
    case 51:
      name= "setup_actors.row_count";
      size= setup_actor_max;
      break;
    case 52:
      name= "setup_actors.memory";
      size= setup_actor_max * sizeof(PFS_setup_actor);
      total_memory+= size;
      break;
    case 53:
      name= "setup_objects.row_size";
      size= sizeof(PFS_setup_object);
      break;
    case 54:
      name= "setup_objects.row_count";
      size= setup_object_max;
      break;
    case 55:
      name= "setup_objects.memory";
      size= setup_object_max * sizeof(PFS_setup_object);
      total_memory+= size;
      break;
    case 56:
      name= "(pfs_account).row_size";
      size= sizeof(PFS_account);
      break;
    case 57:
      name= "(pfs_account).row_count";
      size= account_max;
      break;
    case 58:
      name= "(pfs_account).memory";
      size= account_max * sizeof(PFS_account);
      total_memory+= size;
      break;
    case 59:
      name= "events_waits_summary_by_account_by_event_name.row_size";
      size= sizeof(PFS_single_stat);
      break;
    case 60:
      name= "events_waits_summary_by_account_by_event_name.row_count";
      size= account_max * wait_class_max;
      break;
    case 61:
      name= "events_waits_summary_by_account_by_event_name.memory";
      size= account_max * wait_class_max * sizeof(PFS_single_stat);
      total_memory+= size;
      break;
    case 62:
      name= "events_waits_summary_by_user_by_event_name.row_size";
      size= sizeof(PFS_single_stat);
      break;
    case 63:
      name= "events_waits_summary_by_user_by_event_name.row_count";
      size= user_max * wait_class_max;
      break;
    case 64:
      name= "events_waits_summary_by_user_by_event_name.memory";
      size= user_max * wait_class_max * sizeof(PFS_single_stat);
      total_memory+= size;
      break;
    case 65:
      name= "events_waits_summary_by_host_by_event_name.row_size";
      size= sizeof(PFS_single_stat);
      break;
    case 66:
      name= "events_waits_summary_by_host_by_event_name.row_count";
      size= host_max * wait_class_max;
      break;
    case 67:
      name= "events_waits_summary_by_host_by_event_name.memory";
      size= host_max * wait_class_max * sizeof(PFS_single_stat);
      total_memory+= size;
      break;
    case 68:
      name= "(pfs_user).row_size";
      size= sizeof(PFS_user);
      break;
    case 69:
      name= "(pfs_user).row_count";
      size= user_max;
      break;
    case 70:
      name= "(pfs_user).memory";
      size= user_max * sizeof(PFS_user);
      total_memory+= size;
      break;
    case 71:
      name= "(pfs_host).row_size";
      size= sizeof(PFS_host);
      break;
    case 72:
      name= "(pfs_host).row_count";
      size= host_max;
      break;
    case 73:
      name= "(pfs_host).memory";
      size= host_max * sizeof(PFS_host);
      total_memory+= size;
      break;
    case 74:
      name= "(pfs_stage_class).row_size";
      size= sizeof(PFS_stage_class);
      break;
    case 75:
      name= "(pfs_stage_class).row_count";
      size= stage_class_max;
      break;
    case 76:
      name= "(pfs_stage_class).memory";
      size= stage_class_max * sizeof(PFS_stage_class);
      total_memory+= size;
      break;
    case 77:
      name= "events_stages_history.row_size";
      size= sizeof(PFS_events_stages);
      break;
    case 78:
      name= "events_stages_history.row_count";
      size= events_stages_history_per_thread * thread_max;
      break;
    case 79:
      name= "events_stages_history.memory";
      size= events_stages_history_per_thread * thread_max
        * sizeof(PFS_events_stages);
      total_memory+= size;
      break;
    case 80:
      name= "events_stages_history_long.row_size";
      size= sizeof(PFS_events_stages);
      break;
    case 81:
      name= "events_stages_history_long.row_count";
      size= events_stages_history_long_size;
      break;
    case 82:
      name= "events_stages_history_long.memory";
      size= events_stages_history_long_size * sizeof(PFS_events_stages);
      total_memory+= size;
      break;
    case 83:
      name= "events_stages_summary_by_thread_by_event_name.row_size";
      size= sizeof(PFS_stage_stat);
      break;
    case 84:
      name= "events_stages_summary_by_thread_by_event_name.row_count";
      size= thread_max * stage_class_max;
      break;
    case 85:
      name= "events_stages_summary_by_thread_by_event_name.memory";
      size= thread_max * stage_class_max * sizeof(PFS_stage_stat);
      total_memory+= size;
      break;
    case 86:
      name= "events_stages_summary_global_by_event_name.row_size";
      size= sizeof(PFS_stage_stat);
      break;
    case 87:
      name= "events_stages_summary_global_by_event_name.row_count";
      size= stage_class_max;
      break;
    case 88:
      name= "events_stages_summary_global_by_event_name.memory";
      size= stage_class_max * sizeof(PFS_stage_stat);
      total_memory+= size;
      break;
    case 89:
      name= "events_stages_summary_by_account_by_event_name.row_size";
      size= sizeof(PFS_stage_stat);
      break;
    case 90:
      name= "events_stages_summary_by_account_by_event_name.row_count";
      size= account_max * stage_class_max;
      break;
    case 91:
      name= "events_stages_summary_by_account_by_event_name.memory";
      size= account_max * stage_class_max * sizeof(PFS_stage_stat);
      total_memory+= size;
      break;
    case 92:
      name= "events_stages_summary_by_user_by_event_name.row_size";
      size= sizeof(PFS_stage_stat);
      break;
    case 93:
      name= "events_stages_summary_by_user_by_event_name.row_count";
      size= user_max * stage_class_max;
      break;
    case 94:
      name= "events_stages_summary_by_user_by_event_name.memory";
      size= user_max * stage_class_max * sizeof(PFS_stage_stat);
      total_memory+= size;
      break;
    case 95:
      name= "events_stages_summary_by_host_by_event_name.row_size";
      size= sizeof(PFS_stage_stat);
      break;
    case 96:
      name= "events_stages_summary_by_host_by_event_name.row_count";
      size= host_max * stage_class_max;
      break;
    case 97:
      name= "events_stages_summary_by_host_by_event_name.memory";
      size= host_max * stage_class_max * sizeof(PFS_stage_stat);
      total_memory+= size;
      break;
    case 98:
      name= "(pfs_statement_class).row_size";
      size= sizeof(PFS_statement_class);
      break;
    case 99:
      name= "(pfs_statement_class).row_count";
      size= statement_class_max;
      break;
    case 100:
      name= "(pfs_statement_class).memory";
      size= statement_class_max * sizeof(PFS_statement_class);
      total_memory+= size;
      break;
    case 101:
      name= "events_statements_history.row_size";
      size= sizeof(PFS_events_statements);
      break;
    case 102:
      name= "events_statements_history.row_count";
      size= events_statements_history_per_thread * thread_max;
      break;
    case 103:
      name= "events_statements_history.memory";
      size= events_statements_history_per_thread * thread_max
        * sizeof(PFS_events_statements);
      total_memory+= size;
      break;
    case 104:
      name= "events_statements_history_long.row_size";
      size= sizeof(PFS_events_statements);
      break;
    case 105:
      name= "events_statements_history_long.row_count";
      size= events_statements_history_long_size;
      break;
    case 106:
      name= "events_statements_history_long.memory";
      size= events_statements_history_long_size * sizeof(PFS_events_statements);
      total_memory+= size;
      break;
    case 107:
      name= "events_statements_summary_by_thread_by_event_name.row_size";
      size= sizeof(PFS_statement_stat);
      break;
    case 108:
      name= "events_statements_summary_by_thread_by_event_name.row_count";
      size= thread_max * statement_class_max;
      break;
    case 109:
      name= "events_statements_summary_by_thread_by_event_name.memory";
      size= thread_max * statement_class_max * sizeof(PFS_statement_stat);
      total_memory+= size;
      break;
    case 110:
      name= "events_statements_summary_global_by_event_name.row_size";
      size= sizeof(PFS_statement_stat);
      break;
    case 111:
      name= "events_statements_summary_global_by_event_name.row_count";
      size= statement_class_max;
      break;
    case 112:
      name= "events_statements_summary_global_by_event_name.memory";
      size= statement_class_max * sizeof(PFS_statement_stat);
      total_memory+= size;
      break;
    case 113:
      name= "events_statements_summary_by_account_by_event_name.row_size";
      size= sizeof(PFS_statement_stat);
      break;
    case 114:
      name= "events_statements_summary_by_account_by_event_name.row_count";
      size= account_max * statement_class_max;
      break;
    case 115:
      name= "events_statements_summary_by_account_by_event_name.memory";
      size= account_max * statement_class_max * sizeof(PFS_statement_stat);
      total_memory+= size;
      break;
    case 116:
      name= "events_statements_summary_by_user_by_event_name.row_size";
      size= sizeof(PFS_statement_stat);
      break;
    case 117:
      name= "events_statements_summary_by_user_by_event_name.row_count";
      size= user_max * statement_class_max;
      break;
    case 118:
      name= "events_statements_summary_by_user_by_event_name.memory";
      size= user_max * statement_class_max * sizeof(PFS_statement_stat);
      total_memory+= size;
      break;
    case 119:
      name= "events_statements_summary_by_host_by_event_name.row_size";
      size= sizeof(PFS_statement_stat);
      break;
    case 120:
      name= "events_statements_summary_by_host_by_event_name.row_count";
      size= host_max * statement_class_max;
      break;
    case 121:
      name= "events_statements_summary_by_host_by_event_name.memory";
      size= host_max * statement_class_max * sizeof(PFS_statement_stat);
      total_memory+= size;
      break;
    case 122:
      name= "events_statements_current.row_size";
      size= sizeof(PFS_events_statements);
      break;
    case 123:
      name= "events_statements_current.row_count";
      size= thread_max * statement_stack_max;
      break;
    case 124:
      name= "events_statements_current.memory";
      size= thread_max * statement_stack_max * sizeof(PFS_events_statements);
      total_memory+= size;
      break;
    case 125:
      name= "(pfs_socket_class).row_size";
      size= sizeof(PFS_socket_class);
      break;
    case 126:
      name= "(pfs_socket_class).row_count";
      size= socket_class_max;
      break;
    case 127:
      name= "(pfs_socket_class).memory";
      size= socket_class_max * sizeof(PFS_socket_class);
      total_memory+= size;
      break;
    case 128:
      name= "socket_instances.row_size";
      size= sizeof(PFS_socket);
      break;
    case 129:
      name= "socket_instances.row_count";
      size= socket_max;
      break;
    case 130:
      name= "socket_instances.memory";
      size= socket_max * sizeof(PFS_socket);
      total_memory+= size;
      break;
    case 131:
      name= "events_statements_summary_by_digest.row_size";
      size= sizeof(PFS_statements_digest_stat);
      break;
    case 132:
      name= "events_statements_summary_by_digest.row_count";
      size= digest_max;
      break;
    case 133:
      name= "events_statements_summary_by_digest.memory";
      size= digest_max * sizeof(PFS_statements_digest_stat);
      total_memory+= size;
      break;
    case 134:
      name= "session_connect_attrs.row_size";
      size= thread_max;
      break;
    case 135:
      name= "session_connect_attrs.row_count";
      size= session_connect_attrs_size_per_thread;
      break;
    case 136:
      name= "session_connect_attrs.memory";
      size= thread_max * session_connect_attrs_size_per_thread;
      total_memory+= size;
      break;

    case 137:
      name= "(account_hash).count";
      size= account_hash.count;
      break;
    case 138:
      name= "(account_hash).size";
      size= account_hash.size;
      break;
    case 139:
      name= "(digest_hash).count";
      size= digest_hash.count;
      break;
    case 140:
      name= "(digest_hash).size";
      size= digest_hash.size;
      break;
    case 141:
      name= "(filename_hash).count";
      size= filename_hash.count;
      break;
    case 142:
      name= "(filename_hash).size";
      size= filename_hash.size;
      break;
    case 143:
      name= "(host_hash).count";
      size= host_hash.count;
      break;
    case 144:
      name= "(host_hash).size";
      size= host_hash.size;
      break;
    case 145:
      name= "(setup_actor_hash).count";
      size= setup_actor_hash.count;
      break;
    case 146:
      name= "(setup_actor_hash).size";
      size= setup_actor_hash.size;
      break;
    case 147:
      name= "(setup_object_hash).count";
      size= setup_object_hash.count;
      break;
    case 148:
      name= "(setup_object_hash).size";
      size= setup_object_hash.size;
      break;
    case 149:
      name= "(table_share_hash).count";
      size= table_share_hash.count;
      break;
    case 150:
      name= "(table_share_hash).size";
      size= table_share_hash.size;
      break;
    case 151:
      name= "(user_hash).count";
      size= user_hash.count;
      break;
    case 152:
      name= "(user_hash).size";
      size= user_hash.size;
      break;
    case 153:
      /*
        This is not a performance_schema buffer,
        the data is maintained in the server,
        in hostname_cache.
        Print the size only, there are:
        - no host_cache.count
        - no host_cache.memory
      */
      name= "host_cache.size";
      size= sizeof(Host_entry);
      break;
    case 154:
      name= "(history_long_statements_digest_token_array).row_count";
      size= events_statements_history_long_size;
      break;
    case 155:
      name= "(history_long_statements_digest_token_array).row_size";
      size= pfs_max_digest_length;
      break;
    case 156:
      name= "(history_long_statements_digest_token_array).memory";
      size= events_statements_history_long_size * pfs_max_digest_length;
      total_memory+= size;
      break;
    case 157:
      name= "(history_statements_digest_token_array).row_count";
      size= thread_max * events_statements_history_per_thread;
      break;
    case 158:
      name= "(history_statements_digest_token_array).row_size";
      size= pfs_max_digest_length;
      break;
    case 159:
      name= "(history_statements_digest_token_array).memory";
      size= thread_max * events_statements_history_per_thread * pfs_max_digest_length;
      total_memory+= size;
      break;
    case 160:
      name= "(current_statements_digest_token_array).row_count";
      size= thread_max * statement_stack_max;
      break;
    case 161:
      name= "(current_statements_digest_token_array).row_size";
      size= pfs_max_digest_length;
      break;
    case 162:
      name= "(current_statements_digest_token_array).memory";
      size= thread_max * statement_stack_max * pfs_max_digest_length;
      total_memory+= size;
      break;
    case 163:
      name= "(statements_digest_token_array).row_count";
      size= digest_max;
      break;
    case 164:
      name= "(statements_digest_token_array).row_size";
      size= pfs_max_digest_length;
      break;
    case 165:
      name= "(statements_digest_token_array).memory";
      size= digest_max * pfs_max_digest_length;
      total_memory+= size;
      break;

    /*
      This case must be last,
      for aggregation in total_memory.
    */
    case 166:
      name= "performance_schema.memory";
      size= total_memory;
      /* This will fail if something is not advertised here */
      DBUG_ASSERT(size == pfs_allocated_memory);
      break;
    default:
      goto end;
      break;
    }

    buflen= longlong10_to_str(size, buf, 10) - buf;
    if (print(thd,
              PERFORMANCE_SCHEMA_str.str, PERFORMANCE_SCHEMA_str.length,
              name, strlen(name),
              buf, buflen))
      DBUG_RETURN(true);
  }

end:
  DBUG_RETURN(false);
}