2009-02-17 08:25:45 +00:00
|
|
|
/*****************************************************************************
|
|
|
|
|
|
|
|
Copyright (c) 2007, 2009, Innobase Oy. 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, Inc., 59 Temple
|
|
|
|
Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/**************************************************//**
|
|
|
|
@file handler/i_s.cc
|
2007-09-20 11:23:44 +00:00
|
|
|
InnoDB INFORMATION SCHEMA tables interface to MySQL.
|
|
|
|
|
|
|
|
Created July 18, 2007 Vasil Dimov
|
|
|
|
*******************************************************/
|
|
|
|
|
|
|
|
#include <mysql_priv.h>
|
|
|
|
#include <mysqld_error.h>
|
|
|
|
|
|
|
|
#include <m_ctype.h>
|
|
|
|
#include <hash.h>
|
|
|
|
#include <myisampack.h>
|
|
|
|
#include <mysys_err.h>
|
|
|
|
#include <my_sys.h>
|
|
|
|
#include "i_s.h"
|
|
|
|
#include <mysql/plugin.h>
|
|
|
|
|
|
|
|
extern "C" {
|
|
|
|
#include "trx0i_s.h"
|
|
|
|
#include "trx0trx.h" /* for TRX_QUE_STATE_STR_MAX_LEN */
|
2008-03-28 10:31:24 +00:00
|
|
|
#include "buf0buddy.h" /* for i_s_cmpmem */
|
2007-10-05 10:59:34 +00:00
|
|
|
#include "buf0buf.h" /* for buf_pool and PAGE_ZIP_MIN_SIZE */
|
2007-11-21 08:46:11 +00:00
|
|
|
#include "ha_prototypes.h" /* for innobase_convert_name() */
|
2008-04-29 14:57:06 +00:00
|
|
|
#include "srv0start.h" /* for srv_was_started */
|
2007-09-20 11:23:44 +00:00
|
|
|
}
|
branches/zip: implement the delayloading of externals for the plugin
on Windows, which includes:
* Load mysqld.map and insert all symbol/address pairs into hash for
quick access
* Resolves all external data variables. The delayloading mechanism
in MSVC does not support automatic imports of data variables.
A workaround is to explicitly handle the data import using the delay
loader during the initialization of the plugin.
* Resolves all external functions during run-time, by implementing
the delayed loading helper function delayLoadHelper2, which is
called by run-time as well as HrLoadAllImportsForDll.
The delay loader reuses the hash implementation in InnoDB. The normal
hash_create (in hash0hash.c) creates hash tables in buffer pool. But
the delay loader is invoked before the engine is initialized, and
buffer pools are not ready yet. Instead, the delay loader has its own
implementation of hash_create() and hash_table_free(), called
wdl_hash_create() and wdl_hash_table_free().
This patch should be used with other two patches in order to build
a dynamically linked plugin on Windows:
* patch for tmpfile functions (r2886)
* patch for "build" files (to be committed)
The list of file changed:
handler/handler0vars.h: new file, defines a list of external data
variables (no external functions).
handler/win_delay_loader.cc: new file, the implementation of the delay
loader for Windows plugin.
handler/ha_innodb.cc: add a header file, and changes for copying the
system variables.
handler/handler0alter.cc: add a header file
handler/i_s.cc: add a header file
rb://27
Reviewed by: Sunny, Marko
Approved by: Sunny
2008-10-27 20:48:29 +00:00
|
|
|
#include "handler0vars.h"
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2007-10-03 14:00:54 +00:00
|
|
|
static const char plugin_author[] = "Innobase Oy";
|
|
|
|
|
2007-09-20 11:23:44 +00:00
|
|
|
#define OK(expr) \
|
|
|
|
if ((expr) != 0) { \
|
|
|
|
DBUG_RETURN(1); \
|
|
|
|
}
|
|
|
|
|
2008-05-06 10:01:41 +00:00
|
|
|
#define RETURN_IF_INNODB_NOT_STARTED(plugin_name) \
|
|
|
|
do { \
|
|
|
|
if (!srv_was_started) { \
|
|
|
|
push_warning_printf(thd, MYSQL_ERROR::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); \
|
|
|
|
} \
|
2008-04-29 14:57:06 +00:00
|
|
|
} while (0)
|
|
|
|
|
2007-11-01 11:44:49 +00:00
|
|
|
#if !defined __STRICT_ANSI__ && defined __GNUC__ && (__GNUC__) > 2 && !defined __INTEL_COMPILER
|
2007-09-20 11:23:44 +00:00
|
|
|
#define STRUCT_FLD(name, value) name: value
|
|
|
|
#else
|
|
|
|
#define STRUCT_FLD(name, value) value
|
|
|
|
#endif
|
|
|
|
|
2007-10-03 14:00:54 +00:00
|
|
|
static const ST_FIELD_INFO 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)};
|
|
|
|
|
2007-09-20 11:23:44 +00:00
|
|
|
/*
|
|
|
|
Use the following types mapping:
|
|
|
|
|
|
|
|
C type ST_FIELD_INFO::field_type
|
|
|
|
---------------------------------
|
|
|
|
long MYSQL_TYPE_LONGLONG
|
|
|
|
(field_length=MY_INT64_NUM_DECIMAL_DIGITS)
|
|
|
|
|
|
|
|
long unsigned MYSQL_TYPE_LONGLONG
|
|
|
|
(field_length=MY_INT64_NUM_DECIMAL_DIGITS, field_flags=MY_I_S_UNSIGNED)
|
|
|
|
|
|
|
|
char* MYSQL_TYPE_STRING
|
|
|
|
(field_length=n)
|
|
|
|
|
|
|
|
float MYSQL_TYPE_FLOAT
|
|
|
|
(field_length=0 is ignored)
|
|
|
|
|
|
|
|
void* MYSQL_TYPE_LONGLONG
|
|
|
|
(field_length=MY_INT64_NUM_DECIMAL_DIGITS, field_flags=MY_I_S_UNSIGNED)
|
|
|
|
|
|
|
|
boolean (if else) MYSQL_TYPE_LONG
|
|
|
|
(field_length=1)
|
|
|
|
|
|
|
|
time_t MYSQL_TYPE_DATETIME
|
|
|
|
(field_length=0 ignored)
|
|
|
|
---------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* XXX these are defined in mysql_priv.h inside #ifdef MYSQL_SERVER */
|
|
|
|
bool schema_table_store_record(THD *thd, TABLE *table);
|
|
|
|
void localtime_to_TIME(MYSQL_TIME *to, struct tm *from);
|
2007-11-05 14:17:07 +00:00
|
|
|
bool check_global_access(THD *thd, ulong want_access);
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2007-09-20 11:23:44 +00:00
|
|
|
Common function to fill any of the dynamic tables:
|
|
|
|
INFORMATION_SCHEMA.innodb_trx
|
|
|
|
INFORMATION_SCHEMA.innodb_locks
|
2009-05-25 05:30:14 +00:00
|
|
|
INFORMATION_SCHEMA.innodb_lock_waits
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
|
|
|
trx_i_s_common_fill_table(
|
|
|
|
/*======================*/
|
2009-05-25 05:30:14 +00:00
|
|
|
THD* thd, /*!< in: thread */
|
|
|
|
TABLE_LIST* tables, /*!< in/out: tables to fill */
|
|
|
|
COND* cond); /*!< in: condition (not used) */
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Unbind a dynamic INFORMATION_SCHEMA table.
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
2007-10-03 14:00:54 +00:00
|
|
|
i_s_common_deinit(
|
|
|
|
/*==============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
void* p); /*!< in/out: table schema object */
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2007-09-20 11:23:44 +00:00
|
|
|
Auxiliary function to store time_t value in MYSQL_TYPE_DATETIME
|
2009-05-25 05:30:14 +00:00
|
|
|
field.
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
|
|
|
field_store_time_t(
|
|
|
|
/*===============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
Field* field, /*!< in/out: target field for storage */
|
|
|
|
time_t time) /*!< in: value to store */
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
MYSQL_TIME my_time;
|
|
|
|
struct tm tm_time;
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
/* use this if you are sure that `variables' and `time_zone'
|
|
|
|
are always initialized */
|
|
|
|
thd->variables.time_zone->gmt_sec_to_TIME(
|
|
|
|
&my_time, (my_time_t) time);
|
|
|
|
#else
|
|
|
|
localtime_r(&time, &tm_time);
|
|
|
|
localtime_to_TIME(&my_time, &tm_time);
|
|
|
|
my_time.time_type = MYSQL_TIMESTAMP_DATETIME;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return(field->store_time(&my_time, MYSQL_TIMESTAMP_DATETIME));
|
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Auxiliary function to store char* value in MYSQL_TYPE_STRING field.
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
|
|
|
field_store_string(
|
|
|
|
/*===============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
Field* field, /*!< in/out: target field for storage */
|
|
|
|
const char* str) /*!< in: NUL-terminated utf-8 string,
|
2007-09-20 11:23:44 +00:00
|
|
|
or NULL */
|
|
|
|
{
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
if (str != NULL) {
|
|
|
|
|
|
|
|
ret = field->store(str, strlen(str),
|
|
|
|
system_charset_info);
|
|
|
|
field->set_notnull();
|
|
|
|
} else {
|
|
|
|
|
|
|
|
ret = 0; /* success */
|
|
|
|
field->set_null();
|
|
|
|
}
|
|
|
|
|
|
|
|
return(ret);
|
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2007-09-20 11:23:44 +00:00
|
|
|
Auxiliary function to store ulint value in MYSQL_TYPE_LONGLONG field.
|
2009-05-25 05:30:14 +00:00
|
|
|
If the value is ULINT_UNDEFINED then the field it set to NULL.
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
|
|
|
field_store_ulint(
|
|
|
|
/*==============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
Field* field, /*!< in/out: target field for storage */
|
|
|
|
ulint n) /*!< in: value to store */
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
if (n != ULINT_UNDEFINED) {
|
|
|
|
|
|
|
|
ret = field->store(n);
|
|
|
|
field->set_notnull();
|
|
|
|
} else {
|
|
|
|
|
|
|
|
ret = 0; /* success */
|
|
|
|
field->set_null();
|
|
|
|
}
|
|
|
|
|
|
|
|
return(ret);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Fields of the dynamic table INFORMATION_SCHEMA.innodb_trx */
|
|
|
|
static ST_FIELD_INFO innodb_trx_fields_info[] =
|
|
|
|
{
|
|
|
|
#define IDX_TRX_ID 0
|
|
|
|
{STRUCT_FLD(field_name, "trx_id"),
|
2007-12-20 14:24:57 +00:00
|
|
|
STRUCT_FLD(field_length, TRX_ID_MAX_LEN + 1),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
2007-09-20 11:23:44 +00:00
|
|
|
STRUCT_FLD(value, 0),
|
2007-12-20 14:24:57 +00:00
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2008-01-16 06:45:16 +00:00
|
|
|
#define IDX_TRX_STATE 1
|
2007-09-20 11:23:44 +00:00
|
|
|
{STRUCT_FLD(field_name, "trx_state"),
|
|
|
|
STRUCT_FLD(field_length, TRX_QUE_STATE_STR_MAX_LEN + 1),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2008-01-16 06:45:16 +00:00
|
|
|
#define IDX_TRX_STARTED 2
|
2007-09-20 11:23:44 +00:00
|
|
|
{STRUCT_FLD(field_name, "trx_started"),
|
|
|
|
STRUCT_FLD(field_length, 0),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_DATETIME),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2008-01-16 06:45:16 +00:00
|
|
|
#define IDX_TRX_REQUESTED_LOCK_ID 3
|
2007-11-29 13:47:09 +00:00
|
|
|
{STRUCT_FLD(field_name, "trx_requested_lock_id"),
|
2007-12-18 09:44:03 +00:00
|
|
|
STRUCT_FLD(field_length, TRX_I_S_LOCK_ID_MAX_LEN + 1),
|
2007-09-20 11:23:44 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2008-01-16 06:45:16 +00:00
|
|
|
#define IDX_TRX_WAIT_STARTED 4
|
2007-09-20 11:23:44 +00:00
|
|
|
{STRUCT_FLD(field_name, "trx_wait_started"),
|
|
|
|
STRUCT_FLD(field_length, 0),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_DATETIME),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2008-01-16 06:45:16 +00:00
|
|
|
#define IDX_TRX_WEIGHT 5
|
|
|
|
{STRUCT_FLD(field_name, "trx_weight"),
|
|
|
|
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)},
|
|
|
|
|
2007-11-28 07:07:23 +00:00
|
|
|
#define IDX_TRX_MYSQL_THREAD_ID 6
|
2007-09-20 11:23:44 +00:00
|
|
|
{STRUCT_FLD(field_name, "trx_mysql_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),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2007-11-28 07:07:23 +00:00
|
|
|
#define IDX_TRX_QUERY 7
|
2007-11-07 20:38:07 +00:00
|
|
|
{STRUCT_FLD(field_name, "trx_query"),
|
|
|
|
STRUCT_FLD(field_length, TRX_I_S_TRX_QUERY_MAX_LEN),
|
|
|
|
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)},
|
|
|
|
|
2007-10-03 14:00:54 +00:00
|
|
|
END_OF_ST_FIELD_INFO
|
2007-09-20 11:23:44 +00:00
|
|
|
};
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2007-09-20 11:23:44 +00:00
|
|
|
Read data from cache buffer and fill the INFORMATION_SCHEMA.innodb_trx
|
2009-05-25 05:30:14 +00:00
|
|
|
table with it.
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
|
|
|
fill_innodb_trx_from_cache(
|
|
|
|
/*=======================*/
|
2009-05-25 05:30:14 +00:00
|
|
|
trx_i_s_cache_t* cache, /*!< in: cache to read from */
|
|
|
|
THD* thd, /*!< in: used to call
|
2007-09-20 11:23:44 +00:00
|
|
|
schema_table_store_record() */
|
2009-05-25 05:30:14 +00:00
|
|
|
TABLE* table) /*!< in/out: fill this table */
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
Field** fields;
|
|
|
|
ulint rows_num;
|
2007-12-18 09:44:03 +00:00
|
|
|
char lock_id[TRX_I_S_LOCK_ID_MAX_LEN + 1];
|
2007-09-20 11:23:44 +00:00
|
|
|
ulint i;
|
|
|
|
|
|
|
|
DBUG_ENTER("fill_innodb_trx_from_cache");
|
|
|
|
|
|
|
|
fields = table->field;
|
|
|
|
|
|
|
|
rows_num = trx_i_s_cache_get_rows_used(cache,
|
|
|
|
I_S_INNODB_TRX);
|
|
|
|
|
|
|
|
for (i = 0; i < rows_num; i++) {
|
|
|
|
|
|
|
|
i_s_trx_row_t* row;
|
2007-12-20 14:24:57 +00:00
|
|
|
char trx_id[TRX_ID_MAX_LEN + 1];
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
row = (i_s_trx_row_t*)
|
|
|
|
trx_i_s_cache_get_nth_row(
|
|
|
|
cache, I_S_INNODB_TRX, i);
|
|
|
|
|
|
|
|
/* trx_id */
|
2007-12-20 14:24:57 +00:00
|
|
|
ut_snprintf(trx_id, sizeof(trx_id), TRX_ID_FMT, row->trx_id);
|
|
|
|
OK(field_store_string(fields[IDX_TRX_ID], trx_id));
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* trx_state */
|
|
|
|
OK(field_store_string(fields[IDX_TRX_STATE],
|
|
|
|
row->trx_state));
|
|
|
|
|
|
|
|
/* trx_started */
|
|
|
|
OK(field_store_time_t(fields[IDX_TRX_STARTED],
|
|
|
|
(time_t) row->trx_started));
|
|
|
|
|
2007-11-29 13:47:09 +00:00
|
|
|
/* trx_requested_lock_id */
|
2007-09-20 11:23:44 +00:00
|
|
|
/* trx_wait_started */
|
|
|
|
if (row->trx_wait_started != 0) {
|
|
|
|
|
|
|
|
OK(field_store_string(
|
2007-11-29 13:47:09 +00:00
|
|
|
fields[IDX_TRX_REQUESTED_LOCK_ID],
|
2007-09-20 11:23:44 +00:00
|
|
|
trx_i_s_create_lock_id(
|
2007-11-29 13:47:09 +00:00
|
|
|
row->requested_lock_row,
|
2007-09-20 11:23:44 +00:00
|
|
|
lock_id, sizeof(lock_id))));
|
|
|
|
/* field_store_string() sets it no notnull */
|
|
|
|
|
|
|
|
OK(field_store_time_t(
|
|
|
|
fields[IDX_TRX_WAIT_STARTED],
|
|
|
|
(time_t) row->trx_wait_started));
|
|
|
|
fields[IDX_TRX_WAIT_STARTED]->set_notnull();
|
|
|
|
} else {
|
|
|
|
|
2007-11-29 13:47:09 +00:00
|
|
|
fields[IDX_TRX_REQUESTED_LOCK_ID]->set_null();
|
2007-09-20 11:23:44 +00:00
|
|
|
fields[IDX_TRX_WAIT_STARTED]->set_null();
|
|
|
|
}
|
|
|
|
|
2008-01-16 06:45:16 +00:00
|
|
|
/* trx_weight */
|
branches/zip: Fix most MSVC (Windows) compilation warnings.
lock_get_table(), locks_row_eq_lock(), buf_page_get_mutex(): Add return
after ut_error. On Windows, ut_error is not declared as "noreturn".
Add explicit type casts when assigning ulint to byte to get rid of
"possible loss of precision" warnings.
struct i_s_table_cache_struct: Declare rows_used, rows_allocd as ulint
instead of ullint. 32 bits should be enough.
fill_innodb_trx_from_cache(), i_s_zip_fill_low(): Cast 64-bit unsigned
integers to longlong when calling Field::store(longlong, bool is_unsigned).
Otherwise, the compiler would implicitly convert them to double and
invoke Field::store(double) instead.
recv_truncate_group(), recv_copy_group(), recv_calc_lsn_on_data_add():
Cast ib_uint64_t expressions to ulint to get rid of "possible loss of
precision" warnings. (There should not be any loss of precision in
these cases.)
log_close(), log_checkpoint_margin(): Declare some variables as ib_uint64_t
instead of ulint, so that there won't be any potential loss of precision.
mach_write_ull(): Cast the second argument of mach_write_to_4() to ulint.
OS_FILE_FROM_FD(): Cast the return value of _get_osfhandle() to HANDLE.
row_merge_dict_table_get_index(): Cast the parameter of mem_free() to (void*)
in order to get rid of the bogus MSVC warning C4090, which has been reported
as MSVC bug 101661:
<http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=101661>
row_mysql_read_blob_ref(): To get rid of a bogus MSVC warning C4090,
drop a const qualifier.
2008-03-04 08:57:07 +00:00
|
|
|
OK(fields[IDX_TRX_WEIGHT]->store((longlong) row->trx_weight,
|
|
|
|
true));
|
2008-01-16 06:45:16 +00:00
|
|
|
|
2007-09-20 11:23:44 +00:00
|
|
|
/* trx_mysql_thread_id */
|
|
|
|
OK(fields[IDX_TRX_MYSQL_THREAD_ID]->store(
|
|
|
|
row->trx_mysql_thread_id));
|
|
|
|
|
2007-11-07 20:38:07 +00:00
|
|
|
/* trx_query */
|
|
|
|
OK(field_store_string(fields[IDX_TRX_QUERY],
|
|
|
|
row->trx_query));
|
|
|
|
|
2007-09-20 11:23:44 +00:00
|
|
|
OK(schema_table_store_record(thd, table));
|
|
|
|
}
|
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Bind the dynamic table INFORMATION_SCHEMA.innodb_trx
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
|
|
|
innodb_trx_init(
|
|
|
|
/*============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
void* p) /*!< in/out: table schema object */
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
ST_SCHEMA_TABLE* schema;
|
|
|
|
|
|
|
|
DBUG_ENTER("innodb_trx_init");
|
|
|
|
|
|
|
|
schema = (ST_SCHEMA_TABLE*) p;
|
|
|
|
|
|
|
|
schema->fields_info = innodb_trx_fields_info;
|
|
|
|
schema->fill_table = trx_i_s_common_fill_table;
|
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2007-10-03 14:00:54 +00:00
|
|
|
static struct st_mysql_information_schema i_s_info =
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION
|
|
|
|
};
|
|
|
|
|
2008-02-06 16:11:46 +00:00
|
|
|
UNIV_INTERN struct st_mysql_plugin i_s_innodb_trx =
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
/* the plugin type (a MYSQL_XXX_PLUGIN value) */
|
|
|
|
/* int */
|
|
|
|
STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
|
|
|
|
|
|
|
|
/* pointer to type-specific plugin descriptor */
|
|
|
|
/* void* */
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(info, &i_s_info),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* plugin name */
|
|
|
|
/* const char* */
|
2007-11-21 07:38:56 +00:00
|
|
|
STRUCT_FLD(name, "INNODB_TRX"),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* plugin author (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(author, plugin_author),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* general descriptive text (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
|
|
|
STRUCT_FLD(descr, "InnoDB transactions"),
|
|
|
|
|
|
|
|
/* 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_trx_init),
|
|
|
|
|
|
|
|
/* the function to invoke when plugin is unloaded */
|
|
|
|
/* int (*)(void*); */
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(deinit, i_s_common_deinit),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* plugin version (for SHOW PLUGINS) */
|
|
|
|
/* unsigned int */
|
2008-05-06 11:10:09 +00:00
|
|
|
STRUCT_FLD(version, INNODB_VERSION_SHORT),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* struct st_mysql_show_var* */
|
|
|
|
STRUCT_FLD(status_vars, NULL),
|
|
|
|
|
|
|
|
/* struct st_mysql_sys_var** */
|
|
|
|
STRUCT_FLD(system_vars, NULL),
|
|
|
|
|
|
|
|
/* reserved for dependency checking */
|
|
|
|
/* void* */
|
|
|
|
STRUCT_FLD(__reserved1, NULL)
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Fields of the dynamic table INFORMATION_SCHEMA.innodb_locks */
|
|
|
|
static ST_FIELD_INFO innodb_locks_fields_info[] =
|
|
|
|
{
|
|
|
|
#define IDX_LOCK_ID 0
|
|
|
|
{STRUCT_FLD(field_name, "lock_id"),
|
2007-12-18 09:44:03 +00:00
|
|
|
STRUCT_FLD(field_length, TRX_I_S_LOCK_ID_MAX_LEN + 1),
|
2007-09-20 11:23:44 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
#define IDX_LOCK_TRX_ID 1
|
|
|
|
{STRUCT_FLD(field_name, "lock_trx_id"),
|
2007-12-20 14:24:57 +00:00
|
|
|
STRUCT_FLD(field_length, TRX_ID_MAX_LEN + 1),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
2007-09-20 11:23:44 +00:00
|
|
|
STRUCT_FLD(value, 0),
|
2007-12-20 14:24:57 +00:00
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
#define IDX_LOCK_MODE 2
|
|
|
|
{STRUCT_FLD(field_name, "lock_mode"),
|
2007-10-25 11:21:11 +00:00
|
|
|
/* S[,GAP] X[,GAP] IS[,GAP] IX[,GAP] AUTO_INC UNKNOWN */
|
|
|
|
STRUCT_FLD(field_length, 32),
|
2007-09-20 11:23:44 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
#define IDX_LOCK_TYPE 3
|
|
|
|
{STRUCT_FLD(field_name, "lock_type"),
|
|
|
|
STRUCT_FLD(field_length, 32 /* RECORD|TABLE|UNKNOWN */),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
#define IDX_LOCK_TABLE 4
|
|
|
|
{STRUCT_FLD(field_name, "lock_table"),
|
|
|
|
STRUCT_FLD(field_length, 1024),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
#define IDX_LOCK_INDEX 5
|
|
|
|
{STRUCT_FLD(field_name, "lock_index"),
|
|
|
|
STRUCT_FLD(field_length, 1024),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
#define IDX_LOCK_SPACE 6
|
|
|
|
{STRUCT_FLD(field_name, "lock_space"),
|
|
|
|
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 | MY_I_S_MAYBE_NULL),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
#define IDX_LOCK_PAGE 7
|
|
|
|
{STRUCT_FLD(field_name, "lock_page"),
|
|
|
|
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 | MY_I_S_MAYBE_NULL),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
#define IDX_LOCK_REC 8
|
|
|
|
{STRUCT_FLD(field_name, "lock_rec"),
|
|
|
|
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 | MY_I_S_MAYBE_NULL),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2007-10-29 13:03:53 +00:00
|
|
|
#define IDX_LOCK_DATA 9
|
|
|
|
{STRUCT_FLD(field_name, "lock_data"),
|
|
|
|
STRUCT_FLD(field_length, TRX_I_S_LOCK_DATA_MAX_LEN),
|
|
|
|
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)},
|
|
|
|
|
2007-10-03 14:00:54 +00:00
|
|
|
END_OF_ST_FIELD_INFO
|
2007-09-20 11:23:44 +00:00
|
|
|
};
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2007-09-20 11:23:44 +00:00
|
|
|
Read data from cache buffer and fill the INFORMATION_SCHEMA.innodb_locks
|
2009-05-25 05:30:14 +00:00
|
|
|
table with it.
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
|
|
|
fill_innodb_locks_from_cache(
|
|
|
|
/*=========================*/
|
2009-05-25 05:30:14 +00:00
|
|
|
trx_i_s_cache_t* cache, /*!< in: cache to read from */
|
|
|
|
THD* thd, /*!< in: MySQL client connection */
|
|
|
|
TABLE* table) /*!< in/out: fill this table */
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
Field** fields;
|
|
|
|
ulint rows_num;
|
2007-12-18 09:44:03 +00:00
|
|
|
char lock_id[TRX_I_S_LOCK_ID_MAX_LEN + 1];
|
2007-09-20 11:23:44 +00:00
|
|
|
ulint i;
|
|
|
|
|
|
|
|
DBUG_ENTER("fill_innodb_locks_from_cache");
|
|
|
|
|
|
|
|
fields = table->field;
|
|
|
|
|
|
|
|
rows_num = trx_i_s_cache_get_rows_used(cache,
|
|
|
|
I_S_INNODB_LOCKS);
|
|
|
|
|
|
|
|
for (i = 0; i < rows_num; i++) {
|
|
|
|
|
|
|
|
i_s_locks_row_t* row;
|
2007-11-21 12:11:04 +00:00
|
|
|
|
2007-11-21 17:15:27 +00:00
|
|
|
/* note that the decoded database or table name is
|
|
|
|
never expected to be longer than NAME_LEN;
|
|
|
|
NAME_LEN for database name
|
|
|
|
2 for surrounding quotes around database name
|
|
|
|
NAME_LEN for table name
|
|
|
|
2 for surrounding quotes around table name
|
2007-11-21 12:11:04 +00:00
|
|
|
1 for the separating dot (.)
|
|
|
|
9 for the #mysql50# prefix */
|
2007-11-21 17:15:27 +00:00
|
|
|
char buf[2 * NAME_LEN + 14];
|
2007-11-21 08:46:11 +00:00
|
|
|
const char* bufend;
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2007-12-20 14:24:57 +00:00
|
|
|
char lock_trx_id[TRX_ID_MAX_LEN + 1];
|
|
|
|
|
2007-09-20 11:23:44 +00:00
|
|
|
row = (i_s_locks_row_t*)
|
|
|
|
trx_i_s_cache_get_nth_row(
|
|
|
|
cache, I_S_INNODB_LOCKS, i);
|
|
|
|
|
|
|
|
/* lock_id */
|
2007-10-11 10:45:57 +00:00
|
|
|
trx_i_s_create_lock_id(row, lock_id, sizeof(lock_id));
|
|
|
|
OK(field_store_string(fields[IDX_LOCK_ID],
|
|
|
|
lock_id));
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* lock_trx_id */
|
2007-12-20 14:24:57 +00:00
|
|
|
ut_snprintf(lock_trx_id, sizeof(lock_trx_id),
|
|
|
|
TRX_ID_FMT, row->lock_trx_id);
|
|
|
|
OK(field_store_string(fields[IDX_LOCK_TRX_ID], lock_trx_id));
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* lock_mode */
|
|
|
|
OK(field_store_string(fields[IDX_LOCK_MODE],
|
|
|
|
row->lock_mode));
|
|
|
|
|
|
|
|
/* lock_type */
|
|
|
|
OK(field_store_string(fields[IDX_LOCK_TYPE],
|
|
|
|
row->lock_type));
|
|
|
|
|
|
|
|
/* lock_table */
|
2007-11-21 11:44:36 +00:00
|
|
|
bufend = innobase_convert_name(buf, sizeof(buf),
|
2007-11-21 08:46:11 +00:00
|
|
|
row->lock_table,
|
|
|
|
strlen(row->lock_table),
|
|
|
|
thd, TRUE);
|
|
|
|
OK(fields[IDX_LOCK_TABLE]->store(buf, bufend - buf,
|
|
|
|
system_charset_info));
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* lock_index */
|
2007-11-21 12:01:36 +00:00
|
|
|
if (row->lock_index != NULL) {
|
|
|
|
|
|
|
|
bufend = innobase_convert_name(buf, sizeof(buf),
|
|
|
|
row->lock_index,
|
|
|
|
strlen(row->lock_index),
|
|
|
|
thd, FALSE);
|
|
|
|
OK(fields[IDX_LOCK_INDEX]->store(buf, bufend - buf,
|
|
|
|
system_charset_info));
|
|
|
|
fields[IDX_LOCK_INDEX]->set_notnull();
|
|
|
|
} else {
|
|
|
|
|
|
|
|
fields[IDX_LOCK_INDEX]->set_null();
|
|
|
|
}
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* lock_space */
|
|
|
|
OK(field_store_ulint(fields[IDX_LOCK_SPACE],
|
|
|
|
row->lock_space));
|
|
|
|
|
|
|
|
/* lock_page */
|
|
|
|
OK(field_store_ulint(fields[IDX_LOCK_PAGE],
|
|
|
|
row->lock_page));
|
|
|
|
|
|
|
|
/* lock_rec */
|
|
|
|
OK(field_store_ulint(fields[IDX_LOCK_REC],
|
|
|
|
row->lock_rec));
|
|
|
|
|
2007-10-29 13:03:53 +00:00
|
|
|
/* lock_data */
|
|
|
|
OK(field_store_string(fields[IDX_LOCK_DATA],
|
|
|
|
row->lock_data));
|
|
|
|
|
2007-09-20 11:23:44 +00:00
|
|
|
OK(schema_table_store_record(thd, table));
|
|
|
|
}
|
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Bind the dynamic table INFORMATION_SCHEMA.innodb_locks
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
|
|
|
innodb_locks_init(
|
|
|
|
/*==============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
void* p) /*!< in/out: table schema object */
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
ST_SCHEMA_TABLE* schema;
|
|
|
|
|
|
|
|
DBUG_ENTER("innodb_locks_init");
|
|
|
|
|
|
|
|
schema = (ST_SCHEMA_TABLE*) p;
|
|
|
|
|
|
|
|
schema->fields_info = innodb_locks_fields_info;
|
|
|
|
schema->fill_table = trx_i_s_common_fill_table;
|
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2008-02-06 16:11:46 +00:00
|
|
|
UNIV_INTERN struct st_mysql_plugin i_s_innodb_locks =
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
/* the plugin type (a MYSQL_XXX_PLUGIN value) */
|
|
|
|
/* int */
|
|
|
|
STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
|
|
|
|
|
|
|
|
/* pointer to type-specific plugin descriptor */
|
|
|
|
/* void* */
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(info, &i_s_info),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* plugin name */
|
|
|
|
/* const char* */
|
2007-11-21 07:38:56 +00:00
|
|
|
STRUCT_FLD(name, "INNODB_LOCKS"),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* plugin author (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(author, plugin_author),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* general descriptive text (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
|
|
|
STRUCT_FLD(descr, "InnoDB conflicting locks"),
|
|
|
|
|
|
|
|
/* 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_locks_init),
|
|
|
|
|
|
|
|
/* the function to invoke when plugin is unloaded */
|
|
|
|
/* int (*)(void*); */
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(deinit, i_s_common_deinit),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* plugin version (for SHOW PLUGINS) */
|
|
|
|
/* unsigned int */
|
2008-05-06 11:10:09 +00:00
|
|
|
STRUCT_FLD(version, INNODB_VERSION_SHORT),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* struct st_mysql_show_var* */
|
|
|
|
STRUCT_FLD(status_vars, NULL),
|
|
|
|
|
|
|
|
/* struct st_mysql_sys_var** */
|
|
|
|
STRUCT_FLD(system_vars, NULL),
|
|
|
|
|
|
|
|
/* reserved for dependency checking */
|
|
|
|
/* void* */
|
|
|
|
STRUCT_FLD(__reserved1, NULL)
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Fields of the dynamic table INFORMATION_SCHEMA.innodb_lock_waits */
|
|
|
|
static ST_FIELD_INFO innodb_lock_waits_fields_info[] =
|
|
|
|
{
|
2007-11-29 13:47:09 +00:00
|
|
|
#define IDX_REQUESTING_TRX_ID 0
|
|
|
|
{STRUCT_FLD(field_name, "requesting_trx_id"),
|
2007-12-20 14:24:57 +00:00
|
|
|
STRUCT_FLD(field_length, TRX_ID_MAX_LEN + 1),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
2007-11-29 13:47:09 +00:00
|
|
|
STRUCT_FLD(value, 0),
|
2007-12-20 14:24:57 +00:00
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-11-29 13:47:09 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
|
|
|
#define IDX_REQUESTED_LOCK_ID 1
|
|
|
|
{STRUCT_FLD(field_name, "requested_lock_id"),
|
2007-12-18 09:44:03 +00:00
|
|
|
STRUCT_FLD(field_length, TRX_I_S_LOCK_ID_MAX_LEN + 1),
|
2007-09-20 11:23:44 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2007-11-29 13:47:09 +00:00
|
|
|
#define IDX_BLOCKING_TRX_ID 2
|
|
|
|
{STRUCT_FLD(field_name, "blocking_trx_id"),
|
2007-12-20 14:24:57 +00:00
|
|
|
STRUCT_FLD(field_length, TRX_ID_MAX_LEN + 1),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
2007-11-29 13:47:09 +00:00
|
|
|
STRUCT_FLD(value, 0),
|
2007-12-20 14:24:57 +00:00
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-11-29 13:47:09 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
|
|
|
#define IDX_BLOCKING_LOCK_ID 3
|
|
|
|
{STRUCT_FLD(field_name, "blocking_lock_id"),
|
2007-12-18 09:44:03 +00:00
|
|
|
STRUCT_FLD(field_length, TRX_I_S_LOCK_ID_MAX_LEN + 1),
|
2007-09-20 11:23:44 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2007-10-03 13:48:17 +00:00
|
|
|
STRUCT_FLD(old_name, ""),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2007-10-03 14:00:54 +00:00
|
|
|
END_OF_ST_FIELD_INFO
|
2007-09-20 11:23:44 +00:00
|
|
|
};
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2007-09-20 11:23:44 +00:00
|
|
|
Read data from cache buffer and fill the
|
2009-05-25 05:30:14 +00:00
|
|
|
INFORMATION_SCHEMA.innodb_lock_waits table with it.
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
|
|
|
fill_innodb_lock_waits_from_cache(
|
|
|
|
/*==============================*/
|
2009-05-25 05:30:14 +00:00
|
|
|
trx_i_s_cache_t* cache, /*!< in: cache to read from */
|
|
|
|
THD* thd, /*!< in: used to call
|
2007-09-20 11:23:44 +00:00
|
|
|
schema_table_store_record() */
|
2009-05-25 05:30:14 +00:00
|
|
|
TABLE* table) /*!< in/out: fill this table */
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
Field** fields;
|
|
|
|
ulint rows_num;
|
2007-12-18 09:44:03 +00:00
|
|
|
char requested_lock_id[TRX_I_S_LOCK_ID_MAX_LEN + 1];
|
|
|
|
char blocking_lock_id[TRX_I_S_LOCK_ID_MAX_LEN + 1];
|
2007-09-20 11:23:44 +00:00
|
|
|
ulint i;
|
|
|
|
|
|
|
|
DBUG_ENTER("fill_innodb_lock_waits_from_cache");
|
|
|
|
|
|
|
|
fields = table->field;
|
|
|
|
|
|
|
|
rows_num = trx_i_s_cache_get_rows_used(cache,
|
|
|
|
I_S_INNODB_LOCK_WAITS);
|
|
|
|
|
|
|
|
for (i = 0; i < rows_num; i++) {
|
|
|
|
|
|
|
|
i_s_lock_waits_row_t* row;
|
|
|
|
|
2007-12-20 14:24:57 +00:00
|
|
|
char requesting_trx_id[TRX_ID_MAX_LEN + 1];
|
|
|
|
char blocking_trx_id[TRX_ID_MAX_LEN + 1];
|
|
|
|
|
2007-09-20 11:23:44 +00:00
|
|
|
row = (i_s_lock_waits_row_t*)
|
|
|
|
trx_i_s_cache_get_nth_row(
|
|
|
|
cache, I_S_INNODB_LOCK_WAITS, i);
|
|
|
|
|
2007-11-29 13:47:09 +00:00
|
|
|
/* requesting_trx_id */
|
2007-12-20 14:24:57 +00:00
|
|
|
ut_snprintf(requesting_trx_id, sizeof(requesting_trx_id),
|
|
|
|
TRX_ID_FMT, row->requested_lock_row->lock_trx_id);
|
|
|
|
OK(field_store_string(fields[IDX_REQUESTING_TRX_ID],
|
|
|
|
requesting_trx_id));
|
2007-11-29 13:47:09 +00:00
|
|
|
|
|
|
|
/* requested_lock_id */
|
2007-09-20 11:23:44 +00:00
|
|
|
OK(field_store_string(
|
2007-11-29 13:47:09 +00:00
|
|
|
fields[IDX_REQUESTED_LOCK_ID],
|
2007-09-20 11:23:44 +00:00
|
|
|
trx_i_s_create_lock_id(
|
2007-11-29 13:47:09 +00:00
|
|
|
row->requested_lock_row,
|
|
|
|
requested_lock_id,
|
|
|
|
sizeof(requested_lock_id))));
|
|
|
|
|
|
|
|
/* blocking_trx_id */
|
2007-12-20 14:24:57 +00:00
|
|
|
ut_snprintf(blocking_trx_id, sizeof(blocking_trx_id),
|
|
|
|
TRX_ID_FMT, row->blocking_lock_row->lock_trx_id);
|
|
|
|
OK(field_store_string(fields[IDX_BLOCKING_TRX_ID],
|
|
|
|
blocking_trx_id));
|
2007-09-20 11:23:44 +00:00
|
|
|
|
2007-11-29 13:47:09 +00:00
|
|
|
/* blocking_lock_id */
|
2007-09-20 11:23:44 +00:00
|
|
|
OK(field_store_string(
|
2007-11-29 13:47:09 +00:00
|
|
|
fields[IDX_BLOCKING_LOCK_ID],
|
2007-09-20 11:23:44 +00:00
|
|
|
trx_i_s_create_lock_id(
|
2007-11-29 13:47:09 +00:00
|
|
|
row->blocking_lock_row,
|
|
|
|
blocking_lock_id,
|
|
|
|
sizeof(blocking_lock_id))));
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
OK(schema_table_store_record(thd, table));
|
|
|
|
}
|
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Bind the dynamic table INFORMATION_SCHEMA.innodb_lock_waits
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
|
|
|
innodb_lock_waits_init(
|
|
|
|
/*===================*/
|
2009-05-25 05:30:14 +00:00
|
|
|
void* p) /*!< in/out: table schema object */
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
ST_SCHEMA_TABLE* schema;
|
|
|
|
|
|
|
|
DBUG_ENTER("innodb_lock_waits_init");
|
|
|
|
|
|
|
|
schema = (ST_SCHEMA_TABLE*) p;
|
|
|
|
|
|
|
|
schema->fields_info = innodb_lock_waits_fields_info;
|
|
|
|
schema->fill_table = trx_i_s_common_fill_table;
|
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2008-02-06 16:11:46 +00:00
|
|
|
UNIV_INTERN struct st_mysql_plugin i_s_innodb_lock_waits =
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
/* the plugin type (a MYSQL_XXX_PLUGIN value) */
|
|
|
|
/* int */
|
|
|
|
STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
|
|
|
|
|
|
|
|
/* pointer to type-specific plugin descriptor */
|
|
|
|
/* void* */
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(info, &i_s_info),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* plugin name */
|
|
|
|
/* const char* */
|
2007-11-21 07:38:56 +00:00
|
|
|
STRUCT_FLD(name, "INNODB_LOCK_WAITS"),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* plugin author (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
|
|
|
STRUCT_FLD(author, "Innobase Oy"),
|
|
|
|
|
|
|
|
/* general descriptive text (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
|
|
|
STRUCT_FLD(descr, "InnoDB which lock is blocking which"),
|
|
|
|
|
|
|
|
/* 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_lock_waits_init),
|
|
|
|
|
|
|
|
/* the function to invoke when plugin is unloaded */
|
|
|
|
/* int (*)(void*); */
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(deinit, i_s_common_deinit),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* plugin version (for SHOW PLUGINS) */
|
|
|
|
/* unsigned int */
|
2008-05-06 11:10:09 +00:00
|
|
|
STRUCT_FLD(version, INNODB_VERSION_SHORT),
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* struct st_mysql_show_var* */
|
|
|
|
STRUCT_FLD(status_vars, NULL),
|
|
|
|
|
|
|
|
/* struct st_mysql_sys_var** */
|
|
|
|
STRUCT_FLD(system_vars, NULL),
|
|
|
|
|
|
|
|
/* reserved for dependency checking */
|
|
|
|
/* void* */
|
|
|
|
STRUCT_FLD(__reserved1, NULL)
|
|
|
|
};
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2007-09-20 11:23:44 +00:00
|
|
|
Common function to fill any of the dynamic tables:
|
|
|
|
INFORMATION_SCHEMA.innodb_trx
|
|
|
|
INFORMATION_SCHEMA.innodb_locks
|
2009-05-25 05:30:14 +00:00
|
|
|
INFORMATION_SCHEMA.innodb_lock_waits
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
|
|
|
trx_i_s_common_fill_table(
|
|
|
|
/*======================*/
|
2009-05-25 05:30:14 +00:00
|
|
|
THD* thd, /*!< in: thread */
|
|
|
|
TABLE_LIST* tables, /*!< in/out: tables to fill */
|
|
|
|
COND* cond) /*!< in: condition (not used) */
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
|
|
|
const char* table_name;
|
|
|
|
int ret;
|
|
|
|
trx_i_s_cache_t* cache;
|
|
|
|
|
|
|
|
DBUG_ENTER("trx_i_s_common_fill_table");
|
|
|
|
|
2007-11-05 14:17:07 +00:00
|
|
|
/* deny access to non-superusers */
|
2008-01-29 09:54:46 +00:00
|
|
|
if (check_global_access(thd, PROCESS_ACL)) {
|
2007-11-05 14:17:07 +00:00
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2007-09-20 11:23:44 +00:00
|
|
|
/* minimize the number of places where global variables are
|
|
|
|
referenced */
|
|
|
|
cache = trx_i_s_cache;
|
|
|
|
|
2007-11-16 13:12:13 +00:00
|
|
|
/* which table we have to fill? */
|
|
|
|
table_name = tables->schema_table_name;
|
|
|
|
/* or table_name = tables->schema_table->table_name; */
|
|
|
|
|
2008-05-06 10:01:41 +00:00
|
|
|
RETURN_IF_INNODB_NOT_STARTED(table_name);
|
|
|
|
|
2007-09-20 11:23:44 +00:00
|
|
|
/* update the cache */
|
|
|
|
trx_i_s_cache_start_write(cache);
|
|
|
|
trx_i_s_possibly_fetch_data_into_cache(cache);
|
|
|
|
trx_i_s_cache_end_write(cache);
|
|
|
|
|
2007-11-16 13:12:13 +00:00
|
|
|
if (trx_i_s_cache_is_truncated(cache)) {
|
|
|
|
|
|
|
|
/* XXX show warning to user if possible */
|
|
|
|
fprintf(stderr, "Warning: data in %s truncated due to "
|
|
|
|
"memory limit of %d bytes\n", table_name,
|
|
|
|
TRX_I_S_MEM_LIMIT);
|
|
|
|
}
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
ret = 0;
|
|
|
|
|
|
|
|
trx_i_s_cache_start_read(cache);
|
|
|
|
|
2008-02-27 16:53:56 +00:00
|
|
|
if (innobase_strcasecmp(table_name, "innodb_trx") == 0) {
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
if (fill_innodb_trx_from_cache(
|
|
|
|
cache, thd, tables->table) != 0) {
|
|
|
|
|
|
|
|
ret = 1;
|
|
|
|
}
|
|
|
|
|
2008-02-27 16:53:56 +00:00
|
|
|
} else if (innobase_strcasecmp(table_name, "innodb_locks") == 0) {
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
if (fill_innodb_locks_from_cache(
|
|
|
|
cache, thd, tables->table) != 0) {
|
|
|
|
|
|
|
|
ret = 1;
|
|
|
|
}
|
|
|
|
|
2008-02-27 16:53:56 +00:00
|
|
|
} else if (innobase_strcasecmp(table_name, "innodb_lock_waits") == 0) {
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
if (fill_innodb_lock_waits_from_cache(
|
|
|
|
cache, thd, tables->table) != 0) {
|
|
|
|
|
|
|
|
ret = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
/* huh! what happened!? */
|
|
|
|
fprintf(stderr,
|
|
|
|
"InnoDB: trx_i_s_common_fill_table() was "
|
|
|
|
"called to fill unknown table: %s.\n"
|
|
|
|
"This function only knows how to fill "
|
|
|
|
"innodb_trx, innodb_locks and "
|
|
|
|
"innodb_lock_waits tables.\n", table_name);
|
|
|
|
|
|
|
|
ret = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
trx_i_s_cache_end_read(cache);
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
DBUG_RETURN(ret);
|
|
|
|
#else
|
|
|
|
/* if this function returns something else than 0 then a
|
|
|
|
deadlock occurs between the mysqld server and mysql client,
|
|
|
|
see http://bugs.mysql.com/29900 ; when that bug is resolved
|
|
|
|
we can enable the DBUG_RETURN(ret) above */
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
/* Fields of the dynamic table information_schema.innodb_cmp. */
|
|
|
|
static ST_FIELD_INFO i_s_cmp_fields_info[] =
|
2007-10-03 14:00:54 +00:00
|
|
|
{
|
2008-03-28 10:31:24 +00:00
|
|
|
{STRUCT_FLD(field_name, "page_size"),
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(field_length, 5),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(old_name, "Compressed Page Size"),
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
{STRUCT_FLD(field_name, "compress_ops"),
|
2008-03-28 10:37:40 +00:00
|
|
|
STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS),
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
|
|
|
STRUCT_FLD(old_name, "Total Number of Compressions"),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
{STRUCT_FLD(field_name, "compress_ops_ok"),
|
2008-03-28 10:37:40 +00:00
|
|
|
STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS),
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
|
|
|
STRUCT_FLD(old_name, "Total Number of"
|
|
|
|
" Successful Compressions"),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
{STRUCT_FLD(field_name, "compress_time"),
|
2008-03-28 10:37:40 +00:00
|
|
|
STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS),
|
branches/zip: Rename the INFORMATION_SCHEMA tables
INNODB_ZIP and INNODB_ZIP_RESET to
INNODB_COMPRESSION and INNODB_COMPRESSION_RESET,
and remove the statistics of the buddy system.
This change was discussed with Ken. It makes the tables shorter
and easier to understand. The removed data will be represented in
the tables INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET
that will be added later.
i_s_innodb_zip, i_s_innodb_zip_reset, i_s_zip_fields_info[],
i_s_zip_fill_low(), i_s_zip_fill(), i_s_zip_reset_fill(),
i_s_zip_init(), i_s_zip_reset_init(): Replace "zip" with "compression".
i_s_compression_fields_info[]: Remove "used", "free",
"relocated", "relocated_usec". In "compressed_usec" and "decompressed_usec",
replace microseconds with seconds ("usec" with "sec").
page_zip_decompress(): Correct a typo in the function comment.
PAGE_ZIP_SSIZE_BITS, PAGE_ZIP_NUM_SSIZE: New constants.
page_zip_stat_t, page_zip_stat: Statistics of the compression, grouped
by page size.
page_zip_simple_validate(): Assert that page_zip->ssize is reasonable.
2008-03-28 09:28:54 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(old_name, "Total Duration of Compressions,"
|
|
|
|
" in Seconds"),
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
{STRUCT_FLD(field_name, "uncompress_ops"),
|
2008-03-28 10:37:40 +00:00
|
|
|
STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS),
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2008-02-27 14:34:44 +00:00
|
|
|
STRUCT_FLD(old_name, "Total Number of Decompressions"),
|
2007-10-03 14:00:54 +00:00
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
{STRUCT_FLD(field_name, "uncompress_time"),
|
2008-03-28 10:37:40 +00:00
|
|
|
STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS),
|
branches/zip: Rename the INFORMATION_SCHEMA tables
INNODB_ZIP and INNODB_ZIP_RESET to
INNODB_COMPRESSION and INNODB_COMPRESSION_RESET,
and remove the statistics of the buddy system.
This change was discussed with Ken. It makes the tables shorter
and easier to understand. The removed data will be represented in
the tables INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET
that will be added later.
i_s_innodb_zip, i_s_innodb_zip_reset, i_s_zip_fields_info[],
i_s_zip_fill_low(), i_s_zip_fill(), i_s_zip_reset_fill(),
i_s_zip_init(), i_s_zip_reset_init(): Replace "zip" with "compression".
i_s_compression_fields_info[]: Remove "used", "free",
"relocated", "relocated_usec". In "compressed_usec" and "decompressed_usec",
replace microseconds with seconds ("usec" with "sec").
page_zip_decompress(): Correct a typo in the function comment.
PAGE_ZIP_SSIZE_BITS, PAGE_ZIP_NUM_SSIZE: New constants.
page_zip_stat_t, page_zip_stat: Statistics of the compression, grouped
by page size.
page_zip_simple_validate(): Assert that page_zip->ssize is reasonable.
2008-03-28 09:28:54 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
|
2008-02-21 13:43:40 +00:00
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(old_name, "Total Duration of Decompressions,"
|
|
|
|
" in Seconds"),
|
2008-02-21 13:43:40 +00:00
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
2007-10-03 14:00:54 +00:00
|
|
|
END_OF_ST_FIELD_INFO
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2008-03-28 10:31:24 +00:00
|
|
|
Fill the dynamic table information_schema.innodb_cmp or
|
2009-05-25 05:30:14 +00:00
|
|
|
innodb_cmp_reset.
|
|
|
|
@return 0 on success, 1 on failure */
|
2007-10-03 14:00:54 +00:00
|
|
|
static
|
|
|
|
int
|
2008-03-28 10:31:24 +00:00
|
|
|
i_s_cmp_fill_low(
|
|
|
|
/*=============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
THD* thd, /*!< in: thread */
|
|
|
|
TABLE_LIST* tables, /*!< in/out: tables to fill */
|
|
|
|
COND* cond, /*!< in: condition (ignored) */
|
|
|
|
ibool reset) /*!< in: TRUE=reset cumulated counts */
|
2007-10-03 14:00:54 +00:00
|
|
|
{
|
|
|
|
TABLE* table = (TABLE *) tables->table;
|
|
|
|
int status = 0;
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
DBUG_ENTER("i_s_cmp_fill_low");
|
2007-10-03 14:00:54 +00:00
|
|
|
|
2007-11-07 08:44:07 +00:00
|
|
|
/* deny access to non-superusers */
|
2008-01-29 09:54:46 +00:00
|
|
|
if (check_global_access(thd, PROCESS_ACL)) {
|
2007-11-07 08:44:07 +00:00
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2008-05-06 10:01:41 +00:00
|
|
|
RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
|
|
|
|
|
branches/zip: Rename the INFORMATION_SCHEMA tables
INNODB_ZIP and INNODB_ZIP_RESET to
INNODB_COMPRESSION and INNODB_COMPRESSION_RESET,
and remove the statistics of the buddy system.
This change was discussed with Ken. It makes the tables shorter
and easier to understand. The removed data will be represented in
the tables INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET
that will be added later.
i_s_innodb_zip, i_s_innodb_zip_reset, i_s_zip_fields_info[],
i_s_zip_fill_low(), i_s_zip_fill(), i_s_zip_reset_fill(),
i_s_zip_init(), i_s_zip_reset_init(): Replace "zip" with "compression".
i_s_compression_fields_info[]: Remove "used", "free",
"relocated", "relocated_usec". In "compressed_usec" and "decompressed_usec",
replace microseconds with seconds ("usec" with "sec").
page_zip_decompress(): Correct a typo in the function comment.
PAGE_ZIP_SSIZE_BITS, PAGE_ZIP_NUM_SSIZE: New constants.
page_zip_stat_t, page_zip_stat: Statistics of the compression, grouped
by page size.
page_zip_simple_validate(): Assert that page_zip->ssize is reasonable.
2008-03-28 09:28:54 +00:00
|
|
|
for (uint i = 0; i < PAGE_ZIP_NUM_SSIZE - 1; i++) {
|
|
|
|
page_zip_stat_t* zip_stat = &page_zip_stat[i];
|
|
|
|
|
|
|
|
table->field[0]->store(PAGE_ZIP_MIN_SIZE << i);
|
|
|
|
|
|
|
|
/* The cumulated counts are not protected by any
|
|
|
|
mutex. Thus, some operation in page0zip.c could
|
|
|
|
increment a counter between the time we read it and
|
|
|
|
clear it. We could introduce mutex protection, but it
|
|
|
|
could cause a measureable performance hit in
|
|
|
|
page0zip.c. */
|
|
|
|
table->field[1]->store(zip_stat->compressed);
|
|
|
|
table->field[2]->store(zip_stat->compressed_ok);
|
|
|
|
table->field[3]->store(
|
|
|
|
(ulong) (zip_stat->compressed_usec / 1000000));
|
|
|
|
table->field[4]->store(zip_stat->decompressed);
|
|
|
|
table->field[5]->store(
|
|
|
|
(ulong) (zip_stat->decompressed_usec / 1000000));
|
2008-02-27 14:34:44 +00:00
|
|
|
|
2007-10-03 14:00:54 +00:00
|
|
|
if (reset) {
|
branches/zip: Rename the INFORMATION_SCHEMA tables
INNODB_ZIP and INNODB_ZIP_RESET to
INNODB_COMPRESSION and INNODB_COMPRESSION_RESET,
and remove the statistics of the buddy system.
This change was discussed with Ken. It makes the tables shorter
and easier to understand. The removed data will be represented in
the tables INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET
that will be added later.
i_s_innodb_zip, i_s_innodb_zip_reset, i_s_zip_fields_info[],
i_s_zip_fill_low(), i_s_zip_fill(), i_s_zip_reset_fill(),
i_s_zip_init(), i_s_zip_reset_init(): Replace "zip" with "compression".
i_s_compression_fields_info[]: Remove "used", "free",
"relocated", "relocated_usec". In "compressed_usec" and "decompressed_usec",
replace microseconds with seconds ("usec" with "sec").
page_zip_decompress(): Correct a typo in the function comment.
PAGE_ZIP_SSIZE_BITS, PAGE_ZIP_NUM_SSIZE: New constants.
page_zip_stat_t, page_zip_stat: Statistics of the compression, grouped
by page size.
page_zip_simple_validate(): Assert that page_zip->ssize is reasonable.
2008-03-28 09:28:54 +00:00
|
|
|
memset(zip_stat, 0, sizeof *zip_stat);
|
2007-10-03 14:00:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (schema_table_store_record(thd, table)) {
|
|
|
|
status = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
DBUG_RETURN(status);
|
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Fill the dynamic table information_schema.innodb_cmp.
|
|
|
|
@return 0 on success, 1 on failure */
|
2007-10-03 14:00:54 +00:00
|
|
|
static
|
|
|
|
int
|
2008-03-28 10:31:24 +00:00
|
|
|
i_s_cmp_fill(
|
|
|
|
/*=========*/
|
2009-05-25 05:30:14 +00:00
|
|
|
THD* thd, /*!< in: thread */
|
|
|
|
TABLE_LIST* tables, /*!< in/out: tables to fill */
|
|
|
|
COND* cond) /*!< in: condition (ignored) */
|
2007-10-03 14:00:54 +00:00
|
|
|
{
|
2008-03-28 10:31:24 +00:00
|
|
|
return(i_s_cmp_fill_low(thd, tables, cond, FALSE));
|
2007-10-03 14:00:54 +00:00
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Fill the dynamic table information_schema.innodb_cmp_reset.
|
|
|
|
@return 0 on success, 1 on failure */
|
2007-10-03 14:00:54 +00:00
|
|
|
static
|
|
|
|
int
|
2008-03-28 10:31:24 +00:00
|
|
|
i_s_cmp_reset_fill(
|
|
|
|
/*===============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
THD* thd, /*!< in: thread */
|
|
|
|
TABLE_LIST* tables, /*!< in/out: tables to fill */
|
|
|
|
COND* cond) /*!< in: condition (ignored) */
|
2007-10-03 14:00:54 +00:00
|
|
|
{
|
2008-03-28 10:31:24 +00:00
|
|
|
return(i_s_cmp_fill_low(thd, tables, cond, TRUE));
|
2007-10-03 14:00:54 +00:00
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Bind the dynamic table information_schema.innodb_cmp.
|
|
|
|
@return 0 on success */
|
2007-10-03 14:00:54 +00:00
|
|
|
static
|
|
|
|
int
|
2008-03-28 10:31:24 +00:00
|
|
|
i_s_cmp_init(
|
|
|
|
/*=========*/
|
2009-05-25 05:30:14 +00:00
|
|
|
void* p) /*!< in/out: table schema object */
|
2007-10-03 14:00:54 +00:00
|
|
|
{
|
2008-03-28 10:31:24 +00:00
|
|
|
DBUG_ENTER("i_s_cmp_init");
|
2007-10-03 14:00:54 +00:00
|
|
|
ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p;
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
schema->fields_info = i_s_cmp_fields_info;
|
|
|
|
schema->fill_table = i_s_cmp_fill;
|
2007-10-03 14:00:54 +00:00
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Bind the dynamic table information_schema.innodb_cmp_reset.
|
|
|
|
@return 0 on success */
|
2007-10-03 14:00:54 +00:00
|
|
|
static
|
|
|
|
int
|
2008-03-28 10:31:24 +00:00
|
|
|
i_s_cmp_reset_init(
|
|
|
|
/*===============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
void* p) /*!< in/out: table schema object */
|
2007-10-03 14:00:54 +00:00
|
|
|
{
|
2008-03-28 10:31:24 +00:00
|
|
|
DBUG_ENTER("i_s_cmp_reset_init");
|
2007-10-03 14:00:54 +00:00
|
|
|
ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p;
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
schema->fields_info = i_s_cmp_fields_info;
|
|
|
|
schema->fill_table = i_s_cmp_reset_fill;
|
2007-10-03 14:00:54 +00:00
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
UNIV_INTERN struct st_mysql_plugin i_s_innodb_cmp =
|
2007-10-03 14:00:54 +00:00
|
|
|
{
|
|
|
|
/* 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* */
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(name, "INNODB_CMP"),
|
2007-10-03 14:00:54 +00:00
|
|
|
|
|
|
|
/* plugin author (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
|
|
|
STRUCT_FLD(author, plugin_author),
|
|
|
|
|
|
|
|
/* general descriptive text (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
2008-03-28 09:59:07 +00:00
|
|
|
STRUCT_FLD(descr, "Statistics for the InnoDB compression"),
|
2007-10-03 14:00:54 +00:00
|
|
|
|
|
|
|
/* the plugin license (PLUGIN_LICENSE_XXX) */
|
|
|
|
/* int */
|
|
|
|
STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
|
|
|
|
|
|
|
|
/* the function to invoke when plugin is loaded */
|
|
|
|
/* int (*)(void*); */
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(init, i_s_cmp_init),
|
2007-10-03 14:00:54 +00:00
|
|
|
|
|
|
|
/* the function to invoke when plugin is unloaded */
|
|
|
|
/* int (*)(void*); */
|
|
|
|
STRUCT_FLD(deinit, i_s_common_deinit),
|
|
|
|
|
|
|
|
/* plugin version (for SHOW PLUGINS) */
|
|
|
|
/* unsigned int */
|
2008-05-06 11:10:09 +00:00
|
|
|
STRUCT_FLD(version, INNODB_VERSION_SHORT),
|
2007-10-03 14:00:54 +00:00
|
|
|
|
|
|
|
/* struct st_mysql_show_var* */
|
|
|
|
STRUCT_FLD(status_vars, NULL),
|
|
|
|
|
|
|
|
/* struct st_mysql_sys_var** */
|
|
|
|
STRUCT_FLD(system_vars, NULL),
|
|
|
|
|
|
|
|
/* reserved for dependency checking */
|
|
|
|
/* void* */
|
|
|
|
STRUCT_FLD(__reserved1, NULL)
|
|
|
|
};
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
UNIV_INTERN struct st_mysql_plugin i_s_innodb_cmp_reset =
|
2007-10-03 14:00:54 +00:00
|
|
|
{
|
|
|
|
/* 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* */
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(name, "INNODB_CMP_RESET"),
|
2007-10-03 14:00:54 +00:00
|
|
|
|
|
|
|
/* plugin author (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
|
|
|
STRUCT_FLD(author, plugin_author),
|
|
|
|
|
|
|
|
/* general descriptive text (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
2008-03-28 09:59:07 +00:00
|
|
|
STRUCT_FLD(descr, "Statistics for the InnoDB compression;"
|
2007-10-03 14:00:54 +00:00
|
|
|
" reset cumulated counts"),
|
|
|
|
|
|
|
|
/* the plugin license (PLUGIN_LICENSE_XXX) */
|
|
|
|
/* int */
|
|
|
|
STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
|
|
|
|
|
|
|
|
/* the function to invoke when plugin is loaded */
|
|
|
|
/* int (*)(void*); */
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(init, i_s_cmp_reset_init),
|
2007-10-03 14:00:54 +00:00
|
|
|
|
|
|
|
/* the function to invoke when plugin is unloaded */
|
|
|
|
/* int (*)(void*); */
|
|
|
|
STRUCT_FLD(deinit, i_s_common_deinit),
|
|
|
|
|
|
|
|
/* plugin version (for SHOW PLUGINS) */
|
|
|
|
/* unsigned int */
|
2008-05-06 11:10:09 +00:00
|
|
|
STRUCT_FLD(version, INNODB_VERSION_SHORT),
|
2007-10-03 14:00:54 +00:00
|
|
|
|
|
|
|
/* struct st_mysql_show_var* */
|
|
|
|
STRUCT_FLD(status_vars, NULL),
|
|
|
|
|
|
|
|
/* struct st_mysql_sys_var** */
|
|
|
|
STRUCT_FLD(system_vars, NULL),
|
|
|
|
|
|
|
|
/* reserved for dependency checking */
|
|
|
|
/* void* */
|
|
|
|
STRUCT_FLD(__reserved1, NULL)
|
|
|
|
};
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
/* Fields of the dynamic table information_schema.innodb_cmpmem. */
|
|
|
|
static ST_FIELD_INFO i_s_cmpmem_fields_info[] =
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
{
|
2008-03-28 10:31:24 +00:00
|
|
|
{STRUCT_FLD(field_name, "page_size"),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
STRUCT_FLD(field_length, 5),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(old_name, "Buddy Block Size"),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
{STRUCT_FLD(field_name, "pages_used"),
|
2008-03-28 10:37:40 +00:00
|
|
|
STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
|
|
|
STRUCT_FLD(old_name, "Currently in Use"),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
{STRUCT_FLD(field_name, "pages_free"),
|
2008-03-28 10:37:40 +00:00
|
|
|
STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
|
|
|
STRUCT_FLD(old_name, "Currently Available"),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
{STRUCT_FLD(field_name, "relocation_ops"),
|
2008-03-28 10:37:40 +00:00
|
|
|
STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
|
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
|
|
|
STRUCT_FLD(old_name, "Total Number of Relocations"),
|
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
{STRUCT_FLD(field_name, "relocation_time"),
|
2008-03-28 10:37:40 +00:00
|
|
|
STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
|
|
|
|
STRUCT_FLD(value, 0),
|
|
|
|
STRUCT_FLD(field_flags, 0),
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(old_name, "Total Duration of Relocations,"
|
|
|
|
" in Seconds"),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
|
|
|
|
|
|
|
|
END_OF_ST_FIELD_INFO
|
|
|
|
};
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2008-03-28 10:31:24 +00:00
|
|
|
Fill the dynamic table information_schema.innodb_cmpmem or
|
2009-05-25 05:30:14 +00:00
|
|
|
innodb_cmpmem_reset.
|
|
|
|
@return 0 on success, 1 on failure */
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
static
|
|
|
|
int
|
2008-03-28 10:31:24 +00:00
|
|
|
i_s_cmpmem_fill_low(
|
|
|
|
/*================*/
|
2009-05-25 05:30:14 +00:00
|
|
|
THD* thd, /*!< in: thread */
|
|
|
|
TABLE_LIST* tables, /*!< in/out: tables to fill */
|
|
|
|
COND* cond, /*!< in: condition (ignored) */
|
|
|
|
ibool reset) /*!< in: TRUE=reset cumulated counts */
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
{
|
|
|
|
TABLE* table = (TABLE *) tables->table;
|
|
|
|
int status = 0;
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
DBUG_ENTER("i_s_cmpmem_fill_low");
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
|
|
|
|
/* deny access to non-superusers */
|
|
|
|
if (check_global_access(thd, PROCESS_ACL)) {
|
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2008-05-06 10:01:41 +00:00
|
|
|
RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
|
|
|
|
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
buf_pool_mutex_enter();
|
|
|
|
|
|
|
|
for (uint x = 0; x <= BUF_BUDDY_SIZES; x++) {
|
|
|
|
buf_buddy_stat_t* buddy_stat = &buf_buddy_stat[x];
|
|
|
|
|
|
|
|
table->field[0]->store(BUF_BUDDY_LOW << x);
|
|
|
|
table->field[1]->store(buddy_stat->used);
|
|
|
|
table->field[2]->store(UNIV_LIKELY(x < BUF_BUDDY_SIZES)
|
|
|
|
? UT_LIST_GET_LEN(buf_pool->zip_free[x])
|
|
|
|
: 0);
|
|
|
|
table->field[3]->store((longlong) buddy_stat->relocated, true);
|
|
|
|
table->field[4]->store(
|
|
|
|
(ulong) (buddy_stat->relocated_usec / 1000000));
|
|
|
|
|
|
|
|
if (reset) {
|
2008-03-28 10:51:11 +00:00
|
|
|
/* This is protected by buf_pool_mutex. */
|
|
|
|
buddy_stat->relocated = 0;
|
|
|
|
buddy_stat->relocated_usec = 0;
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (schema_table_store_record(thd, table)) {
|
|
|
|
status = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
buf_pool_mutex_exit();
|
|
|
|
DBUG_RETURN(status);
|
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Fill the dynamic table information_schema.innodb_cmpmem.
|
|
|
|
@return 0 on success, 1 on failure */
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
static
|
|
|
|
int
|
2008-03-28 10:31:24 +00:00
|
|
|
i_s_cmpmem_fill(
|
|
|
|
/*============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
THD* thd, /*!< in: thread */
|
|
|
|
TABLE_LIST* tables, /*!< in/out: tables to fill */
|
|
|
|
COND* cond) /*!< in: condition (ignored) */
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
{
|
2008-03-28 10:31:24 +00:00
|
|
|
return(i_s_cmpmem_fill_low(thd, tables, cond, FALSE));
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Fill the dynamic table information_schema.innodb_cmpmem_reset.
|
|
|
|
@return 0 on success, 1 on failure */
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
static
|
|
|
|
int
|
2008-03-28 10:31:24 +00:00
|
|
|
i_s_cmpmem_reset_fill(
|
|
|
|
/*==================*/
|
2009-05-25 05:30:14 +00:00
|
|
|
THD* thd, /*!< in: thread */
|
|
|
|
TABLE_LIST* tables, /*!< in/out: tables to fill */
|
|
|
|
COND* cond) /*!< in: condition (ignored) */
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
{
|
2008-03-28 10:31:24 +00:00
|
|
|
return(i_s_cmpmem_fill_low(thd, tables, cond, TRUE));
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Bind the dynamic table information_schema.innodb_cmpmem.
|
|
|
|
@return 0 on success */
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
static
|
|
|
|
int
|
2008-03-28 10:31:24 +00:00
|
|
|
i_s_cmpmem_init(
|
|
|
|
/*============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
void* p) /*!< in/out: table schema object */
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
{
|
2008-03-28 10:31:24 +00:00
|
|
|
DBUG_ENTER("i_s_cmpmem_init");
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p;
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
schema->fields_info = i_s_cmpmem_fields_info;
|
|
|
|
schema->fill_table = i_s_cmpmem_fill;
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Bind the dynamic table information_schema.innodb_cmpmem_reset.
|
|
|
|
@return 0 on success */
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
static
|
|
|
|
int
|
2008-03-28 10:31:24 +00:00
|
|
|
i_s_cmpmem_reset_init(
|
|
|
|
/*==================*/
|
2009-05-25 05:30:14 +00:00
|
|
|
void* p) /*!< in/out: table schema object */
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
{
|
2008-03-28 10:31:24 +00:00
|
|
|
DBUG_ENTER("i_s_cmpmem_reset_init");
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p;
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
schema->fields_info = i_s_cmpmem_fields_info;
|
|
|
|
schema->fill_table = i_s_cmpmem_reset_fill;
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
UNIV_INTERN struct st_mysql_plugin i_s_innodb_cmpmem =
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
{
|
|
|
|
/* 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* */
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(name, "INNODB_CMPMEM"),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
|
|
|
|
/* plugin author (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
|
|
|
STRUCT_FLD(author, plugin_author),
|
|
|
|
|
|
|
|
/* general descriptive text (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
|
|
|
STRUCT_FLD(descr, "Statistics for the InnoDB compressed buffer pool"),
|
|
|
|
|
|
|
|
/* the plugin license (PLUGIN_LICENSE_XXX) */
|
|
|
|
/* int */
|
|
|
|
STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
|
|
|
|
|
|
|
|
/* the function to invoke when plugin is loaded */
|
|
|
|
/* int (*)(void*); */
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(init, i_s_cmpmem_init),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
|
|
|
|
/* the function to invoke when plugin is unloaded */
|
|
|
|
/* int (*)(void*); */
|
|
|
|
STRUCT_FLD(deinit, i_s_common_deinit),
|
|
|
|
|
|
|
|
/* plugin version (for SHOW PLUGINS) */
|
|
|
|
/* unsigned int */
|
2008-05-06 11:10:09 +00:00
|
|
|
STRUCT_FLD(version, INNODB_VERSION_SHORT),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
|
|
|
|
/* struct st_mysql_show_var* */
|
|
|
|
STRUCT_FLD(status_vars, NULL),
|
|
|
|
|
|
|
|
/* struct st_mysql_sys_var** */
|
|
|
|
STRUCT_FLD(system_vars, NULL),
|
|
|
|
|
|
|
|
/* reserved for dependency checking */
|
|
|
|
/* void* */
|
|
|
|
STRUCT_FLD(__reserved1, NULL)
|
|
|
|
};
|
|
|
|
|
2008-03-28 10:31:24 +00:00
|
|
|
UNIV_INTERN struct st_mysql_plugin i_s_innodb_cmpmem_reset =
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
{
|
|
|
|
/* 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* */
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(name, "INNODB_CMPMEM_RESET"),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
|
|
|
|
/* plugin author (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
|
|
|
STRUCT_FLD(author, plugin_author),
|
|
|
|
|
|
|
|
/* general descriptive text (for SHOW PLUGINS) */
|
|
|
|
/* const char* */
|
|
|
|
STRUCT_FLD(descr, "Statistics for the InnoDB compressed buffer pool;"
|
|
|
|
" reset cumulated counts"),
|
|
|
|
|
|
|
|
/* the plugin license (PLUGIN_LICENSE_XXX) */
|
|
|
|
/* int */
|
|
|
|
STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
|
|
|
|
|
|
|
|
/* the function to invoke when plugin is loaded */
|
|
|
|
/* int (*)(void*); */
|
2008-03-28 10:31:24 +00:00
|
|
|
STRUCT_FLD(init, i_s_cmpmem_reset_init),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
|
|
|
|
/* the function to invoke when plugin is unloaded */
|
|
|
|
/* int (*)(void*); */
|
|
|
|
STRUCT_FLD(deinit, i_s_common_deinit),
|
|
|
|
|
|
|
|
/* plugin version (for SHOW PLUGINS) */
|
|
|
|
/* unsigned int */
|
2008-05-06 11:10:09 +00:00
|
|
|
STRUCT_FLD(version, INNODB_VERSION_SHORT),
|
branches/zip: Implement the INFORMATION_SCHEMA tables
INNODB_COMPRESSION_BUDDY and INNODB_COMPRESSION_BUDDY_RESET.
buf_buddy_stat_struct, buf_buddy_stat_t, buf_buddy_stat[]:
Statistics of the buddy system grouped by block size.
i_s_innodb_compression_buddy, i_s_innodb_compression_buddy_reset:
New INFORMATION_SCHEMA plugins.
i_s_compression_buddy_fields_info[]: Define the fields:
size, used, free, relocated, relocated_sec.
i_s_compression_buddy_fill_low(), i_s_compression_buddy_fill(),
i_s_compression_buddy_reset_fill(): Fill the fields.
i_s_compression_buddy_init(), i_s_compression_buddy_reset_init():
Initialize the tables.
2008-03-28 10:03:58 +00:00
|
|
|
|
|
|
|
/* struct st_mysql_show_var* */
|
|
|
|
STRUCT_FLD(status_vars, NULL),
|
|
|
|
|
|
|
|
/* struct st_mysql_sys_var** */
|
|
|
|
STRUCT_FLD(system_vars, NULL),
|
|
|
|
|
|
|
|
/* reserved for dependency checking */
|
|
|
|
/* void* */
|
|
|
|
STRUCT_FLD(__reserved1, NULL)
|
|
|
|
};
|
|
|
|
|
2009-05-25 09:52:29 +00:00
|
|
|
/*******************************************************************//**
|
2009-05-25 05:30:14 +00:00
|
|
|
Unbind a dynamic INFORMATION_SCHEMA table.
|
|
|
|
@return 0 on success */
|
2007-09-20 11:23:44 +00:00
|
|
|
static
|
|
|
|
int
|
2007-10-03 14:00:54 +00:00
|
|
|
i_s_common_deinit(
|
|
|
|
/*==============*/
|
2009-05-25 05:30:14 +00:00
|
|
|
void* p) /*!< in/out: table schema object */
|
2007-09-20 11:23:44 +00:00
|
|
|
{
|
2007-10-03 14:00:54 +00:00
|
|
|
DBUG_ENTER("i_s_common_deinit");
|
2007-09-20 11:23:44 +00:00
|
|
|
|
|
|
|
/* Do nothing */
|
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|