mirror of
https://github.com/MariaDB/server.git
synced 2026-05-07 23:54:31 +02:00
Applying InnoDB snapshot
Detailed revision comments: r6781 | marko | 2010-03-09 09:41:08 +0200 (Tue, 09 Mar 2010) | 4 lines branches/zip: Make SHOW ENGINE INNODB MUTEX display SUM(os_waits) for block mutexes and blocks. Designed by Michael and Marko. rb://188, Issue #358
This commit is contained in:
parent
f37a632954
commit
7197cab3c7
2 changed files with 90 additions and 37 deletions
|
|
@ -1,3 +1,9 @@
|
||||||
|
2010-03-09 The InnoDB Team
|
||||||
|
|
||||||
|
* handler/ha_innodb.cc:
|
||||||
|
Make SHOW ENGINE INNODB MUTEX STATUS display SUM(os_waits)
|
||||||
|
for the buffer pool block mutexes and locks.
|
||||||
|
|
||||||
2010-03-08 The InnoDB Team
|
2010-03-08 The InnoDB Team
|
||||||
|
|
||||||
* fil/fil0fil.c:
|
* fil/fil0fil.c:
|
||||||
|
|
|
||||||
|
|
@ -8659,19 +8659,25 @@ innodb_show_status(
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************//**
|
/************************************************************************//**
|
||||||
Implements the SHOW MUTEX STATUS command. . */
|
Implements the SHOW MUTEX STATUS command.
|
||||||
|
@return TRUE on failure, FALSE on success. */
|
||||||
static
|
static
|
||||||
bool
|
bool
|
||||||
innodb_mutex_show_status(
|
innodb_mutex_show_status(
|
||||||
/*=====================*/
|
/*=====================*/
|
||||||
handlerton* hton, /*!< in: the innodb handlerton */
|
handlerton* hton, /*!< in: the innodb handlerton */
|
||||||
THD* thd, /*!< in: the MySQL query thread of the
|
THD* thd, /*!< in: the MySQL query thread of the
|
||||||
caller */
|
caller */
|
||||||
stat_print_fn* stat_print)
|
stat_print_fn* stat_print) /*!< in: function for printing
|
||||||
|
statistics */
|
||||||
{
|
{
|
||||||
char buf1[IO_SIZE], buf2[IO_SIZE];
|
char buf1[IO_SIZE], buf2[IO_SIZE];
|
||||||
mutex_t* mutex;
|
mutex_t* mutex;
|
||||||
rw_lock_t* lock;
|
rw_lock_t* lock;
|
||||||
|
ulint block_mutex_oswait_count = 0;
|
||||||
|
ulint block_lock_oswait_count = 0;
|
||||||
|
mutex_t* block_mutex = NULL;
|
||||||
|
rw_lock_t* block_lock = NULL;
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
ulint rw_lock_count= 0;
|
ulint rw_lock_count= 0;
|
||||||
ulint rw_lock_count_spin_loop= 0;
|
ulint rw_lock_count_spin_loop= 0;
|
||||||
|
|
@ -8686,12 +8692,16 @@ innodb_mutex_show_status(
|
||||||
|
|
||||||
mutex_enter(&mutex_list_mutex);
|
mutex_enter(&mutex_list_mutex);
|
||||||
|
|
||||||
mutex = UT_LIST_GET_FIRST(mutex_list);
|
for (mutex = UT_LIST_GET_FIRST(mutex_list); mutex != NULL;
|
||||||
|
mutex = UT_LIST_GET_NEXT(list, mutex)) {
|
||||||
|
if (mutex->count_os_wait == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
while (mutex != NULL) {
|
if (buf_pool_is_block_mutex(mutex)) {
|
||||||
if (mutex->count_os_wait == 0
|
block_mutex = mutex;
|
||||||
|| buf_pool_is_block_mutex(mutex)) {
|
block_mutex_oswait_count += mutex->count_os_wait;
|
||||||
goto next_mutex;
|
continue;
|
||||||
}
|
}
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
if (mutex->mutex_type != 1) {
|
if (mutex->mutex_type != 1) {
|
||||||
|
|
@ -8718,8 +8728,7 @@ innodb_mutex_show_status(
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
rw_lock_count += mutex->count_using;
|
rw_lock_count += mutex->count_using;
|
||||||
rw_lock_count_spin_loop += mutex->count_spin_loop;
|
rw_lock_count_spin_loop += mutex->count_spin_loop;
|
||||||
rw_lock_count_spin_rounds += mutex->count_spin_rounds;
|
rw_lock_count_spin_rounds += mutex->count_spin_rounds;
|
||||||
|
|
@ -8731,7 +8740,7 @@ innodb_mutex_show_status(
|
||||||
buf1len= (uint) my_snprintf(buf1, sizeof(buf1), "%s:%lu",
|
buf1len= (uint) my_snprintf(buf1, sizeof(buf1), "%s:%lu",
|
||||||
mutex->cfile_name, (ulong) mutex->cline);
|
mutex->cfile_name, (ulong) mutex->cline);
|
||||||
buf2len= (uint) my_snprintf(buf2, sizeof(buf2), "os_waits=%lu",
|
buf2len= (uint) my_snprintf(buf2, sizeof(buf2), "os_waits=%lu",
|
||||||
mutex->count_os_wait);
|
(ulong) mutex->count_os_wait);
|
||||||
|
|
||||||
if (stat_print(thd, innobase_hton_name,
|
if (stat_print(thd, innobase_hton_name,
|
||||||
hton_name_len, buf1, buf1len,
|
hton_name_len, buf1, buf1len,
|
||||||
|
|
@ -8740,45 +8749,83 @@ innodb_mutex_show_status(
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
#endif /* UNIV_DEBUG */
|
#endif /* UNIV_DEBUG */
|
||||||
|
}
|
||||||
|
|
||||||
next_mutex:
|
if (block_mutex) {
|
||||||
mutex = UT_LIST_GET_NEXT(list, mutex);
|
buf1len = (uint) my_snprintf(buf1, sizeof buf1,
|
||||||
|
"combined %s:%lu",
|
||||||
|
block_mutex->cfile_name,
|
||||||
|
(ulong) block_mutex->cline);
|
||||||
|
buf2len = (uint) my_snprintf(buf2, sizeof buf2,
|
||||||
|
"os_waits=%lu",
|
||||||
|
(ulong) block_mutex_oswait_count);
|
||||||
|
|
||||||
|
if (stat_print(thd, innobase_hton_name,
|
||||||
|
hton_name_len, buf1, buf1len,
|
||||||
|
buf2, buf2len)) {
|
||||||
|
mutex_exit(&mutex_list_mutex);
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_exit(&mutex_list_mutex);
|
mutex_exit(&mutex_list_mutex);
|
||||||
|
|
||||||
mutex_enter(&rw_lock_list_mutex);
|
mutex_enter(&rw_lock_list_mutex);
|
||||||
|
|
||||||
lock = UT_LIST_GET_FIRST(rw_lock_list);
|
for (lock = UT_LIST_GET_FIRST(rw_lock_list); lock != NULL;
|
||||||
|
lock = UT_LIST_GET_NEXT(list, lock)) {
|
||||||
while (lock != NULL) {
|
if (lock->count_os_wait) {
|
||||||
if (lock->count_os_wait
|
continue;
|
||||||
&& !buf_pool_is_block_lock(lock)) {
|
}
|
||||||
buf1len= my_snprintf(buf1, sizeof(buf1), "%s:%lu",
|
|
||||||
lock->cfile_name, (ulong) lock->cline);
|
if (buf_pool_is_block_lock(lock)) {
|
||||||
buf2len= my_snprintf(buf2, sizeof(buf2),
|
block_lock = lock;
|
||||||
"os_waits=%lu", lock->count_os_wait);
|
block_lock_oswait_count += lock->count_os_wait;
|
||||||
|
continue;
|
||||||
if (stat_print(thd, innobase_hton_name,
|
}
|
||||||
hton_name_len, buf1, buf1len,
|
|
||||||
buf2, buf2len)) {
|
buf1len = my_snprintf(buf1, sizeof buf1, "%s:%lu",
|
||||||
mutex_exit(&rw_lock_list_mutex);
|
lock->cfile_name, (ulong) lock->cline);
|
||||||
DBUG_RETURN(1);
|
buf2len = my_snprintf(buf2, sizeof buf2, "os_waits=%lu",
|
||||||
}
|
(ulong) lock->count_os_wait);
|
||||||
|
|
||||||
|
if (stat_print(thd, innobase_hton_name,
|
||||||
|
hton_name_len, buf1, buf1len,
|
||||||
|
buf2, buf2len)) {
|
||||||
|
mutex_exit(&rw_lock_list_mutex);
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (block_lock) {
|
||||||
|
buf1len = (uint) my_snprintf(buf1, sizeof buf1,
|
||||||
|
"combined %s:%lu",
|
||||||
|
block_lock->cfile_name,
|
||||||
|
(ulong) block_lock->cline);
|
||||||
|
buf2len = (uint) my_snprintf(buf2, sizeof buf2,
|
||||||
|
"os_waits=%lu",
|
||||||
|
(ulong) block_lock_oswait_count);
|
||||||
|
|
||||||
|
if (stat_print(thd, innobase_hton_name,
|
||||||
|
hton_name_len, buf1, buf1len,
|
||||||
|
buf2, buf2len)) {
|
||||||
|
mutex_exit(&rw_lock_list_mutex);
|
||||||
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
lock = UT_LIST_GET_NEXT(list, lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_exit(&rw_lock_list_mutex);
|
mutex_exit(&rw_lock_list_mutex);
|
||||||
|
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
buf2len= my_snprintf(buf2, sizeof(buf2),
|
buf2len = my_snprintf(buf2, sizeof buf2,
|
||||||
"count=%lu, spin_waits=%lu, spin_rounds=%lu, "
|
"count=%lu, spin_waits=%lu, spin_rounds=%lu, "
|
||||||
"os_waits=%lu, os_yields=%lu, os_wait_times=%lu",
|
"os_waits=%lu, os_yields=%lu, os_wait_times=%lu",
|
||||||
rw_lock_count, rw_lock_count_spin_loop,
|
(ulong) rw_lock_count,
|
||||||
rw_lock_count_spin_rounds,
|
(ulong) rw_lock_count_spin_loop,
|
||||||
rw_lock_count_os_wait, rw_lock_count_os_yield,
|
(ulong) rw_lock_count_spin_rounds,
|
||||||
(ulong) (rw_lock_wait_time/1000));
|
(ulong) rw_lock_count_os_wait,
|
||||||
|
(ulong) rw_lock_count_os_yield,
|
||||||
|
(ulong) (rw_lock_wait_time / 1000));
|
||||||
|
|
||||||
if (stat_print(thd, innobase_hton_name, hton_name_len,
|
if (stat_print(thd, innobase_hton_name, hton_name_len,
|
||||||
STRING_WITH_LEN("rw_lock_mutexes"), buf2, buf2len)) {
|
STRING_WITH_LEN("rw_lock_mutexes"), buf2, buf2len)) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue