]> git.pld-linux.org Git - packages/mysql.git/blob - mysql-innodb_extra_rseg.patch
- up to 5.0.88
[packages/mysql.git] / mysql-innodb_extra_rseg.patch
1 diff -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;
6  extern uint    srv_read_ahead;
7  extern uint    srv_adaptive_checkpoint;
8 +
9 +extern ulint   srv_extra_rsegments;
10  
11  extern ulint   srv_dict_size_limit;
12  
13 diff -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
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  
30 diff -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 @@
34  
35  uint   srv_read_ahead = 3; /* 1: random  2: linear  3: Both */
36  uint   srv_adaptive_checkpoint = 0; /* 0: none  1: reflex  2: estimate */
37 +
38 +ulint  srv_extra_rsegments = 0; /* extra rseg for users */
39  
40  ulint  srv_dict_size_limit = 0;
41  
42 diff -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
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,
54 diff -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
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 +}
86 diff -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
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
96 diff -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
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
107 @@ -1521,6 +1522,8 @@
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  
116 diff -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
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;
127 diff -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 @@
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,
137    OPT_FEDERATED,
138 @@ -5465,6 +5466,10 @@
139     "Number of background write I/O threads in InnoDB.",
140     (gptr*) &innobase_write_io_threads, (gptr*) &innobase_write_io_threads,
141     0, GET_LONG, REQUIRED_ARG, 8, 1, 64, 0, 0, 0},
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,
149 diff -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 @@
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},
160 diff -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
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
172 @@ -4180,6 +4182,45 @@
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  
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"},
221    {"N_WRITE", 11, MYSQL_TYPE_LONG, 0, 0, "write ios"},
222 +  {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
223 +};
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, ""},
232    {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
233  };
234  #endif
235 @@ -5177,6 +5228,8 @@
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.046258 seconds and 3 git commands to generate.