]>
Commit | Line | Data |
---|---|---|
36400f81 | 1 | diff -ruN a/innobase/include/srv0srv.h b/innobase/include/srv0srv.h |
45532174 ER |
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 | |
eccb488f ER |
4 | @@ -80,6 +80,8 @@ |
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; | |
10 | ||
11 | extern byte srv_latin1_ordering[256];/* The sort order table of the latin1 | |
12 | character set */ | |
36400f81 | 13 | diff -ruN a/innobase/lock/lock0lock.c b/innobase/lock/lock0lock.c |
45532174 ER |
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 | |
36400f81 | 16 | @@ -4156,6 +4156,7 @@ |
eccb488f ER |
17 | #endif /* UNIV_SYNC_DEBUG */ |
18 | } | |
19 | ||
20 | + if ( srv_show_verbose_locks ) { | |
21 | for (i = 0; i < lock_rec_get_n_bits(lock); i++) { | |
22 | ||
23 | if (lock_rec_get_nth_bit(lock, i)) { | |
36400f81 | 24 | @@ -4173,6 +4174,7 @@ |
eccb488f ER |
25 | putc('\n', file); |
26 | } | |
27 | } | |
28 | + } /* srv_show_verbose_locks */ | |
29 | ||
30 | mtr_commit(&mtr); | |
31 | if (UNIV_LIKELY_NULL(heap)) { | |
36400f81 | 32 | @@ -4338,7 +4340,7 @@ |
eccb488f ER |
33 | } |
34 | } | |
35 | ||
36 | - if (!srv_print_innodb_lock_monitor) { | |
37 | + if (!srv_print_innodb_lock_monitor && !srv_show_locks_held) { | |
38 | nth_trx++; | |
39 | goto loop; | |
40 | } | |
36400f81 | 41 | @@ -4393,9 +4395,9 @@ |
eccb488f ER |
42 | |
43 | nth_lock++; | |
44 | ||
45 | - if (nth_lock >= 10) { | |
46 | + if (nth_lock >= srv_show_locks_held) { | |
47 | fputs( | |
48 | - "10 LOCKS PRINTED FOR THIS TRX: SUPPRESSING FURTHER PRINTS\n", | |
49 | + "TOO MANY LOCKS PRINTED FOR THIS TRX: SUPPRESSING FURTHER PRINTS\n", | |
50 | file); | |
51 | ||
52 | nth_trx++; | |
36400f81 | 53 | diff -ruN a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c |
45532174 ER |
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 | |
eccb488f ER |
56 | @@ -116,6 +116,8 @@ |
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; | |
62 | ||
63 | byte srv_latin1_ordering[256] /* The sort order table of the latin1 | |
64 | character set. The following table is | |
45532174 | 65 | @@ -1711,24 +1713,6 @@ |
dcc72bc6 ER |
66 | |
67 | mutex_exit(&dict_foreign_err_mutex); | |
68 | ||
69 | - lock_print_info_summary(file); | |
70 | - if (trx_start) { | |
71 | - long t = ftell(file); | |
72 | - if (t < 0) { | |
73 | - *trx_start = ULINT_UNDEFINED; | |
74 | - } else { | |
75 | - *trx_start = (ulint) t; | |
76 | - } | |
77 | - } | |
78 | - lock_print_info_all_transactions(file); | |
79 | - if (trx_end) { | |
80 | - long t = ftell(file); | |
81 | - if (t < 0) { | |
82 | - *trx_end = ULINT_UNDEFINED; | |
83 | - } else { | |
84 | - *trx_end = (ulint) t; | |
85 | - } | |
86 | - } | |
87 | fputs("--------\n" | |
88 | "FILE I/O\n" | |
89 | "--------\n", file); | |
45532174 | 90 | @@ -1822,6 +1806,25 @@ |
dcc72bc6 ER |
91 | srv_n_rows_deleted_old = srv_n_rows_deleted; |
92 | srv_n_rows_read_old = srv_n_rows_read; | |
45532174 | 93 | |
dcc72bc6 ER |
94 | + lock_print_info_summary(file); |
95 | + if (trx_start) { | |
96 | + long t = ftell(file); | |
97 | + if (t < 0) { | |
98 | + *trx_start = ULINT_UNDEFINED; | |
99 | + } else { | |
100 | + *trx_start = (ulint) t; | |
101 | + } | |
102 | + } | |
103 | + lock_print_info_all_transactions(file); | |
104 | + if (trx_end) { | |
105 | + long t = ftell(file); | |
106 | + if (t < 0) { | |
107 | + *trx_end = ULINT_UNDEFINED; | |
108 | + } else { | |
109 | + *trx_end = (ulint) t; | |
110 | + } | |
111 | + } | |
45532174 | 112 | + |
dcc72bc6 ER |
113 | fputs("----------------------------\n" |
114 | "END OF INNODB MONITOR OUTPUT\n" | |
45532174 | 115 | "============================\n", file); |
36400f81 | 116 | diff -ruN a/libmysqld/set_var.cc b/libmysqld/set_var.cc |
45532174 ER |
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 | |
36400f81 | 119 | @@ -831,6 +831,8 @@ |
eccb488f ER |
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, | |
125 | #endif | |
126 | &sys_trust_routine_creators, | |
127 | &sys_trust_function_creators, | |
36400f81 | 128 | @@ -948,6 +950,8 @@ |
eccb488f ER |
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 }, | |
36400f81 | 137 | diff -ruN /dev/null b/patch_info/innodb_locks_held.info |
eccb488f | 138 | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
45532174 | 139 | +++ b/patch_info/innodb_locks_held.info Mon Jun 01 00:36:41 2009 -0700 |
eccb488f ER |
140 | @@ -0,0 +1,6 @@ |
141 | +File=innodb_locks_held.patch | |
142 | +Name=Add locks held, remove locked records in SHOW INNODB STATUS | |
143 | +Version=1.0 | |
144 | +Author=Baron Schwartz <baron@xaprb.com> | |
145 | +License=GPL | |
146 | +Comment=Bug #29126 fix | |
36400f81 | 147 | diff -ruN a/sql/ha_innodb.h b/sql/ha_innodb.h |
45532174 ER |
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 | |
150 | @@ -243,6 +243,8 @@ | |
151 | extern ulong srv_enable_unsafe_group_commit; | |
337bc045 | 152 | extern uint srv_read_ahead; |
89b96684 | 153 | extern uint srv_adaptive_checkpoint; |
eccb488f ER |
154 | +extern ulong srv_show_locks_held; |
155 | +extern ulong srv_show_verbose_locks; | |
eccb488f | 156 | |
45532174 ER |
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 | |
36400f81 | 159 | diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc |
45532174 ER |
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 | |
36400f81 | 162 | @@ -5032,6 +5032,8 @@ |
eccb488f ER |
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, | |
36400f81 | 171 | @@ -5379,6 +5381,14 @@ |
eccb488f ER |
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, | |
36400f81 | 186 | diff -ruN a/sql/set_var.cc b/sql/set_var.cc |
45532174 ER |
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 | |
36400f81 | 189 | @@ -541,6 +541,12 @@ |
89b96684 ER |
190 | sys_var_enum sys_innodb_adaptive_checkpoint("innodb_adaptive_checkpoint", |
191 | &srv_adaptive_checkpoint, | |
192 | &innodb_adaptive_checkpoint_typelib, fix_innodb_adaptive_checkpoint); | |
eccb488f ER |
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", | |
36400f81 | 202 | @@ -924,6 +930,8 @@ |
eccb488f | 203 | &sys_innodb_read_ahead, |
45532174 | 204 | &sys_innodb_enable_unsafe_group_commit, |
eccb488f ER |
205 | &sys_innodb_adaptive_checkpoint, |
206 | + &sys_innodb_show_locks_held, | |
207 | + &sys_innodb_show_verbose_locks, | |
208 | #endif | |
209 | &sys_trust_routine_creators, | |
210 | &sys_trust_function_creators, | |
36400f81 | 211 | @@ -1041,6 +1049,8 @@ |
eccb488f ER |
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 }, |