]> git.pld-linux.org Git - packages/mysql.git/blame - mysql-innodb_extra_rseg.patch
- expire-logs-days sample
[packages/mysql.git] / mysql-innodb_extra_rseg.patch
CommitLineData
89b96684
ER
1diff -r 85e7025cf2d1 innobase/include/srv0srv.h
2--- a/innobase/include/srv0srv.h Fri Jul 03 15:41:41 2009 -0700
3+++ b/innobase/include/srv0srv.h Fri Jul 03 15:41:47 2009 -0700
4@@ -146,6 +146,8 @@
5 extern ulint srv_enable_unsafe_group_commit;
389e9b46 6 extern uint srv_read_ahead;
89b96684 7 extern uint srv_adaptive_checkpoint;
389e9b46 8+
89b96684
ER
9+extern ulint srv_extra_rsegments;
10
389e9b46 11 extern ulint srv_dict_size_limit;
12
89b96684
ER
13diff -r 85e7025cf2d1 innobase/include/trx0sys.h
14--- a/innobase/include/trx0sys.h Fri Jul 03 15:41:41 2009 -0700
15+++ b/innobase/include/trx0sys.h Fri Jul 03 15:41:47 2009 -0700
389e9b46 16@@ -105,6 +105,13 @@
17 void
18 trx_sys_create(void);
19 /*================*/
20+/*********************************************************************
21+Create extra rollback segments when create_new_db */
22+
23+void
24+trx_sys_create_extra_rseg(
25+/*======================*/
26+ ulint num); /* in: number of extra user rollback segments */
27 /********************************************************************
28 Looks for a free slot for a rollback segment in the trx system file copy. */
29
89b96684
ER
30diff -r 85e7025cf2d1 innobase/srv/srv0srv.c
31--- a/innobase/srv/srv0srv.c Fri Jul 03 15:41:41 2009 -0700
32+++ b/innobase/srv/srv0srv.c Fri Jul 03 15:41:47 2009 -0700
33@@ -352,6 +352,8 @@
389e9b46 34
89b96684
ER
35 uint srv_read_ahead = 3; /* 1: random 2: linear 3: Both */
36 uint srv_adaptive_checkpoint = 0; /* 0: none 1: reflex 2: estimate */
389e9b46 37+
89b96684
ER
38+ulint srv_extra_rsegments = 0; /* extra rseg for users */
39
389e9b46 40 ulint srv_dict_size_limit = 0;
41
89b96684
ER
42diff -r 85e7025cf2d1 innobase/srv/srv0start.c
43--- a/innobase/srv/srv0start.c Fri Jul 03 15:41:41 2009 -0700
44+++ b/innobase/srv/srv0start.c Fri Jul 03 15:41:47 2009 -0700
389e9b46 45@@ -1418,6 +1418,8 @@
46 dict_create();
47 srv_startup_is_before_trx_rollback_phase = FALSE;
48
49+ if (srv_extra_rsegments)
50+ trx_sys_create_extra_rseg(srv_extra_rsegments);
51 #ifdef UNIV_LOG_ARCHIVE
52 } else if (srv_archive_recovery) {
53 fprintf(stderr,
89b96684
ER
54diff -r 85e7025cf2d1 innobase/trx/trx0sys.c
55--- a/innobase/trx/trx0sys.c Fri Jul 03 15:41:41 2009 -0700
56+++ b/innobase/trx/trx0sys.c Fri Jul 03 15:41:47 2009 -0700
389e9b46 57@@ -944,3 +944,28 @@
58
59 trx_sys_init_at_db_start();
60 }
61+
62+/*********************************************************************
63+Create extra rollback segments when create_new_db */
64+
65+void
66+trx_sys_create_extra_rseg(
67+/*======================*/
68+ ulint num) /* in: number of extra user rollback segments */
69+{
70+ mtr_t mtr;
71+ ulint slot_no;
72+ ulint i;
73+
74+ /* Craete extra rollback segments */
75+ mtr_start(&mtr);
76+ for (i = 1; i < num + 1; i++) {
77+ if(!trx_rseg_create(TRX_SYS_SPACE, ULINT_MAX, &slot_no, &mtr)) {
78+ fprintf(stderr,
79+"InnoDB: Warning: Failed to create extra rollback segments.\n");
80+ break;
81+ }
82+ ut_a(slot_no == i);
83+ }
84+ mtr_commit(&mtr);
85+}
89b96684
ER
86diff -r 85e7025cf2d1 patch_info/innodb_extra_rseg.info
87--- /dev/null Thu Jan 01 00:00:00 1970 +0000
88+++ b/patch_info/innodb_extra_rseg.info Fri Jul 03 15:41:47 2009 -0700
389e9b46 89@@ -0,0 +1,6 @@
90+File=innodb_extra_rseg.patch
91+Name=allow to create extra rollback segments
92+Version=1.0
93+Author=Percona <info@percona.com>
94+License=GPL
95+Comment
89b96684
ER
96diff -r 85e7025cf2d1 sql/ha_innodb.cc
97--- a/sql/ha_innodb.cc Fri Jul 03 15:41:41 2009 -0700
98+++ b/sql/ha_innodb.cc Fri Jul 03 15:41:47 2009 -0700
389e9b46 99@@ -152,6 +152,7 @@
100 innobase_open_files;
101
102 long innobase_read_io_threads, innobase_write_io_threads;
103+long innobase_extra_rsegments;
104 longlong innobase_buffer_pool_size, innobase_log_file_size;
105
106 /* The default values for the following char* start-up parameters
89b96684 107@@ -1521,6 +1522,8 @@
389e9b46 108 srv_n_read_io_threads = (ulint) innobase_read_io_threads;
109 srv_n_write_io_threads = (ulint) innobase_write_io_threads;
110
111+ srv_extra_rsegments = (ulint) innobase_extra_rsegments;
112+
113 srv_lock_wait_timeout = (ulint) innobase_lock_wait_timeout;
114 srv_force_recovery = (ulint) innobase_force_recovery;
115
89b96684
ER
116diff -r 85e7025cf2d1 sql/ha_innodb.h
117--- a/sql/ha_innodb.h Fri Jul 03 15:41:41 2009 -0700
118+++ b/sql/ha_innodb.h Fri Jul 03 15:41:47 2009 -0700
389e9b46 119@@ -205,6 +205,7 @@
120 extern long innobase_buffer_pool_awe_mem_mb;
121 extern long innobase_file_io_threads, innobase_lock_wait_timeout;
122 extern long innobase_read_io_threads, innobase_write_io_threads;
123+extern long innobase_extra_rsegments;
124 extern long innobase_force_recovery;
125 extern long innobase_open_files;
126 extern char *innobase_data_home_dir, *innobase_data_file_path;
89b96684
ER
127diff -r 85e7025cf2d1 sql/mysqld.cc
128--- a/sql/mysqld.cc Fri Jul 03 15:41:41 2009 -0700
129+++ b/sql/mysqld.cc Fri Jul 03 15:41:47 2009 -0700
130@@ -5101,6 +5101,7 @@
389e9b46 131 OPT_INNODB_ADAPTIVE_CHECKPOINT,
132 OPT_INNODB_READ_IO_THREADS,
133 OPT_INNODB_WRITE_IO_THREADS,
134+ OPT_INNODB_EXTRA_RSEGMENTS,
135 OPT_INNODB_DICT_SIZE_LIMIT,
136 OPT_INNODB_ADAPTIVE_HASH_INDEX,
89b96684
ER
137 OPT_FEDERATED,
138@@ -5465,6 +5466,10 @@
389e9b46 139 "Number of background write I/O threads in InnoDB.",
140 (gptr*) &innobase_write_io_threads, (gptr*) &innobase_write_io_threads,
89b96684 141 0, GET_LONG, REQUIRED_ARG, 8, 1, 64, 0, 0, 0},
389e9b46 142+ {"innodb_extra_rsegments", OPT_INNODB_EXTRA_RSEGMENTS,
143+ "Number of extra user rollback segments when create new database.",
144+ (gptr*) &innobase_extra_rsegments, (gptr*) &innobase_extra_rsegments,
145+ 0, GET_LONG, REQUIRED_ARG, 0, 0, 127, 0, 0, 0},
146 {"innodb_dict_size_limit", OPT_INNODB_DICT_SIZE_LIMIT,
147 "Limit the allocated memory for dictionary cache. (0: unlimited)",
148 (gptr*) &srv_dict_size_limit, (gptr*) &srv_dict_size_limit, 0,
89b96684
ER
149diff -r 85e7025cf2d1 sql/set_var.cc
150--- a/sql/set_var.cc Fri Jul 03 15:41:41 2009 -0700
151+++ b/sql/set_var.cc Fri Jul 03 15:41:47 2009 -0700
152@@ -1087,6 +1087,7 @@
389e9b46 153 {sys_innodb_adaptive_checkpoint.name, (char*) &sys_innodb_adaptive_checkpoint, SHOW_SYS},
154 {"innodb_read_io_threads", (char*) &innobase_read_io_threads, SHOW_LONG},
155 {"innodb_write_io_threads", (char*) &innobase_write_io_threads, SHOW_LONG},
156+ {"innodb_extra_rsegments", (char*) &innobase_extra_rsegments, SHOW_LONG},
157 {sys_innodb_dict_size_limit.name, (char*) &sys_innodb_dict_size_limit, SHOW_SYS},
158 {sys_innodb_io_pattern_trace.name, (char*) &sys_innodb_io_pattern_trace, SHOW_SYS},
159 {sys_innodb_io_pattern_trace_running.name, (char*) &sys_innodb_io_pattern_trace_running, SHOW_SYS},
89b96684
ER
160diff -r 85e7025cf2d1 sql/sql_show.cc
161--- a/sql/sql_show.cc Fri Jul 03 15:41:41 2009 -0700
162+++ b/sql/sql_show.cc Fri Jul 03 15:41:47 2009 -0700
389e9b46 163@@ -39,6 +39,8 @@
164 #include "srv0srv.h"
165 #include "buf0buf.h"
166 #include "dict0dict.h"
167+#include "trx0rseg.h" /* for trx_rseg_struct */
168+#include "trx0sys.h" /* for trx_sys */
169 }
170 /* We need to undef it in InnoDB */
171 #undef byte
89b96684 172@@ -4180,6 +4182,45 @@
389e9b46 173 DBUG_RETURN(returnable);
174 }
175
176+int
177+innodb_rseg_fill(
178+/*=================*/
179+ THD* thd, /* in: thread */
180+ TABLE_LIST* tables, /* in/out: tables to fill */
181+ COND* cond) /* in: condition (ignored) */
182+{
183+ TABLE* table = (TABLE *) tables->table;
184+ int status = 0;
185+ trx_rseg_t* rseg;
186+
187+ DBUG_ENTER("innodb_rseg_fill");
188+
189+ /* deny access to non-superusers */
190+ if (check_global_access(thd, PROCESS_ACL)) {
191+
192+ DBUG_RETURN(0);
193+ }
194+
195+ rseg = UT_LIST_GET_FIRST(trx_sys->rseg_list);
196+
197+ while (rseg) {
198+ table->field[0]->store(rseg->id);
199+ table->field[1]->store(rseg->space);
200+ table->field[2]->store(rseg->page_no);
201+ table->field[3]->store(rseg->max_size);
202+ table->field[4]->store(rseg->curr_size);
203+
204+ if (schema_table_store_record(thd, table)) {
205+ status = 1;
206+ break;
207+ }
208+
209+ rseg = UT_LIST_GET_NEXT(rseg_list, rseg);
210+ }
211+
212+ DBUG_RETURN(status);
213+}
214+
215 /*
216 Find schema_tables elment by name
217
89b96684
ER
218@@ -4996,6 +5037,16 @@
219 {"INDEX_NAME", 32, MYSQL_TYPE_STRING, 0, 0, "index name"},
220 {"N_READ", 11, MYSQL_TYPE_LONG, 0, 0, "read ios"},
389e9b46 221 {"N_WRITE", 11, MYSQL_TYPE_LONG, 0, 0, "write ios"},
89b96684
ER
222+ {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
223+};
389e9b46 224+
225+ST_FIELD_INFO innodb_rseg_fields_info[]=
226+{
227+ {"RSEG_ID", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 0, ""},
228+ {"SPACE_ID", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 0, ""},
229+ {"PAGE_NO", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 0, ""},
230+ {"MAX_SIZE", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 0, ""},
231+ {"CURR_SIZE", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 0, ""},
89b96684
ER
232 {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
233 };
389e9b46 234 #endif
89b96684 235@@ -5177,6 +5228,8 @@
389e9b46 236 #ifdef HAVE_INNOBASE_DB
237 {"INNODB_IO_PATTERN", innodb_io_pattern_field_info, create_schema_table,
238 innodb_io_pattern_fill_table, 0, 0, -1, -1, 0},
239+ {"INNODB_RSEG", innodb_rseg_fields_info, create_schema_table,
240+ innodb_rseg_fill, 0, 0, -1, -1, 0},
241 #endif
242 {0, 0, 0, 0, 0, 0, 0, 0, 0}
243 };
This page took 0.054342 seconds and 4 git commands to generate.