summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'percona/5.0.83-b17-20090723/innodb_locks_held.patch')
-rw-r--r--percona/5.0.83-b17-20090723/innodb_locks_held.patch219
1 files changed, 219 insertions, 0 deletions
diff --git a/percona/5.0.83-b17-20090723/innodb_locks_held.patch b/percona/5.0.83-b17-20090723/innodb_locks_held.patch
new file mode 100644
index 0000000..062fa47
--- /dev/null
+++ b/percona/5.0.83-b17-20090723/innodb_locks_held.patch
@@ -0,0 +1,219 @@
+diff -r e9fb5b8bcf78 innobase/include/srv0srv.h
+--- a/innobase/include/srv0srv.h Mon Jun 01 00:36:33 2009 -0700
++++ b/innobase/include/srv0srv.h Mon Jun 01 00:36:41 2009 -0700
+@@ -80,6 +80,8 @@
+ extern ulint srv_log_file_size;
+ extern ulint srv_log_buffer_size;
+ extern ulong srv_flush_log_at_trx_commit;
++extern ulong srv_show_locks_held;
++extern ulong srv_show_verbose_locks;
+
+ extern byte srv_latin1_ordering[256];/* The sort order table of the latin1
+ character set */
+diff -r e9fb5b8bcf78 innobase/lock/lock0lock.c
+--- a/innobase/lock/lock0lock.c Mon Jun 01 00:36:33 2009 -0700
++++ b/innobase/lock/lock0lock.c Mon Jun 01 00:36:41 2009 -0700
+@@ -4181,6 +4181,7 @@
+ #endif /* UNIV_SYNC_DEBUG */
+ }
+
++ if ( srv_show_verbose_locks ) {
+ for (i = 0; i < lock_rec_get_n_bits(lock); i++) {
+
+ if (lock_rec_get_nth_bit(lock, i)) {
+@@ -4198,6 +4199,7 @@
+ putc('\n', file);
+ }
+ }
++ } /* srv_show_verbose_locks */
+
+ mtr_commit(&mtr);
+ if (UNIV_LIKELY_NULL(heap)) {
+@@ -4369,7 +4371,7 @@
+ }
+ }
+
+- if (!srv_print_innodb_lock_monitor) {
++ if (!srv_print_innodb_lock_monitor && !srv_show_locks_held) {
+ nth_trx++;
+ goto loop;
+ }
+@@ -4426,9 +4428,9 @@
+
+ nth_lock++;
+
+- if (nth_lock >= 10) {
++ if (nth_lock >= srv_show_locks_held) {
+ fputs(
+- "10 LOCKS PRINTED FOR THIS TRX: SUPPRESSING FURTHER PRINTS\n",
++ "TOO MANY LOCKS PRINTED FOR THIS TRX: SUPPRESSING FURTHER PRINTS\n",
+ file);
+
+ nth_trx++;
+diff -r e9fb5b8bcf78 innobase/srv/srv0srv.c
+--- a/innobase/srv/srv0srv.c Mon Jun 01 00:36:33 2009 -0700
++++ b/innobase/srv/srv0srv.c Mon Jun 01 00:36:41 2009 -0700
+@@ -116,6 +116,8 @@
+ ulint srv_log_file_size = ULINT_MAX; /* size in database pages */
+ ulint srv_log_buffer_size = ULINT_MAX; /* size in database pages */
+ ulong srv_flush_log_at_trx_commit = 1;
++ulint srv_show_locks_held = 10;
++ulint srv_show_verbose_locks = 0;
+
+ byte srv_latin1_ordering[256] /* The sort order table of the latin1
+ character set. The following table is
+@@ -1711,24 +1713,6 @@
+
+ mutex_exit(&dict_foreign_err_mutex);
+
+- lock_print_info_summary(file);
+- if (trx_start) {
+- long t = ftell(file);
+- if (t < 0) {
+- *trx_start = ULINT_UNDEFINED;
+- } else {
+- *trx_start = (ulint) t;
+- }
+- }
+- lock_print_info_all_transactions(file);
+- if (trx_end) {
+- long t = ftell(file);
+- if (t < 0) {
+- *trx_end = ULINT_UNDEFINED;
+- } else {
+- *trx_end = (ulint) t;
+- }
+- }
+ fputs("--------\n"
+ "FILE I/O\n"
+ "--------\n", file);
+@@ -1822,6 +1806,25 @@
+ srv_n_rows_deleted_old = srv_n_rows_deleted;
+ srv_n_rows_read_old = srv_n_rows_read;
+
++ lock_print_info_summary(file);
++ if (trx_start) {
++ long t = ftell(file);
++ if (t < 0) {
++ *trx_start = ULINT_UNDEFINED;
++ } else {
++ *trx_start = (ulint) t;
++ }
++ }
++ lock_print_info_all_transactions(file);
++ if (trx_end) {
++ long t = ftell(file);
++ if (t < 0) {
++ *trx_end = ULINT_UNDEFINED;
++ } else {
++ *trx_end = (ulint) t;
++ }
++ }
++
+ fputs("----------------------------\n"
+ "END OF INNODB MONITOR OUTPUT\n"
+ "============================\n", file);
+diff -r e9fb5b8bcf78 libmysqld/set_var.cc
+--- a/libmysqld/set_var.cc Mon Jun 01 00:36:33 2009 -0700
++++ b/libmysqld/set_var.cc Mon Jun 01 00:36:41 2009 -0700
+@@ -825,6 +825,8 @@
+ &sys_innodb_thread_concurrency,
+ &sys_innodb_commit_concurrency,
+ &sys_innodb_flush_log_at_trx_commit,
++ &sys_innodb_show_locks_held,
++ &sys_innodb_show_verbose_locks,
+ #endif
+ &sys_trust_routine_creators,
+ &sys_trust_function_creators,
+@@ -942,6 +944,8 @@
+ {"innodb_file_io_threads", (char*) &innobase_file_io_threads, SHOW_LONG },
+ {"innodb_file_per_table", (char*) &innobase_file_per_table, SHOW_MY_BOOL},
+ {sys_innodb_flush_log_at_trx_commit.name, (char*) &sys_innodb_flush_log_at_trx_commit, SHOW_SYS},
++ {sys_innodb_show_locks_held.name, (char*) &sys_innodb_show_locks_held, SHOW_SYS },
++ {sys_innodb_show_verbose_locks.name, (char*) &sys_innodb_show_verbose_locks, SHOW_SYS },
+ {"innodb_flush_method", (char*) &innobase_unix_file_flush_method, SHOW_CHAR_PTR},
+ {"innodb_force_recovery", (char*) &innobase_force_recovery, SHOW_LONG },
+ {"innodb_lock_wait_timeout", (char*) &innobase_lock_wait_timeout, SHOW_LONG },
+diff -r e9fb5b8bcf78 patch_info/innodb_locks_held.info
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ b/patch_info/innodb_locks_held.info Mon Jun 01 00:36:41 2009 -0700
+@@ -0,0 +1,6 @@
++File=innodb_locks_held.patch
++Name=Add locks held, remove locked records in SHOW INNODB STATUS
++Version=1.0
++Author=Baron Schwartz <baron@xaprb.com>
++License=GPL
++Comment=Bug #29126 fix
+diff -r e9fb5b8bcf78 sql/ha_innodb.h
+--- a/sql/ha_innodb.h Mon Jun 01 00:36:33 2009 -0700
++++ b/sql/ha_innodb.h Mon Jun 01 00:36:41 2009 -0700
+@@ -243,6 +243,8 @@
+ extern ulong srv_enable_unsafe_group_commit;
+ extern uint srv_read_ahead;
+ extern uint srv_adaptive_checkpoint;
++extern ulong srv_show_locks_held;
++extern ulong srv_show_verbose_locks;
+
+ /* An option to enable the fix for "Bug#43660 SHOW INDEXES/ANALYZE does
+ NOT update cardinality for indexes of InnoDB table". By default we are
+diff -r e9fb5b8bcf78 sql/mysqld.cc
+--- a/sql/mysqld.cc Mon Jun 01 00:36:33 2009 -0700
++++ b/sql/mysqld.cc Mon Jun 01 00:36:41 2009 -0700
+@@ -5016,6 +5016,8 @@
+ OPT_INNODB_MAX_PURGE_LAG,
+ OPT_INNODB_FILE_IO_THREADS,
+ OPT_INNODB_LOCK_WAIT_TIMEOUT,
++ OPT_INNODB_SHOW_LOCKS_HELD,
++ OPT_INNODB_SHOW_VERBOSE_LOCKS,
+ OPT_INNODB_THREAD_CONCURRENCY,
+ OPT_INNODB_COMMIT_CONCURRENCY,
+ OPT_INNODB_FORCE_RECOVERY,
+@@ -5364,6 +5366,14 @@
+ (gptr*) &srv_flush_log_at_trx_commit,
+ (gptr*) &srv_flush_log_at_trx_commit,
+ 0, GET_ULONG, OPT_ARG, 1, 0, 2, 0, 0, 0},
++ {"innodb_show_locks_held", OPT_INNODB_SHOW_LOCKS_HELD,
++ "Number of locks held to print for each InnoDB transaction in SHOW INNODB STATUS.",
++ (gptr*) &srv_show_locks_held, (gptr*) &srv_show_locks_held,
++ 0, GET_LONG, OPT_ARG, 10, 0, 1000, 0, 1, 0},
++ {"innodb_show_verbose_locks", OPT_INNODB_SHOW_VERBOSE_LOCKS,
++ "Whether to show records locked in SHOW INNODB STATUS.",
++ (gptr*) &srv_show_verbose_locks, (gptr*) &srv_show_verbose_locks,
++ 0, GET_LONG, OPT_ARG, 0, 0, 1, 0, 1, 0},
+ {"innodb_flush_method", OPT_INNODB_FLUSH_METHOD,
+ "With which method to flush data.", (gptr*) &innobase_unix_file_flush_method,
+ (gptr*) &innobase_unix_file_flush_method, 0, GET_STR, REQUIRED_ARG, 0, 0, 0,
+diff -r e9fb5b8bcf78 sql/set_var.cc
+--- a/sql/set_var.cc Mon Jun 01 00:36:33 2009 -0700
++++ b/sql/set_var.cc Mon Jun 01 00:36:41 2009 -0700
+@@ -527,6 +527,12 @@
+ sys_var_enum sys_innodb_adaptive_checkpoint("innodb_adaptive_checkpoint",
+ &srv_adaptive_checkpoint,
+ &innodb_adaptive_checkpoint_typelib, fix_innodb_adaptive_checkpoint);
++sys_var_long_ptr sys_innodb_show_locks_held(
++ "innodb_show_locks_held",
++ &srv_show_locks_held);
++sys_var_long_ptr sys_innodb_show_verbose_locks(
++ "innodb_show_verbose_locks",
++ &srv_show_verbose_locks);
+ sys_var_const_os_str_ptr sys_innodb_data_file_path("innodb_data_file_path",
+ &innobase_data_file_path);
+ sys_var_const_os_str_ptr sys_innodb_data_home_dir("innodb_data_home_dir",
+@@ -906,6 +912,8 @@
+ &sys_innodb_read_ahead,
+ &sys_innodb_enable_unsafe_group_commit,
+ &sys_innodb_adaptive_checkpoint,
++ &sys_innodb_show_locks_held,
++ &sys_innodb_show_verbose_locks,
+ #endif
+ &sys_trust_routine_creators,
+ &sys_trust_function_creators,
+@@ -1023,6 +1031,8 @@
+ {"innodb_file_io_threads", (char*) &innobase_file_io_threads, SHOW_LONG },
+ {"innodb_file_per_table", (char*) &innobase_file_per_table, SHOW_MY_BOOL},
+ {sys_innodb_flush_log_at_trx_commit.name, (char*) &sys_innodb_flush_log_at_trx_commit, SHOW_SYS},
++ {sys_innodb_show_locks_held.name, (char*) &sys_innodb_show_locks_held, SHOW_SYS },
++ {sys_innodb_show_verbose_locks.name, (char*) &sys_innodb_show_verbose_locks, SHOW_SYS },
+ {"innodb_flush_method", (char*) &innobase_unix_file_flush_method, SHOW_CHAR_PTR},
+ {"innodb_force_recovery", (char*) &innobase_force_recovery, SHOW_LONG },
+ {"innodb_lock_wait_timeout", (char*) &innobase_lock_wait_timeout, SHOW_LONG },