@ -1,6 +1,7 @@
/*****************************************************************************
Copyright ( c ) 2007 , 2013 , Oracle and / or its affiliates . All Rights Reserved .
Copyrigth ( c ) 2014 , 2015 , MariaDB Corporation
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
@ -21,7 +22,9 @@ this program; if not, write to the Free Software Foundation, Inc.,
InnoDB INFORMATION SCHEMA tables interface to MySQL .
Created July 18 , 2007 Vasil Dimov
Modified Dec 29 , 2014 Jan Lindström ( Added sys_semaphore_waits )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "univ.i"
# include <my_global.h>
# ifndef MYSQL_SERVER
# define MYSQL_SERVER /* For Item_* classes */
@ -68,6 +71,7 @@ Created July 18, 2007 Vasil Dimov
# include "log0online.h"
# include "btr0btr.h"
# include "page0zip.h"
# include "sync0arr.h"
/** structure associates a name string with a file page type and/or buffer
page state . */
@ -149,45 +153,6 @@ struct buf_page_info_t{
index_id_t index_id ; /*!< Index ID if a index page */
} ;
/** maximum number of buffer page info we would cache. */
# define MAX_BUF_INFO_CACHED 10000
# define OK(expr) \
if ( ( expr ) ! = 0 ) { \
DBUG_RETURN ( 1 ) ; \
}
# define RETURN_IF_INNODB_NOT_STARTED(plugin_name) \
do { \
if ( ! srv_was_started ) { \
push_warning_printf ( thd , Sql_condition : : WARN_LEVEL_WARN , \
ER_CANT_FIND_SYSTEM_REC , \
" InnoDB: SELECTing from " \
" INFORMATION_SCHEMA.%s but " \
" the InnoDB storage engine " \
" is not installed " , plugin_name ) ; \
DBUG_RETURN ( 0 ) ; \
} \
} while ( 0 )
# if !defined __STRICT_ANSI__ && defined __GNUC__ && (__GNUC__) > 2 && \
! defined __INTEL_COMPILER & & ! defined __clang__
# define STRUCT_FLD(name, value) name: value
# else
# define STRUCT_FLD(name, value) value
# endif
/* Don't use a static const variable here, as some C++ compilers (notably
HPUX aCC : HP ANSI C + + B3910B A .03 .65 ) can ' t handle it . */
# define END_OF_ST_FIELD_INFO \
{ STRUCT_FLD ( field_name , NULL ) , \
STRUCT_FLD ( field_length , 0 ) , \
STRUCT_FLD ( field_type , MYSQL_TYPE_NULL ) , \
STRUCT_FLD ( value , 0 ) , \
STRUCT_FLD ( field_flags , 0 ) , \
STRUCT_FLD ( old_name , " " ) , \
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) }
/*
Use the following types mapping :
@ -216,6 +181,20 @@ time_t MYSQL_TYPE_DATETIME
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
/** Implemented on sync0arr.cc */
/*******************************************************************/ /**
Function to populate INFORMATION_SCHEMA . INNODB_SYS_SEMAPHORE_WAITS table .
Loop through each item on sync array , and extract the column
information and fill the INFORMATION_SCHEMA . INNODB_SYS_SEMAPHORE_WAITS table .
@ return 0 on success */
UNIV_INTERN
int
sync_arr_fill_sys_semphore_waits_table (
/*===================================*/
THD * thd , /*!< in: thread */
TABLE_LIST * tables , /*!< in/out: tables to fill */
Item * ) ; /*!< in: condition (not used) */
/*******************************************************************/ /**
Common function to fill any of the dynamic tables :
INFORMATION_SCHEMA . innodb_trx
@ -273,7 +252,6 @@ field_store_time_t(
/*******************************************************************/ /**
Auxiliary function to store char * value in MYSQL_TYPE_STRING field .
@ return 0 on success */
static
int
field_store_string (
/*===============*/
@ -340,7 +318,6 @@ field_store_index_name(
Auxiliary function to store ulint value in MYSQL_TYPE_LONGLONG field .
If the value is ULINT_UNDEFINED then the field it set to NULL .
@ return 0 on success */
static
int
field_store_ulint (
/*==============*/
@ -8992,3 +8969,494 @@ UNIV_INTERN struct st_maria_plugin i_s_innodb_tablespaces_scrubbing =
STRUCT_FLD ( version_info , INNODB_VERSION_STR ) ,
STRUCT_FLD ( maturity , MariaDB_PLUGIN_MATURITY_STABLE )
} ;
/** INNODB_MUTEXES *********************************************/
/* Fields of the dynamic table INFORMATION_SCHEMA.INNODB_MUTEXES */
static ST_FIELD_INFO innodb_mutexes_fields_info [ ] =
{
# define MUTEXES_NAME 0
{ STRUCT_FLD ( field_name , " NAME " ) ,
STRUCT_FLD ( field_length , OS_FILE_MAX_PATH ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_STRING ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , 0 ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
# define MUTEXES_CREATE_FILE 1
{ STRUCT_FLD ( field_name , " CREATE_FILE " ) ,
STRUCT_FLD ( field_length , OS_FILE_MAX_PATH ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_STRING ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , 0 ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
# define MUTEXES_CREATE_LINE 2
{ STRUCT_FLD ( field_name , " CREATE_LINE " ) ,
STRUCT_FLD ( field_length , MY_INT32_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
# define MUTEXES_OS_WAITS 3
{ STRUCT_FLD ( field_name , " OS_WAITS " ) ,
STRUCT_FLD ( field_length , MY_INT64_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONGLONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
END_OF_ST_FIELD_INFO
} ;
/*******************************************************************/ /**
Function to populate INFORMATION_SCHEMA . INNODB_MUTEXES table .
Loop through each record in mutex and rw_lock lists , and extract the column
information and fill the INFORMATION_SCHEMA . INNODB_MUTEXES table .
@ return 0 on success */
static
int
i_s_innodb_mutexes_fill_table (
/*==========================*/
THD * thd , /*!< in: thread */
TABLE_LIST * tables , /*!< in/out: tables to fill */
Item * ) /*!< in: condition (not used) */
{
ib_mutex_t * mutex ;
rw_lock_t * lock ;
ulint block_mutex_oswait_count = 0 ;
ulint block_lock_oswait_count = 0 ;
ib_mutex_t * block_mutex = NULL ;
rw_lock_t * block_lock = NULL ;
Field * * fields = tables - > table - > field ;
DBUG_ENTER ( " i_s_innodb_mutexes_fill_table " ) ;
RETURN_IF_INNODB_NOT_STARTED ( tables - > schema_table_name ) ;
/* deny access to user without PROCESS_ACL privilege */
if ( check_global_access ( thd , PROCESS_ACL ) ) {
DBUG_RETURN ( 0 ) ;
}
mutex_enter ( & mutex_list_mutex ) ;
for ( mutex = UT_LIST_GET_FIRST ( mutex_list ) ; mutex ! = NULL ;
mutex = UT_LIST_GET_NEXT ( list , mutex ) ) {
if ( mutex - > count_os_wait = = 0 ) {
continue ;
}
if ( buf_pool_is_block_mutex ( mutex ) ) {
block_mutex = mutex ;
block_mutex_oswait_count + = mutex - > count_os_wait ;
continue ;
}
OK ( field_store_string ( fields [ MUTEXES_NAME ] , mutex - > cmutex_name ) ) ;
OK ( field_store_string ( fields [ MUTEXES_CREATE_FILE ] , innobase_basename ( mutex - > cfile_name ) ) ) ;
OK ( field_store_ulint ( fields [ MUTEXES_CREATE_LINE ] , mutex - > cline ) ) ;
OK ( field_store_ulint ( fields [ MUTEXES_OS_WAITS ] , ( longlong ) mutex - > count_os_wait ) ) ;
OK ( schema_table_store_record ( thd , tables - > table ) ) ;
}
if ( block_mutex ) {
char buf1 [ IO_SIZE ] ;
my_snprintf ( buf1 , sizeof buf1 , " combined %s " ,
innobase_basename ( block_mutex - > cfile_name ) ) ;
OK ( field_store_string ( fields [ MUTEXES_NAME ] , block_mutex - > cmutex_name ) ) ;
OK ( field_store_string ( fields [ MUTEXES_CREATE_FILE ] , buf1 ) ) ;
OK ( field_store_ulint ( fields [ MUTEXES_CREATE_LINE ] , block_mutex - > cline ) ) ;
OK ( field_store_ulint ( fields [ MUTEXES_OS_WAITS ] , ( longlong ) block_mutex_oswait_count ) ) ;
OK ( schema_table_store_record ( thd , tables - > table ) ) ;
}
mutex_exit ( & mutex_list_mutex ) ;
mutex_enter ( & rw_lock_list_mutex ) ;
for ( lock = UT_LIST_GET_FIRST ( rw_lock_list ) ; lock ! = NULL ;
lock = UT_LIST_GET_NEXT ( list , lock ) ) {
if ( lock - > count_os_wait = = 0 ) {
continue ;
}
if ( buf_pool_is_block_lock ( lock ) ) {
block_lock = lock ;
block_lock_oswait_count + = lock - > count_os_wait ;
continue ;
}
OK ( field_store_string ( fields [ MUTEXES_NAME ] , lock - > lock_name ) ) ;
OK ( field_store_string ( fields [ MUTEXES_CREATE_FILE ] , innobase_basename ( lock - > cfile_name ) ) ) ;
OK ( field_store_ulint ( fields [ MUTEXES_CREATE_LINE ] , lock - > cline ) ) ;
OK ( field_store_ulint ( fields [ MUTEXES_OS_WAITS ] , ( longlong ) lock - > count_os_wait ) ) ;
OK ( schema_table_store_record ( thd , tables - > table ) ) ;
}
if ( block_lock ) {
char buf1 [ IO_SIZE ] ;
my_snprintf ( buf1 , sizeof buf1 , " combined %s " ,
innobase_basename ( block_lock - > cfile_name ) ) ;
OK ( field_store_string ( fields [ MUTEXES_NAME ] , block_lock - > lock_name ) ) ;
OK ( field_store_string ( fields [ MUTEXES_CREATE_FILE ] , buf1 ) ) ;
OK ( field_store_ulint ( fields [ MUTEXES_CREATE_LINE ] , block_lock - > cline ) ) ;
OK ( field_store_ulint ( fields [ MUTEXES_OS_WAITS ] , ( longlong ) block_lock_oswait_count ) ) ;
OK ( schema_table_store_record ( thd , tables - > table ) ) ;
}
mutex_exit ( & rw_lock_list_mutex ) ;
DBUG_RETURN ( 0 ) ;
}
/*******************************************************************/ /**
Bind the dynamic table INFORMATION_SCHEMA . INNODB_MUTEXES
@ return 0 on success */
static
int
innodb_mutexes_init (
/*================*/
void * p ) /*!< in/out: table schema object */
{
ST_SCHEMA_TABLE * schema ;
DBUG_ENTER ( " innodb_mutexes_init " ) ;
schema = ( ST_SCHEMA_TABLE * ) p ;
schema - > fields_info = innodb_mutexes_fields_info ;
schema - > fill_table = i_s_innodb_mutexes_fill_table ;
DBUG_RETURN ( 0 ) ;
}
UNIV_INTERN struct st_mysql_plugin i_s_innodb_mutexes =
{
/* the plugin type (a MYSQL_XXX_PLUGIN value) */
/* int */
STRUCT_FLD ( type , MYSQL_INFORMATION_SCHEMA_PLUGIN ) ,
/* pointer to type-specific plugin descriptor */
/* void* */
STRUCT_FLD ( info , & i_s_info ) ,
/* plugin name */
/* const char* */
STRUCT_FLD ( name , " INNODB_MUTEXES " ) ,
/* plugin author (for SHOW PLUGINS) */
/* const char* */
STRUCT_FLD ( author , plugin_author ) ,
/* general descriptive text (for SHOW PLUGINS) */
/* const char* */
STRUCT_FLD ( descr , " InnoDB SYS_DATAFILES " ) ,
/* the plugin license (PLUGIN_LICENSE_XXX) */
/* int */
STRUCT_FLD ( license , PLUGIN_LICENSE_GPL ) ,
/* the function to invoke when plugin is loaded */
/* int (*)(void*); */
STRUCT_FLD ( init , innodb_mutexes_init ) ,
/* the function to invoke when plugin is unloaded */
/* int (*)(void*); */
STRUCT_FLD ( deinit , i_s_common_deinit ) ,
/* plugin version (for SHOW PLUGINS) */
/* unsigned int */
STRUCT_FLD ( version , INNODB_VERSION_SHORT ) ,
/* struct st_mysql_show_var* */
STRUCT_FLD ( status_vars , NULL ) ,
/* struct st_mysql_sys_var** */
STRUCT_FLD ( system_vars , NULL ) ,
/* Maria extension */
STRUCT_FLD ( version_info , INNODB_VERSION_STR ) ,
STRUCT_FLD ( maturity , MariaDB_PLUGIN_MATURITY_STABLE ) ,
} ;
/** SYS_SEMAPHORE_WAITS ************************************************/
/* Fields of the dynamic table INFORMATION_SCHEMA.INNODB_SYS_SEMAPHORE_WAITS */
static ST_FIELD_INFO innodb_sys_semaphore_waits_fields_info [ ] =
{
// SYS_SEMAPHORE_WAITS_THREAD_ID 0
{ STRUCT_FLD ( field_name , " THREAD_ID " ) ,
STRUCT_FLD ( field_length , MY_INT64_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONGLONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_OBJECT_NAME 1
{ STRUCT_FLD ( field_name , " OBJECT_NAME " ) ,
STRUCT_FLD ( field_length , OS_FILE_MAX_PATH ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_STRING ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_MAYBE_NULL ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_FILE 2
{ STRUCT_FLD ( field_name , " FILE " ) ,
STRUCT_FLD ( field_length , OS_FILE_MAX_PATH ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_STRING ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_MAYBE_NULL ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_LINE 3
{ STRUCT_FLD ( field_name , " LINE " ) ,
STRUCT_FLD ( field_length , MY_INT32_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_WAIT_TIME 4
{ STRUCT_FLD ( field_name , " WAIT_TIME " ) ,
STRUCT_FLD ( field_length , MY_INT64_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONGLONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_WAIT_OBJECT 5
{ STRUCT_FLD ( field_name , " WAIT_OBJECT " ) ,
STRUCT_FLD ( field_length , MY_INT64_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONGLONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_WAIT_TYPE 6
{ STRUCT_FLD ( field_name , " WAIT_TYPE " ) ,
STRUCT_FLD ( field_length , 16 ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_STRING ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_MAYBE_NULL ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_HOLDER_THREAD_ID 7
{ STRUCT_FLD ( field_name , " HOLDER_THREAD_ID " ) ,
STRUCT_FLD ( field_length , MY_INT64_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONGLONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_HOLDER_FILE 8
{ STRUCT_FLD ( field_name , " HOLDER_FILE " ) ,
STRUCT_FLD ( field_length , OS_FILE_MAX_PATH ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_STRING ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_MAYBE_NULL ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_HOLDER_LINE 9
{ STRUCT_FLD ( field_name , " HOLDER_LINE " ) ,
STRUCT_FLD ( field_length , MY_INT32_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_CREATED_FILE 10
{ STRUCT_FLD ( field_name , " CREATED_FILE " ) ,
STRUCT_FLD ( field_length , OS_FILE_MAX_PATH ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_STRING ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_MAYBE_NULL ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_CREATED_LINE 11
{ STRUCT_FLD ( field_name , " CREATED_LINE " ) ,
STRUCT_FLD ( field_length , MY_INT32_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_WRITER_THREAD 12
{ STRUCT_FLD ( field_name , " WRITER_THREAD " ) ,
STRUCT_FLD ( field_length , MY_INT64_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONGLONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_RESERVATION_MODE 13
{ STRUCT_FLD ( field_name , " RESERVATION_MODE " ) ,
STRUCT_FLD ( field_length , 16 ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_STRING ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_MAYBE_NULL ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_READERS 14
{ STRUCT_FLD ( field_name , " READERS " ) ,
STRUCT_FLD ( field_length , MY_INT32_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_WAITERS_FLAG 15
{ STRUCT_FLD ( field_name , " WAITERS_FLAG " ) ,
STRUCT_FLD ( field_length , MY_INT64_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONGLONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_LOCK_WORD 16
{ STRUCT_FLD ( field_name , " LOCK_WORD " ) ,
STRUCT_FLD ( field_length , MY_INT64_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONGLONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_LAST_READER_FILE 17
{ STRUCT_FLD ( field_name , " LAST_READER_FILE " ) ,
STRUCT_FLD ( field_length , OS_FILE_MAX_PATH ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_STRING ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_MAYBE_NULL ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_LAST_READER_LINE 18
{ STRUCT_FLD ( field_name , " LAST_READER_LINE " ) ,
STRUCT_FLD ( field_length , MY_INT32_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_LAST_WRITER_FILE 19
{ STRUCT_FLD ( field_name , " LAST_WRITER_FILE " ) ,
STRUCT_FLD ( field_length , OS_FILE_MAX_PATH ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_STRING ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_MAYBE_NULL ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_LAST_WRITER_LINE 20
{ STRUCT_FLD ( field_name , " LAST_WRITER_LINE " ) ,
STRUCT_FLD ( field_length , MY_INT32_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
// SYS_SEMAPHORE_WAITS_OS_WAIT_COUNT 21
{ STRUCT_FLD ( field_name , " OS_WAIT_COUNT " ) ,
STRUCT_FLD ( field_length , MY_INT32_NUM_DECIMAL_DIGITS ) ,
STRUCT_FLD ( field_type , MYSQL_TYPE_LONG ) ,
STRUCT_FLD ( value , 0 ) ,
STRUCT_FLD ( field_flags , MY_I_S_UNSIGNED ) ,
STRUCT_FLD ( old_name , " " ) ,
STRUCT_FLD ( open_method , SKIP_OPEN_TABLE ) } ,
END_OF_ST_FIELD_INFO
} ;
/*******************************************************************/ /**
Bind the dynamic table INFORMATION_SCHEMA . INNODB_SYS_SEMAPHORE_WAITS
@ return 0 on success */
static
int
innodb_sys_semaphore_waits_init (
/*============================*/
void * p ) /*!< in/out: table schema object */
{
ST_SCHEMA_TABLE * schema ;
DBUG_ENTER ( " innodb_sys_semaphore_waits_init " ) ;
schema = ( ST_SCHEMA_TABLE * ) p ;
schema - > fields_info = innodb_sys_semaphore_waits_fields_info ;
schema - > fill_table = sync_arr_fill_sys_semphore_waits_table ;
DBUG_RETURN ( 0 ) ;
}
UNIV_INTERN struct st_mysql_plugin i_s_innodb_sys_semaphore_waits =
{
/* the plugin type (a MYSQL_XXX_PLUGIN value) */
/* int */
STRUCT_FLD ( type , MYSQL_INFORMATION_SCHEMA_PLUGIN ) ,
/* pointer to type-specific plugin descriptor */
/* void* */
STRUCT_FLD ( info , & i_s_info ) ,
/* plugin name */
/* const char* */
STRUCT_FLD ( name , " INNODB_SYS_SEMAPHORE_WAITS " ) ,
/* plugin author (for SHOW PLUGINS) */
/* const char* */
STRUCT_FLD ( author , maria_plugin_author ) ,
/* general descriptive text (for SHOW PLUGINS) */
/* const char* */
STRUCT_FLD ( descr , " InnoDB SYS_SEMAPHORE_WAITS " ) ,
/* the plugin license (PLUGIN_LICENSE_XXX) */
/* int */
STRUCT_FLD ( license , PLUGIN_LICENSE_GPL ) ,
/* the function to invoke when plugin is loaded */
/* int (*)(void*); */
STRUCT_FLD ( init , innodb_sys_semaphore_waits_init ) ,
/* the function to invoke when plugin is unloaded */
/* int (*)(void*); */
STRUCT_FLD ( deinit , i_s_common_deinit ) ,
/* plugin version (for SHOW PLUGINS) */
/* unsigned int */
STRUCT_FLD ( version , INNODB_VERSION_SHORT ) ,
/* struct st_mysql_show_var* */
STRUCT_FLD ( status_vars , NULL ) ,
/* struct st_mysql_sys_var** */
STRUCT_FLD ( system_vars , NULL ) ,
/* Maria extension */
STRUCT_FLD ( version_info , INNODB_VERSION_STR ) ,
STRUCT_FLD ( maturity , MariaDB_PLUGIN_MATURITY_STABLE ) ,
} ;