# name : innodb_deadlock_count.patch # introduced : 11 or before # maintainer : Yasufumi # #!!! notice !!! # Any small change to this file in the main branch # should be done or reviewed by the maintainer! diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc --- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 16:09:53.145500265 +0900 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 16:10:24.605515894 +0900 @@ -687,6 +687,8 @@ (char*) &export_vars.innodb_dblwr_pages_written, SHOW_LONG}, {"dblwr_writes", (char*) &export_vars.innodb_dblwr_writes, SHOW_LONG}, + {"deadlocks", + (char*) &export_vars.innodb_deadlocks, SHOW_LONG}, {"dict_tables", (char*) &export_vars.innodb_dict_tables, SHOW_LONG}, {"have_atomic_builtins", diff -ruN a/storage/innobase/include/lock0lock.h b/storage/innobase/include/lock0lock.h --- a/storage/innobase/include/lock0lock.h 2010-11-03 07:01:13.000000000 +0900 +++ b/storage/innobase/include/lock0lock.h 2010-12-04 16:10:24.605515894 +0900 @@ -43,6 +43,7 @@ #endif /* UNIV_DEBUG */ /* Buffer for storing information about the most recent deadlock error */ extern FILE* lock_latest_err_file; +extern ulint srv_n_lock_deadlock_count; /*********************************************************************//** Gets the size of a lock struct. diff -ruN a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h --- a/storage/innobase/include/srv0srv.h 2010-12-04 15:55:21.378480843 +0900 +++ b/storage/innobase/include/srv0srv.h 2010-12-04 16:10:24.606550983 +0900 @@ -776,6 +776,7 @@ ulint innodb_buffer_pool_read_ahead_evicted;/*!< srv_read_ahead evicted*/ ulint innodb_dblwr_pages_written; /*!< srv_dblwr_pages_written */ ulint innodb_dblwr_writes; /*!< srv_dblwr_writes */ + ulint innodb_deadlocks; ibool innodb_have_atomic_builtins; /*!< HAVE_ATOMIC_BUILTINS */ ulint innodb_log_waits; /*!< srv_log_waits */ ulint innodb_log_write_requests; /*!< srv_log_write_requests */ diff -ruN a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c --- a/storage/innobase/lock/lock0lock.c 2010-12-03 17:49:11.609953956 +0900 +++ b/storage/innobase/lock/lock0lock.c 2010-12-04 16:10:24.608513889 +0900 @@ -3328,6 +3328,7 @@ break; case LOCK_VICTIM_IS_START: + srv_n_lock_deadlock_count++; fputs("*** WE ROLL BACK TRANSACTION (2)\n", lock_latest_err_file); break; diff -ruN a/storage/innobase/srv/srv0srv.c b/storage/innobase/srv/srv0srv.c --- a/storage/innobase/srv/srv0srv.c 2010-12-04 15:57:13.069513371 +0900 +++ b/storage/innobase/srv/srv0srv.c 2010-12-04 16:10:24.610593039 +0900 @@ -475,6 +475,7 @@ static ulint srv_n_rows_deleted_old = 0; static ulint srv_n_rows_read_old = 0; +UNIV_INTERN ulint srv_n_lock_deadlock_count = 0; UNIV_INTERN ulint srv_n_lock_wait_count = 0; UNIV_INTERN ulint srv_n_lock_wait_current_count = 0; UNIV_INTERN ib_int64_t srv_n_lock_wait_time = 0; @@ -2293,6 +2294,7 @@ export_vars.innodb_buffer_pool_pages_data = LRU_len; export_vars.innodb_buffer_pool_pages_dirty = flush_list_len; export_vars.innodb_buffer_pool_pages_free = free_len; + export_vars.innodb_deadlocks = srv_n_lock_deadlock_count; #ifdef UNIV_DEBUG export_vars.innodb_buffer_pool_pages_latched = buf_get_latched_pages_number();