summaryrefslogtreecommitdiff
path: root/innobase/srv
diff options
context:
space:
mode:
authorunknown <marko@hundin.mysql.fi>2005-04-19 14:35:47 +0300
committerunknown <marko@hundin.mysql.fi>2005-04-19 14:35:47 +0300
commiteb72815b6f01791c2430929c9cf38e4b900f6f47 (patch)
tree39b48cfae69fdb476beaf2fd2220ff88a9219dde /innobase/srv
parent92a00143d7460c964523494e573508c151b9cba4 (diff)
downloadmariadb-git-eb72815b6f01791c2430929c9cf38e4b900f6f47.tar.gz
InnoDB: Truncate SHOW INNODB STATUS output at the start of the list
of active transactions, if necessary and possible. (Bug #5436) innobase/include/lock0lock.h: Split lock_print_info() into lock_print_info_summary() and lock_print_info_all_transactions(). innobase/lock/lock0lock.c: Split lock_print_info() into lock_print_info_summary() and lock_print_info_all_transactions(). innobase/include/srv0srv.h: srv_printf_innodb_monitor(): Add output parameters trx_start and trx_end. innobase/srv/srv0srv.c: srv_printf_innodb_monitor(): Add output parameters trx_start and trx_end. sql/ha_innodb.cc: innodb_show_status(): Truncate oversized output at the beginning of the list of active transactions, if possible.
Diffstat (limited to 'innobase/srv')
-rw-r--r--innobase/srv/srv0srv.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c
index a60e9e5a5f7..e56389a8541 100644
--- a/innobase/srv/srv0srv.c
+++ b/innobase/srv/srv0srv.c
@@ -1470,7 +1470,11 @@ Outputs to a file the output of the InnoDB Monitor. */
void
srv_printf_innodb_monitor(
/*======================*/
- FILE* file) /* in: output stream */
+ FILE* file, /* in: output stream */
+ ulint* trx_start, /* out: file position of the start of
+ the list of active transactions */
+ ulint* trx_end) /* out: file position of the end of
+ the list of active transactions */
{
double time_elapsed;
time_t current_time;
@@ -1519,7 +1523,24 @@ srv_printf_innodb_monitor(
mutex_exit(&dict_foreign_err_mutex);
- lock_print_info(file);
+ 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);
@@ -1672,13 +1693,13 @@ loop:
last_monitor_time = time(NULL);
if (srv_print_innodb_monitor) {
- srv_printf_innodb_monitor(stderr);
+ srv_printf_innodb_monitor(stderr, NULL, NULL);
}
if (srv_innodb_status) {
mutex_enter(&srv_monitor_file_mutex);
rewind(srv_monitor_file);
- srv_printf_innodb_monitor(srv_monitor_file);
+ srv_printf_innodb_monitor(srv_monitor_file, NULL, NULL);
os_file_set_eof(srv_monitor_file);
mutex_exit(&srv_monitor_file_mutex);
}