1 diff -ruN a/innobase/include/srv0srv.h b/innobase/include/srv0srv.h
2 --- a/innobase/include/srv0srv.h Mon Jun 01 00:36:33 2009 -0700
3 +++ b/innobase/include/srv0srv.h Mon Jun 01 00:36:41 2009 -0700
5 extern ulint srv_log_file_size;
6 extern ulint srv_log_buffer_size;
7 extern ulong srv_flush_log_at_trx_commit;
8 +extern ulong srv_show_locks_held;
9 +extern ulong srv_show_verbose_locks;
11 extern byte srv_latin1_ordering[256];/* The sort order table of the latin1
13 diff -ruN a/innobase/lock/lock0lock.c b/innobase/lock/lock0lock.c
14 --- a/innobase/lock/lock0lock.c Mon Jun 01 00:36:33 2009 -0700
15 +++ b/innobase/lock/lock0lock.c Mon Jun 01 00:36:41 2009 -0700
17 #endif /* UNIV_SYNC_DEBUG */
20 + if ( srv_show_verbose_locks ) {
21 for (i = 0; i < lock_rec_get_n_bits(lock); i++) {
23 if (lock_rec_get_nth_bit(lock, i)) {
28 + } /* srv_show_verbose_locks */
31 if (UNIV_LIKELY_NULL(heap)) {
36 - if (!srv_print_innodb_lock_monitor) {
37 + if (!srv_print_innodb_lock_monitor && !srv_show_locks_held) {
45 - if (nth_lock >= 10) {
46 + if (nth_lock >= srv_show_locks_held) {
48 - "10 LOCKS PRINTED FOR THIS TRX: SUPPRESSING FURTHER PRINTS\n",
49 + "TOO MANY LOCKS PRINTED FOR THIS TRX: SUPPRESSING FURTHER PRINTS\n",
53 diff -ruN a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c
54 --- a/innobase/srv/srv0srv.c Mon Jun 01 00:36:33 2009 -0700
55 +++ b/innobase/srv/srv0srv.c Mon Jun 01 00:36:41 2009 -0700
57 ulint srv_log_file_size = ULINT_MAX; /* size in database pages */
58 ulint srv_log_buffer_size = ULINT_MAX; /* size in database pages */
59 ulong srv_flush_log_at_trx_commit = 1;
60 +ulint srv_show_locks_held = 10;
61 +ulint srv_show_verbose_locks = 0;
63 byte srv_latin1_ordering[256] /* The sort order table of the latin1
64 character set. The following table is
65 @@ -1711,24 +1713,6 @@
67 mutex_exit(&dict_foreign_err_mutex);
69 - lock_print_info_summary(file);
71 - long t = ftell(file);
73 - *trx_start = ULINT_UNDEFINED;
75 - *trx_start = (ulint) t;
78 - lock_print_info_all_transactions(file);
80 - long t = ftell(file);
82 - *trx_end = ULINT_UNDEFINED;
84 - *trx_end = (ulint) t;
90 @@ -1822,6 +1806,25 @@
91 srv_n_rows_deleted_old = srv_n_rows_deleted;
92 srv_n_rows_read_old = srv_n_rows_read;
94 + lock_print_info_summary(file);
96 + long t = ftell(file);
98 + *trx_start = ULINT_UNDEFINED;
100 + *trx_start = (ulint) t;
103 + lock_print_info_all_transactions(file);
105 + long t = ftell(file);
107 + *trx_end = ULINT_UNDEFINED;
109 + *trx_end = (ulint) t;
113 fputs("----------------------------\n"
114 "END OF INNODB MONITOR OUTPUT\n"
115 "============================\n", file);
116 diff -ruN a/libmysqld/set_var.cc b/libmysqld/set_var.cc
117 --- a/libmysqld/set_var.cc Mon Jun 01 00:36:33 2009 -0700
118 +++ b/libmysqld/set_var.cc Mon Jun 01 00:36:41 2009 -0700
120 &sys_innodb_thread_concurrency,
121 &sys_innodb_commit_concurrency,
122 &sys_innodb_flush_log_at_trx_commit,
123 + &sys_innodb_show_locks_held,
124 + &sys_innodb_show_verbose_locks,
126 &sys_trust_routine_creators,
127 &sys_trust_function_creators,
129 {"innodb_file_io_threads", (char*) &innobase_file_io_threads, SHOW_LONG },
130 {"innodb_file_per_table", (char*) &innobase_file_per_table, SHOW_MY_BOOL},
131 {sys_innodb_flush_log_at_trx_commit.name, (char*) &sys_innodb_flush_log_at_trx_commit, SHOW_SYS},
132 + {sys_innodb_show_locks_held.name, (char*) &sys_innodb_show_locks_held, SHOW_SYS },
133 + {sys_innodb_show_verbose_locks.name, (char*) &sys_innodb_show_verbose_locks, SHOW_SYS },
134 {"innodb_flush_method", (char*) &innobase_unix_file_flush_method, SHOW_CHAR_PTR},
135 {"innodb_force_recovery", (char*) &innobase_force_recovery, SHOW_LONG },
136 {"innodb_lock_wait_timeout", (char*) &innobase_lock_wait_timeout, SHOW_LONG },
137 diff -ruN /dev/null b/patch_info/innodb_locks_held.info
138 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
139 +++ b/patch_info/innodb_locks_held.info Mon Jun 01 00:36:41 2009 -0700
141 +File=innodb_locks_held.patch
142 +Name=Add locks held, remove locked records in SHOW INNODB STATUS
144 +Author=Baron Schwartz <baron@xaprb.com>
146 +Comment=Bug #29126 fix
147 diff -ruN a/sql/ha_innodb.h b/sql/ha_innodb.h
148 --- a/sql/ha_innodb.h Mon Jun 01 00:36:33 2009 -0700
149 +++ b/sql/ha_innodb.h Mon Jun 01 00:36:41 2009 -0700
151 extern ulong srv_enable_unsafe_group_commit;
152 extern uint srv_read_ahead;
153 extern uint srv_adaptive_checkpoint;
154 +extern ulong srv_show_locks_held;
155 +extern ulong srv_show_verbose_locks;
157 /* An option to enable the fix for "Bug#43660 SHOW INDEXES/ANALYZE does
158 NOT update cardinality for indexes of InnoDB table". By default we are
159 diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
160 --- a/sql/mysqld.cc Mon Jun 01 00:36:33 2009 -0700
161 +++ b/sql/mysqld.cc Mon Jun 01 00:36:41 2009 -0700
162 @@ -5032,6 +5032,8 @@
163 OPT_INNODB_MAX_PURGE_LAG,
164 OPT_INNODB_FILE_IO_THREADS,
165 OPT_INNODB_LOCK_WAIT_TIMEOUT,
166 + OPT_INNODB_SHOW_LOCKS_HELD,
167 + OPT_INNODB_SHOW_VERBOSE_LOCKS,
168 OPT_INNODB_THREAD_CONCURRENCY,
169 OPT_INNODB_COMMIT_CONCURRENCY,
170 OPT_INNODB_FORCE_RECOVERY,
171 @@ -5379,6 +5381,14 @@
172 (gptr*) &srv_flush_log_at_trx_commit,
173 (gptr*) &srv_flush_log_at_trx_commit,
174 0, GET_ULONG, OPT_ARG, 1, 0, 2, 0, 0, 0},
175 + {"innodb_show_locks_held", OPT_INNODB_SHOW_LOCKS_HELD,
176 + "Number of locks held to print for each InnoDB transaction in SHOW INNODB STATUS.",
177 + (gptr*) &srv_show_locks_held, (gptr*) &srv_show_locks_held,
178 + 0, GET_LONG, OPT_ARG, 10, 0, 1000, 0, 1, 0},
179 + {"innodb_show_verbose_locks", OPT_INNODB_SHOW_VERBOSE_LOCKS,
180 + "Whether to show records locked in SHOW INNODB STATUS.",
181 + (gptr*) &srv_show_verbose_locks, (gptr*) &srv_show_verbose_locks,
182 + 0, GET_LONG, OPT_ARG, 0, 0, 1, 0, 1, 0},
183 {"innodb_flush_method", OPT_INNODB_FLUSH_METHOD,
184 "With which method to flush data.", (gptr*) &innobase_unix_file_flush_method,
185 (gptr*) &innobase_unix_file_flush_method, 0, GET_STR, REQUIRED_ARG, 0, 0, 0,
186 diff -ruN a/sql/set_var.cc b/sql/set_var.cc
187 --- a/sql/set_var.cc Mon Jun 01 00:36:33 2009 -0700
188 +++ b/sql/set_var.cc Mon Jun 01 00:36:41 2009 -0700
190 sys_var_enum sys_innodb_adaptive_checkpoint("innodb_adaptive_checkpoint",
191 &srv_adaptive_checkpoint,
192 &innodb_adaptive_checkpoint_typelib, fix_innodb_adaptive_checkpoint);
193 +sys_var_long_ptr sys_innodb_show_locks_held(
194 + "innodb_show_locks_held",
195 + &srv_show_locks_held);
196 +sys_var_long_ptr sys_innodb_show_verbose_locks(
197 + "innodb_show_verbose_locks",
198 + &srv_show_verbose_locks);
199 sys_var_const_os_str_ptr sys_innodb_data_file_path("innodb_data_file_path",
200 &innobase_data_file_path);
201 sys_var_const_os_str_ptr sys_innodb_data_home_dir("innodb_data_home_dir",
203 &sys_innodb_read_ahead,
204 &sys_innodb_enable_unsafe_group_commit,
205 &sys_innodb_adaptive_checkpoint,
206 + &sys_innodb_show_locks_held,
207 + &sys_innodb_show_verbose_locks,
209 &sys_trust_routine_creators,
210 &sys_trust_function_creators,
211 @@ -1041,6 +1049,8 @@
212 {"innodb_file_io_threads", (char*) &innobase_file_io_threads, SHOW_LONG },
213 {"innodb_file_per_table", (char*) &innobase_file_per_table, SHOW_MY_BOOL},
214 {sys_innodb_flush_log_at_trx_commit.name, (char*) &sys_innodb_flush_log_at_trx_commit, SHOW_SYS},
215 + {sys_innodb_show_locks_held.name, (char*) &sys_innodb_show_locks_held, SHOW_SYS },
216 + {sys_innodb_show_verbose_locks.name, (char*) &sys_innodb_show_verbose_locks, SHOW_SYS },
217 {"innodb_flush_method", (char*) &innobase_unix_file_flush_method, SHOW_CHAR_PTR},
218 {"innodb_force_recovery", (char*) &innobase_force_recovery, SHOW_LONG },
219 {"innodb_lock_wait_timeout", (char*) &innobase_lock_wait_timeout, SHOW_LONG },