mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
New status variables: Rows_tmp_read, Handler_tmp_update and Handler_tmp_write
Split status variable Rows_read to Rows_read and Rows_tmp_read so that one can see how much real data is read. Same was done with with Handler_update and Handler_write. Fixed bug in MEMORY tables where some variables was counted twice. Added new internal handler call 'ha_close()' to have one place to gather statistics. Fixed bug where thd->open_options was set to wrong value when doing admin_recreate_table() mysql-test/r/status.result: Updated test results and added new tests mysql-test/r/status_user.result: Udated test results mysql-test/t/status.test: Added new test for temporary table status variables sql/ha_partition.cc: Changed to call ha_close() instead of close() sql/handler.cc: Added internal_tmp_table variable for easy checking of temporary tables. Added new internal handler call 'ha_close()' to have one place to gather statistics. Gather statistics for internal temporary tables. sql/handler.h: Added handler variables internal_tmp_table, rows_tmp_read. Split function update_index_statistics() to two. Added ha_update_tmp_row() for faster tmp table handling with more statistics. sql/item_sum.cc: ha_write_row() -> ha_write_tmp_row() sql/multi_range_read.cc: close() -> ha_close() sql/mysqld.cc: New status variables: Rows_tmp_read, Handler_tmp_update and Handler_tmp_write sql/opt_range.cc: close() -> ha_close() sql/sql_base.cc: close() -> ha_close() sql/sql_class.cc: Added handling of rows_tmp_read sql/sql_class.h: Added new satistics variables. rows_read++ -> update_rows_read() to be able to correctly count reads to internal temp tables. Added handler::ha_update_tmp_row() sql/sql_connect.cc: Added comment sql/sql_expression_cache.cc: ha_write_row() -> ha_write_tmp_row() sql/sql_select.cc: close() -> ha_close() ha_update_row() -> ha_update_tmp_row() sql/sql_show.cc: ha_write_row() -> ha_write_tmp_row() sql/sql_table.cc: Fixed bug where thd->open_options was set to wrong value when doing admin_recreate_table() sql/sql_union.cc: ha_write_row() -> ha_write_tmp_row() sql/sql_update.cc: ha_write_row() -> ha_write_tmp_row() sql/table.cc: close() -> ha_close() storage/heap/ha_heap.cc: Removed double counting of statistic variables. close -> ha_close() to get tmp table statistics. storage/maria/ha_maria.cc: close -> ha_close() to get tmp table statistics.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||
Copyright 2009-2011 Monty Program Ab
|
||||
|
||||
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
|
||||
@@ -1599,6 +1600,7 @@ public:
|
||||
KEY_PART_INFO *range_key_part;
|
||||
int key_compare_result_on_equal;
|
||||
bool eq_range;
|
||||
bool internal_tmp_table; /* If internal tmp table */
|
||||
|
||||
/*
|
||||
TRUE <=> the engine guarantees that returned records are within the range
|
||||
@@ -1643,6 +1645,7 @@ public:
|
||||
*/
|
||||
/* Statistics variables */
|
||||
ulonglong rows_read;
|
||||
ulonglong rows_tmp_read;
|
||||
ulonglong rows_changed;
|
||||
/* One bigger than needed to avoid to test if key == MAX_KEY */
|
||||
ulonglong index_rows_read[MAX_KEY+1];
|
||||
@@ -1685,7 +1688,7 @@ public:
|
||||
}
|
||||
/* ha_ methods: pubilc wrappers for private virtual API */
|
||||
|
||||
int ha_open(TABLE *table, const char *name, int mode, int test_if_locked);
|
||||
int ha_open(TABLE *table, const char *name, int mode, uint test_if_locked);
|
||||
int ha_index_init(uint idx, bool sorted)
|
||||
{
|
||||
int result;
|
||||
@@ -1809,7 +1812,7 @@ public:
|
||||
uint get_dup_key(int error);
|
||||
void reset_statistics()
|
||||
{
|
||||
rows_read= rows_changed= 0;
|
||||
rows_read= rows_changed= rows_tmp_read= 0;
|
||||
bzero(index_rows_read, sizeof(index_rows_read));
|
||||
}
|
||||
virtual void change_table_ptr(TABLE *table_arg, TABLE_SHARE *share)
|
||||
@@ -1894,7 +1897,7 @@ public:
|
||||
*/
|
||||
uint get_index(void) const
|
||||
{ return inited == INDEX ? active_index : MAX_KEY; }
|
||||
virtual int close(void)=0;
|
||||
int ha_close(void);
|
||||
|
||||
/**
|
||||
@retval 0 Bulk update used by handler
|
||||
@@ -1970,10 +1973,18 @@ protected:
|
||||
virtual int index_last(uchar * buf)
|
||||
{ return HA_ERR_WRONG_COMMAND; }
|
||||
virtual int index_next_same(uchar *buf, const uchar *key, uint keylen);
|
||||
virtual int close(void)=0;
|
||||
inline void update_rows_read()
|
||||
{
|
||||
if (likely(!internal_tmp_table))
|
||||
rows_read++;
|
||||
else
|
||||
rows_tmp_read++;
|
||||
}
|
||||
inline void update_index_statistics()
|
||||
{
|
||||
index_rows_read[active_index]++;
|
||||
rows_read++;
|
||||
update_rows_read();
|
||||
}
|
||||
public:
|
||||
|
||||
@@ -2604,6 +2615,7 @@ public:
|
||||
virtual handlerton *partition_ht() const
|
||||
{ return ht; }
|
||||
inline int ha_write_tmp_row(uchar *buf);
|
||||
inline int ha_update_tmp_row(const uchar * old_data, uchar * new_data);
|
||||
};
|
||||
|
||||
#include "multi_range_read.h"
|
||||
|
||||
Reference in New Issue
Block a user