#At file:///home/mikael/mysql_clones/mysql-trunk-multiple_rollback_segments/
2888 Mikael Ronstrom 2009-09-23
WL#4948 Multiple rollback segments in InnoDB
modified:
storage/innobase/include/trx0rseg.h
storage/innobase/include/trx0sys.h
storage/innobase/srv/srv0start.c
storage/innobase/trx/trx0rseg.c
=== modified file 'storage/innobase/include/trx0rseg.h'
--- a/storage/innobase/include/trx0rseg.h 2009-05-27 09:45:59 +0000
+++ b/storage/innobase/include/trx0rseg.h 2009-09-23 15:29:35 +0000
@@ -30,6 +30,11 @@ Created 3/26/1996 Heikki Tuuri
#include "trx0types.h"
#include "trx0sys.h"
+/**********************************************************************
+Add more rollback segments at startup. */
+void
+trx_rseg_add_more(void);
+
/******************************************************************//**
Gets a rollback segment header.
@return rollback segment header, page x-latched */
=== modified file 'storage/innobase/include/trx0sys.h'
--- a/storage/innobase/include/trx0sys.h 2009-07-30 12:42:56 +0000
+++ b/storage/innobase/include/trx0sys.h 2009-09-23 15:29:35 +0000
@@ -457,11 +457,12 @@ trx_sys_file_format_id_to_name(
slots */
/*------------------------------------------------------------- @} */
-/** Maximum number of rollback segments: the number of segment
+/** Number of rollback segments: the number of segment
specification slots in the transaction system array; rollback segment
id must fit in one byte, therefore 256; each slot is currently 8 bytes
in size */
#define TRX_SYS_N_RSEGS 256
+#define TRX_SYS_N_RSEGS_USED 8
/** Maximum length of MySQL binlog file name, in bytes.
@see trx_sys_mysql_master_log_name
=== modified file 'storage/innobase/srv/srv0start.c'
--- a/storage/innobase/srv/srv0start.c 2009-07-30 12:42:56 +0000
+++ b/storage/innobase/srv/srv0start.c 2009-09-23 15:29:35 +0000
@@ -1533,6 +1533,7 @@ innobase_start_or_create_for_mysql(void)
dict_create();
srv_startup_is_before_trx_rollback_phase = FALSE;
+ trx_rseg_add_more();
#ifdef UNIV_LOG_ARCHIVE
} else if (srv_archive_recovery) {
fprintf(stderr,
=== modified file 'storage/innobase/trx/trx0rseg.c'
--- a/storage/innobase/trx/trx0rseg.c 2009-05-27 09:45:59 +0000
+++ b/storage/innobase/trx/trx0rseg.c 2009-09-23 15:29:35 +0000
@@ -218,6 +218,7 @@ trx_rseg_list_and_array_init(
mtr_t* mtr) /*!< in: mtr */
{
ulint i;
+ ulint rseg_id;
ulint page_no;
ulint space;
@@ -244,6 +245,29 @@ trx_rseg_list_and_array_init(
}
}
+/********************************************************************
+Adds more rollback segment to the database as part of startup. */
+UNIV_INTERN
+void
+trx_rseg_add_more()
+{
+ ulint i;
+ ulint rseg_id;
+ mtr_t mtr;
+
+ mtr_start(&mtr);
+ for (i = 1; i < TRX_SYS_N_RSEGS_USED; i++) {
+ if (!trx_rseg_create(TRX_SYS_SPACE, ULINT_MAX, &rseg_id,
+ &mtr)) {
+ fprintf(stderr,
+ "Couldn't create rollback segments.\n");
+ ut_a(0);
+ }
+ ut_a(rseg_id == i);
+ }
+ mtr_commit(&mtr);
+}
+
/****************************************************************//**
Creates a new rollback segment to the database.
@return the created segment object, NULL if fail */
| Thread |
|---|
| • bzr commit into mysql-5.4.3-trunk branch (mikael:2888) WL#4948 | Mikael Ronstrom | 23 Sep |