Commit 0b6a7dac authored by marko's avatar marko

branches/zip: Add duration statistics to INFORMATION_SCHEMA.INNODB_ZIP.

buf_buddy_relocated_duration[],
page_zip_compress_duration[]
page_zip_decompress_duration[]: Record the total duration of the operations.

buf_buddy_relocate(), page_zip_compress(), page_zip_decompress():
Add ut_time_us() instrumentation.

i_s_zip_fields_info[], i_s_zip_fill_low(): Move the columns containing
cumulated statistics last.  Add relocated_usec, compressed_usec, and
decompressed_usec.
parent 58fd174a
...@@ -28,6 +28,9 @@ UNIV_INTERN ulint buf_buddy_used[BUF_BUDDY_SIZES + 1]; ...@@ -28,6 +28,9 @@ UNIV_INTERN ulint buf_buddy_used[BUF_BUDDY_SIZES + 1];
/** Counts of blocks relocated by the buddy system. /** Counts of blocks relocated by the buddy system.
Protected by buf_pool_mutex. */ Protected by buf_pool_mutex. */
UNIV_INTERN ib_uint64_t buf_buddy_relocated[BUF_BUDDY_SIZES + 1]; UNIV_INTERN ib_uint64_t buf_buddy_relocated[BUF_BUDDY_SIZES + 1];
/** Durations of block relocations.
Protected by buf_pool_mutex. */
UNIV_INTERN ullint buf_buddy_relocated_duration[BUF_BUDDY_SIZES + 1];
/** Preferred minimum number of frames allocated from the buffer pool /** Preferred minimum number of frames allocated from the buffer pool
to the buddy system. Unless this number is exceeded or the buffer to the buddy system. Unless this number is exceeded or the buffer
...@@ -531,6 +534,7 @@ buf_buddy_relocate( ...@@ -531,6 +534,7 @@ buf_buddy_relocate(
{ {
buf_page_t* bpage; buf_page_t* bpage;
const ulint size = BUF_BUDDY_LOW << i; const ulint size = BUF_BUDDY_LOW << i;
ullint usec = ut_time_us(NULL);
ut_ad(buf_pool_mutex_own()); ut_ad(buf_pool_mutex_own());
ut_ad(!mutex_own(&buf_pool_zip_mutex)); ut_ad(!mutex_own(&buf_pool_zip_mutex));
...@@ -603,6 +607,8 @@ buf_buddy_relocate( ...@@ -603,6 +607,8 @@ buf_buddy_relocate(
success: success:
UNIV_MEM_INVALID(src, size); UNIV_MEM_INVALID(src, size);
buf_buddy_relocated[i]++; buf_buddy_relocated[i]++;
buf_buddy_relocated_duration[i]
+= ut_time_us(NULL) - usec;
return(TRUE); return(TRUE);
} }
......
...@@ -992,6 +992,22 @@ static ST_FIELD_INFO i_s_zip_fields_info[] = ...@@ -992,6 +992,22 @@ static ST_FIELD_INFO i_s_zip_fields_info[] =
STRUCT_FLD(old_name, "Block Size"), STRUCT_FLD(old_name, "Block Size"),
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
{STRUCT_FLD(field_name, "used"),
STRUCT_FLD(field_length, 21),
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)},
{STRUCT_FLD(field_name, "free"),
STRUCT_FLD(field_length, 21),
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)},
{STRUCT_FLD(field_name, "relocated"), {STRUCT_FLD(field_name, "relocated"),
STRUCT_FLD(field_length, 21), STRUCT_FLD(field_length, 21),
STRUCT_FLD(field_type, MYSQL_TYPE_LONG), STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
...@@ -1000,6 +1016,14 @@ static ST_FIELD_INFO i_s_zip_fields_info[] = ...@@ -1000,6 +1016,14 @@ static ST_FIELD_INFO i_s_zip_fields_info[] =
STRUCT_FLD(old_name, "Total Number of Relocations"), STRUCT_FLD(old_name, "Total Number of Relocations"),
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
{STRUCT_FLD(field_name, "relocated_usec"),
STRUCT_FLD(field_length, 42),
STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
STRUCT_FLD(value, 0),
STRUCT_FLD(field_flags, 0),
STRUCT_FLD(old_name, "Total Duration of Relocations"),
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
{STRUCT_FLD(field_name, "compressed"), {STRUCT_FLD(field_name, "compressed"),
STRUCT_FLD(field_length, 21), STRUCT_FLD(field_length, 21),
STRUCT_FLD(field_type, MYSQL_TYPE_LONG), STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
...@@ -1017,28 +1041,28 @@ static ST_FIELD_INFO i_s_zip_fields_info[] = ...@@ -1017,28 +1041,28 @@ static ST_FIELD_INFO i_s_zip_fields_info[] =
" Successful Compressions"), " Successful Compressions"),
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
{STRUCT_FLD(field_name, "decompressed"), {STRUCT_FLD(field_name, "compressed_usec"),
STRUCT_FLD(field_length, 21), STRUCT_FLD(field_length, 42),
STRUCT_FLD(field_type, MYSQL_TYPE_LONG), STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
STRUCT_FLD(value, 0), STRUCT_FLD(value, 0),
STRUCT_FLD(field_flags, 0), STRUCT_FLD(field_flags, 0),
STRUCT_FLD(old_name, "Total Number of Decompressions"), STRUCT_FLD(old_name, "Total Duration of Compressions"),
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
{STRUCT_FLD(field_name, "used"), {STRUCT_FLD(field_name, "decompressed"),
STRUCT_FLD(field_length, 21), STRUCT_FLD(field_length, 21),
STRUCT_FLD(field_type, MYSQL_TYPE_LONG), STRUCT_FLD(field_type, MYSQL_TYPE_LONG),
STRUCT_FLD(value, 0), STRUCT_FLD(value, 0),
STRUCT_FLD(field_flags, 0), STRUCT_FLD(field_flags, 0),
STRUCT_FLD(old_name, "Currently in Use"), STRUCT_FLD(old_name, "Total Number of Decompressions"),
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
{STRUCT_FLD(field_name, "free"), {STRUCT_FLD(field_name, "decompressed_usec"),
STRUCT_FLD(field_length, 21), STRUCT_FLD(field_length, 42),
STRUCT_FLD(field_type, MYSQL_TYPE_LONG), STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
STRUCT_FLD(value, 0), STRUCT_FLD(value, 0),
STRUCT_FLD(field_flags, 0), STRUCT_FLD(field_flags, 0),
STRUCT_FLD(old_name, "Currently Available"), STRUCT_FLD(old_name, "Total Duration of Decompressions"),
STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
END_OF_ST_FIELD_INFO END_OF_ST_FIELD_INFO
...@@ -1076,10 +1100,17 @@ i_s_zip_fill_low( ...@@ -1076,10 +1100,17 @@ i_s_zip_fill_low(
for (uint x = 0; x <= BUF_BUDDY_SIZES; x++) { for (uint x = 0; x <= BUF_BUDDY_SIZES; x++) {
table->field[0]->store(BUF_BUDDY_LOW << x); table->field[0]->store(BUF_BUDDY_LOW << x);
table->field[1]->store(buf_buddy_relocated[x]); table->field[1]->store(buf_buddy_used[x]);
table->field[2]->store(UNIV_LIKELY(x < BUF_BUDDY_SIZES)
? UT_LIST_GET_LEN(buf_pool->zip_free[x])
: 0);
table->field[3]->store(buf_buddy_relocated[x]);
table->field[4]->store(buf_buddy_relocated_duration[x]);
if (reset) { if (reset) {
/* This is protected by buf_pool_mutex. */ /* This is protected by buf_pool_mutex. */
buf_buddy_relocated[x] = 0; buf_buddy_relocated[x] = 0;
buf_buddy_relocated_duration[x] = 0;
} }
if (x > y) { if (x > y) {
...@@ -1090,23 +1121,25 @@ i_s_zip_fill_low( ...@@ -1090,23 +1121,25 @@ i_s_zip_fill_low(
mutex protection, but it could cause a mutex protection, but it could cause a
measureable performance hit in page0zip.c. */ measureable performance hit in page0zip.c. */
const uint i = x - y; const uint i = x - y;
table->field[2]->store(page_zip_compress_count[i]); table->field[5]->store(page_zip_compress_count[i]);
table->field[3]->store(page_zip_compress_ok[i]); table->field[6]->store(page_zip_compress_ok[i]);
table->field[4]->store(page_zip_decompress_count[i]); table->field[7]->store(page_zip_compress_duration[i]);
table->field[8]->store(page_zip_decompress_count[i]);
table->field[9]->store(page_zip_decompress_duration[i]);
if (reset) { if (reset) {
page_zip_compress_count[i] = 0; page_zip_compress_count[i] = 0;
page_zip_compress_ok[i] = 0; page_zip_compress_ok[i] = 0;
page_zip_decompress_count[i] = 0; page_zip_decompress_count[i] = 0;
page_zip_compress_duration[i] = 0;
page_zip_decompress_duration[i] = 0;
} }
} else { } else {
table->field[2]->store(0); table->field[5]->store(0);
table->field[3]->store(0); table->field[6]->store(0);
table->field[4]->store(0); table->field[7]->store(0);
table->field[8]->store(0);
table->field[9]->store(0);
} }
table->field[5]->store(buf_buddy_used[x]);
table->field[6]->store(UNIV_LIKELY(x < BUF_BUDDY_SIZES)
? UT_LIST_GET_LEN(buf_pool->zip_free[x])
: 0);
if (schema_table_store_record(thd, table)) { if (schema_table_store_record(thd, table)) {
status = 1; status = 1;
......
...@@ -69,6 +69,9 @@ extern ulint buf_buddy_used[BUF_BUDDY_SIZES + 1]; ...@@ -69,6 +69,9 @@ extern ulint buf_buddy_used[BUF_BUDDY_SIZES + 1];
/** Counts of blocks relocated by the buddy system. /** Counts of blocks relocated by the buddy system.
Protected by buf_pool_mutex. */ Protected by buf_pool_mutex. */
extern ib_uint64_t buf_buddy_relocated[BUF_BUDDY_SIZES + 1]; extern ib_uint64_t buf_buddy_relocated[BUF_BUDDY_SIZES + 1];
/** Durations of block relocations.
Protected by buf_pool_mutex. */
extern ullint buf_buddy_relocated_duration[BUF_BUDDY_SIZES + 1];
#ifndef UNIV_NONINL #ifndef UNIV_NONINL
# include "buf0buddy.ic" # include "buf0buddy.ic"
......
...@@ -54,6 +54,10 @@ extern ulint page_zip_compress_count[8]; ...@@ -54,6 +54,10 @@ extern ulint page_zip_compress_count[8];
extern ulint page_zip_compress_ok[8]; extern ulint page_zip_compress_ok[8];
/** Number of page decompressions, indexed by page_zip_des_t::ssize */ /** Number of page decompressions, indexed by page_zip_des_t::ssize */
extern ulint page_zip_decompress_count[8]; extern ulint page_zip_decompress_count[8];
/** Duration of page compressions, indexed by page_zip_des_t::ssize */
extern ullint page_zip_compress_duration[8];
/** Duration of page decompressions, indexed by page_zip_des_t::ssize */
extern ullint page_zip_decompress_duration[8];
/************************************************************************** /**************************************************************************
Write data to the compressed page. The data must already be written to Write data to the compressed page. The data must already be written to
......
...@@ -30,6 +30,10 @@ UNIV_INTERN ulint page_zip_compress_count[8]; ...@@ -30,6 +30,10 @@ UNIV_INTERN ulint page_zip_compress_count[8];
UNIV_INTERN ulint page_zip_compress_ok[8]; UNIV_INTERN ulint page_zip_compress_ok[8];
/** Number of page decompressions, indexed by page_zip_des_t::ssize */ /** Number of page decompressions, indexed by page_zip_des_t::ssize */
UNIV_INTERN ulint page_zip_decompress_count[8]; UNIV_INTERN ulint page_zip_decompress_count[8];
/** Duration of page compressions, indexed by page_zip_des_t::ssize */
UNIV_INTERN ullint page_zip_compress_duration[8];
/** Duration of page decompressions, indexed by page_zip_des_t::ssize */
UNIV_INTERN ullint page_zip_decompress_duration[8];
/* Please refer to ../include/page0zip.ic for a description of the /* Please refer to ../include/page0zip.ic for a description of the
compressed page format. */ compressed page format. */
...@@ -1104,6 +1108,7 @@ page_zip_compress( ...@@ -1104,6 +1108,7 @@ page_zip_compress(
ulint* offsets = NULL; ulint* offsets = NULL;
ulint n_blobs = 0; ulint n_blobs = 0;
byte* storage;/* storage of uncompressed columns */ byte* storage;/* storage of uncompressed columns */
ullint usec = ut_time_us(NULL);
#ifdef PAGE_ZIP_COMPRESS_DBG #ifdef PAGE_ZIP_COMPRESS_DBG
FILE* logfile = NULL; FILE* logfile = NULL;
#endif #endif
...@@ -1169,12 +1174,8 @@ page_zip_compress( ...@@ -1169,12 +1174,8 @@ page_zip_compress(
if (UNIV_UNLIKELY(n_dense * PAGE_ZIP_DIR_SLOT_SIZE if (UNIV_UNLIKELY(n_dense * PAGE_ZIP_DIR_SLOT_SIZE
>= page_zip_get_size(page_zip))) { >= page_zip_get_size(page_zip))) {
#ifdef PAGE_ZIP_COMPRESS_DBG
if (logfile) { goto err_exit;
fclose(logfile);
}
#endif /* PAGE_ZIP_COMPRESS_DBG */
return(FALSE);
} }
heap = mem_heap_create(page_zip_get_size(page_zip) heap = mem_heap_create(page_zip_get_size(page_zip)
...@@ -1300,11 +1301,14 @@ page_zip_compress( ...@@ -1300,11 +1301,14 @@ page_zip_compress(
zlib_error: zlib_error:
deflateEnd(&c_stream); deflateEnd(&c_stream);
mem_heap_free(heap); mem_heap_free(heap);
err_exit:
#ifdef PAGE_ZIP_COMPRESS_DBG #ifdef PAGE_ZIP_COMPRESS_DBG
if (logfile) { if (logfile) {
fclose(logfile); fclose(logfile);
} }
#endif /* PAGE_ZIP_COMPRESS_DBG */ #endif /* PAGE_ZIP_COMPRESS_DBG */
page_zip_compress_duration[page_zip->ssize]
+= ut_time_us(NULL) - usec;
return(FALSE); return(FALSE);
} }
...@@ -1362,6 +1366,8 @@ zlib_error: ...@@ -1362,6 +1366,8 @@ zlib_error:
fclose(logfile); fclose(logfile);
} }
#endif /* PAGE_ZIP_COMPRESS_DBG */ #endif /* PAGE_ZIP_COMPRESS_DBG */
page_zip_compress_duration[page_zip->ssize]
+= ut_time_us(NULL) - usec;
return(TRUE); return(TRUE);
} }
...@@ -2779,6 +2785,7 @@ page_zip_decompress( ...@@ -2779,6 +2785,7 @@ page_zip_decompress(
ulint trx_id_col = ULINT_UNDEFINED; ulint trx_id_col = ULINT_UNDEFINED;
mem_heap_t* heap; mem_heap_t* heap;
ulint* offsets; ulint* offsets;
ullint usec = ut_time_us(NULL);
ut_ad(page_zip_simple_validate(page_zip)); ut_ad(page_zip_simple_validate(page_zip));
UNIV_MEM_ASSERT_W(page, UNIV_PAGE_SIZE); UNIV_MEM_ASSERT_W(page, UNIV_PAGE_SIZE);
...@@ -2935,6 +2942,8 @@ err_exit: ...@@ -2935,6 +2942,8 @@ err_exit:
page_zip_fields_free(index); page_zip_fields_free(index);
mem_heap_free(heap); mem_heap_free(heap);
page_zip_decompress_count[page_zip->ssize]++; page_zip_decompress_count[page_zip->ssize]++;
page_zip_decompress_duration[page_zip->ssize]
+= ut_time_us(NULL) - usec;
return(TRUE); return(TRUE);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment