2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1 |
# name : innodb_io_patches.patch |
2 |
# introduced : 11 or before |
|
3 |
# maintainer : Yasufumi |
|
4 |
# |
|
5 |
#!!! notice !!! |
|
6 |
# Any small change to this file in the main branch |
|
7 |
# should be done or reviewed by the maintainer! |
|
8 |
diff -ruN a/storage/innobase/buf/buf0buf.c b/storage/innobase/buf/buf0buf.c
|
|
9 |
--- a/storage/innobase/buf/buf0buf.c 2010-12-03 15:09:51.273986410 +0900
|
|
10 |
+++ b/storage/innobase/buf/buf0buf.c 2010-12-03 15:10:08.934990091 +0900
|
|
11 |
@@ -320,6 +320,7 @@
|
|
12 |
||
13 |
/* When we traverse all the flush lists we don't want another |
|
14 |
thread to add a dirty page to any flush list. */ |
|
15 |
+ if (srv_buf_pool_instances > 1)
|
|
16 |
log_flush_order_mutex_enter(); |
|
17 |
||
18 |
for (i = 0; i < srv_buf_pool_instances; i++) { |
|
19 |
@@ -343,6 +344,7 @@
|
|
20 |
} |
|
21 |
} |
|
22 |
||
23 |
+ if (srv_buf_pool_instances > 1)
|
|
24 |
log_flush_order_mutex_exit(); |
|
25 |
||
26 |
/* The returned answer may be out of date: the flush_list can |
|
27 |
diff -ruN a/storage/innobase/buf/buf0flu.c b/storage/innobase/buf/buf0flu.c
|
|
28 |
--- a/storage/innobase/buf/buf0flu.c 2010-11-03 07:01:13.000000000 +0900
|
|
29 |
+++ b/storage/innobase/buf/buf0flu.c 2010-12-03 15:10:08.934990091 +0900
|
|
72
by kinoyasu
port Yasufumi patches to 5.5.9 |
30 |
@@ -1376,7 +1376,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
31 |
|
32 |
ut_ad(flush_type == BUF_FLUSH_LRU || flush_type == BUF_FLUSH_LIST); |
|
33 |
||
34 |
- if (UT_LIST_GET_LEN(buf_pool->LRU) < BUF_LRU_OLD_MIN_LEN) {
|
|
35 |
+ if (UT_LIST_GET_LEN(buf_pool->LRU) < BUF_LRU_OLD_MIN_LEN || !srv_flush_neighbor_pages) {
|
|
36 |
/* If there is little space, it is better not to flush |
|
37 |
any block except from the end of the LRU list */ |
|
38 |
||
39 |
diff -ruN a/storage/innobase/buf/buf0rea.c b/storage/innobase/buf/buf0rea.c
|
|
40 |
--- a/storage/innobase/buf/buf0rea.c 2010-11-03 07:01:13.000000000 +0900
|
|
41 |
+++ b/storage/innobase/buf/buf0rea.c 2010-12-03 15:10:08.937050537 +0900
|
|
42 |
@@ -260,6 +260,10 @@
|
|
43 |
= BUF_READ_AHEAD_LINEAR_AREA(buf_pool); |
|
44 |
ulint threshold; |
|
45 |
||
46 |
+ if (!(srv_read_ahead & 2)) {
|
|
47 |
+ return(0);
|
|
48 |
+ }
|
|
49 |
+
|
|
50 |
if (UNIV_UNLIKELY(srv_startup_is_before_trx_rollback_phase)) { |
|
51 |
/* No read-ahead to avoid thread deadlocks */ |
|
52 |
return(0); |
|
53 |
diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
|
|
54 |
--- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:09:51.283956391 +0900
|
|
55 |
+++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:10:08.963980444 +0900
|
|
109
by kinoyasu
port Yasufumi patches to 5.5.12 |
56 |
@@ -444,6 +444,12 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
57 |
"Timeout in seconds an InnoDB transaction may wait for a lock before being rolled back. Values above 100000000 disable the timeout.", |
58 |
NULL, NULL, 50, 1, 1024 * 1024 * 1024, 0); |
|
59 |
||
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
60 |
+static MYSQL_THDVAR_ULONG(flush_log_at_trx_commit, PLUGIN_VAR_OPCMDARG,
|
61 |
+ "Set to 0 (write and flush once per second),"
|
|
62 |
+ " 1 (write and flush at each commit)"
|
|
63 |
+ " or 2 (write at commit, flush once per second).",
|
|
64 |
+ NULL, NULL, 1, 0, 2, 0);
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
65 |
+
|
66 |
||
67 |
static handler *innobase_create_handler(handlerton *hton, |
|
68 |
TABLE_SHARE *table, |
|
109
by kinoyasu
port Yasufumi patches to 5.5.12 |
69 |
@@ -838,6 +844,17 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
70 |
} |
71 |
} |
|
72 |
||
73 |
+/******************************************************************//**
|
|
74 |
+*/
|
|
75 |
+extern "C" UNIV_INTERN
|
|
76 |
+ulong
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
77 |
+thd_flush_log_at_trx_commit(
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
78 |
+/*================================*/
|
79 |
+ void* thd)
|
|
80 |
+{
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
81 |
+ return(THDVAR((THD*) thd, flush_log_at_trx_commit));
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
82 |
+}
|
83 |
+
|
|
84 |
/********************************************************************//** |
|
85 |
Obtain the InnoDB transaction of a MySQL thread. |
|
86 |
@return reference to transaction pointer */ |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
87 |
@@ -2437,6 +2454,9 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
88 |
srv_n_read_io_threads = (ulint) innobase_read_io_threads; |
89 |
srv_n_write_io_threads = (ulint) innobase_write_io_threads; |
|
90 |
||
91 |
+ srv_read_ahead &= 3;
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
92 |
+ srv_adaptive_flushing_method %= 3;
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
93 |
+
|
94 |
srv_force_recovery = (ulint) innobase_force_recovery; |
|
95 |
||
96 |
srv_use_doublewrite_buf = (ibool) innobase_use_doublewrite; |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
97 |
@@ -11025,7 +11045,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
98 |
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY, |
95
by Yasufumi Kinoshita
Yasufumi patches are ported to 5.5.11; Note: option innodb_extra_rsegments was removed, because the official equivalent option innodb_rollback_segments has been implemented at this version. |
99 |
"Purge threads can be either 0 or 1.", |
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
100 |
NULL, NULL, |
101 |
- 0, /* Default setting */
|
|
102 |
+ 1, /* Default setting */
|
|
103 |
0, /* Minimum value */ |
|
104 |
1, 0); /* Maximum value */ |
|
105 |
||
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
106 |
@@ -11067,12 +11087,18 @@
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
107 |
innodb_file_format_max_validate, |
108 |
innodb_file_format_max_update, "Antelope"); |
|
109 |
||
110 |
-static MYSQL_SYSVAR_ULONG(flush_log_at_trx_commit, srv_flush_log_at_trx_commit,
|
|
111 |
- PLUGIN_VAR_OPCMDARG,
|
|
112 |
- "Set to 0 (write and flush once per second),"
|
|
113 |
- " 1 (write and flush at each commit)"
|
|
114 |
- " or 2 (write at commit, flush once per second).",
|
|
115 |
- NULL, NULL, 1, 0, 2, 0);
|
|
116 |
+/* Changed to the THDVAR */
|
|
117 |
+//static MYSQL_SYSVAR_ULONG(flush_log_at_trx_commit, srv_flush_log_at_trx_commit,
|
|
118 |
+// PLUGIN_VAR_OPCMDARG,
|
|
119 |
+// "Set to 0 (write and flush once per second),"
|
|
120 |
+// " 1 (write and flush at each commit)"
|
|
121 |
+// " or 2 (write at commit, flush once per second).",
|
|
122 |
+// NULL, NULL, 1, 0, 2, 0);
|
|
123 |
+
|
|
124 |
+static MYSQL_SYSVAR_BOOL(use_global_flush_log_at_trx_commit, srv_use_global_flush_log_at_trx_commit,
|
|
125 |
+ PLUGIN_VAR_NOCMDARG,
|
|
126 |
+ "Use global innodb_flush_log_at_trx_commit value. (default: ON).",
|
|
127 |
+ NULL, NULL, TRUE);
|
|
128 |
||
129 |
static MYSQL_SYSVAR_STR(flush_method, innobase_file_flush_method, |
|
130 |
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
131 |
@@ -11167,7 +11193,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
132 |
static MYSQL_SYSVAR_LONGLONG(buffer_pool_size, innobase_buffer_pool_size, |
133 |
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, |
|
134 |
"The size of the memory buffer InnoDB uses to cache data and indexes of its tables.", |
|
135 |
- NULL, NULL, 128*1024*1024L, 5*1024*1024L, LONGLONG_MAX, 1024*1024L);
|
|
136 |
+ NULL, NULL, 128*1024*1024L, 32*1024*1024L, LONGLONG_MAX, 1024*1024L);
|
|
137 |
||
138 |
static MYSQL_SYSVAR_LONG(buffer_pool_instances, innobase_buffer_pool_instances, |
|
139 |
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
140 |
@@ -11319,6 +11345,95 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
141 |
"trigger a readahead.", |
142 |
NULL, NULL, 56, 0, 64, 0); |
|
143 |
||
144 |
+static MYSQL_SYSVAR_LONGLONG(ibuf_max_size, srv_ibuf_max_size,
|
|
145 |
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
|
|
146 |
+ "The maximum size of the insert buffer. (in bytes)",
|
|
147 |
+ NULL, NULL, LONGLONG_MAX, 0, LONGLONG_MAX, 0);
|
|
148 |
+
|
|
149 |
+static MYSQL_SYSVAR_ULONG(ibuf_active_contract, srv_ibuf_active_contract,
|
|
150 |
+ PLUGIN_VAR_RQCMDARG,
|
|
151 |
+ "Enable/Disable active_contract of insert buffer. 0:disable 1:enable",
|
|
152 |
+ NULL, NULL, 1, 0, 1, 0);
|
|
153 |
+
|
|
154 |
+static MYSQL_SYSVAR_ULONG(ibuf_accel_rate, srv_ibuf_accel_rate,
|
|
155 |
+ PLUGIN_VAR_RQCMDARG,
|
|
156 |
+ "Tunes amount of insert buffer processing of background, in addition to innodb_io_capacity. (in percentage)",
|
|
157 |
+ NULL, NULL, 100, 100, 999999999, 0);
|
|
158 |
+
|
|
159 |
+static MYSQL_SYSVAR_ULONG(checkpoint_age_target, srv_checkpoint_age_target,
|
|
160 |
+ PLUGIN_VAR_RQCMDARG,
|
|
161 |
+ "Control soft limit of checkpoint age. (0 : not control)",
|
|
162 |
+ NULL, NULL, 0, 0, ~0UL, 0);
|
|
163 |
+
|
|
164 |
+static MYSQL_SYSVAR_ULONG(flush_neighbor_pages, srv_flush_neighbor_pages,
|
|
165 |
+ PLUGIN_VAR_RQCMDARG,
|
|
166 |
+ "Enable/Disable flushing also neighbor pages. 0:disable 1:enable",
|
|
167 |
+ NULL, NULL, 1, 0, 1, 0);
|
|
168 |
+
|
|
169 |
+static
|
|
170 |
+void
|
|
171 |
+innodb_read_ahead_update(
|
|
172 |
+ THD* thd,
|
|
173 |
+ struct st_mysql_sys_var* var,
|
|
174 |
+ void* var_ptr,
|
|
175 |
+ const void* save)
|
|
176 |
+{
|
|
177 |
+ *(long *)var_ptr= (*(long *)save) & 3;
|
|
178 |
+}
|
|
179 |
+const char *read_ahead_names[]=
|
|
180 |
+{
|
|
181 |
+ "none", /* 0 */
|
|
182 |
+ "random",
|
|
183 |
+ "linear",
|
|
184 |
+ "both", /* 3 */
|
|
185 |
+ /* For compatibility of the older patch */
|
|
186 |
+ "0", /* 4 ("none" + 4) */
|
|
187 |
+ "1",
|
|
188 |
+ "2",
|
|
189 |
+ "3", /* 7 ("both" + 4) */
|
|
190 |
+ NullS
|
|
191 |
+};
|
|
192 |
+TYPELIB read_ahead_typelib=
|
|
193 |
+{
|
|
194 |
+ array_elements(read_ahead_names) - 1, "read_ahead_typelib",
|
|
195 |
+ read_ahead_names, NULL
|
|
196 |
+};
|
|
197 |
+static MYSQL_SYSVAR_ENUM(read_ahead, srv_read_ahead,
|
|
198 |
+ PLUGIN_VAR_RQCMDARG,
|
|
199 |
+ "Control read ahead activity (none, random, [linear], both). [from 1.0.5: random read ahead is ignored]",
|
|
200 |
+ NULL, innodb_read_ahead_update, 2, &read_ahead_typelib);
|
|
201 |
+
|
|
202 |
+static
|
|
203 |
+void
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
204 |
+innodb_adaptive_flushing_method_update(
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
205 |
+ THD* thd,
|
206 |
+ struct st_mysql_sys_var* var,
|
|
207 |
+ void* var_ptr,
|
|
208 |
+ const void* save)
|
|
209 |
+{
|
|
210 |
+ *(long *)var_ptr= (*(long *)save) % 4;
|
|
211 |
+}
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
212 |
+const char *adaptive_flushing_method_names[]=
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
213 |
+{
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
214 |
+ "native", /* 0 */
|
215 |
+ "estimate", /* 1 */
|
|
216 |
+ "keep_average", /* 2 */
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
217 |
+ /* For compatibility of the older patch */
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
218 |
+ "0", /* 3 ("none" + 3) */
|
219 |
+ "1", /* 4 ("estimate" + 3) */
|
|
220 |
+ "2", /* 5 ("keep_average" + 3) */
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
221 |
+ NullS
|
222 |
+};
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
223 |
+TYPELIB adaptive_flushing_method_typelib=
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
224 |
+{
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
225 |
+ array_elements(adaptive_flushing_method_names) - 1, "adaptive_flushing_method_typelib",
|
226 |
+ adaptive_flushing_method_names, NULL
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
227 |
+};
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
228 |
+static MYSQL_SYSVAR_ENUM(adaptive_flushing_method, srv_adaptive_flushing_method,
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
229 |
+ PLUGIN_VAR_RQCMDARG,
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
230 |
+ "Choose method of innodb_adaptive_flushing. (native, [estimate], keep_average)",
|
231 |
+ NULL, innodb_adaptive_flushing_method_update, 1, &adaptive_flushing_method_typelib);
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
232 |
+
|
233 |
static struct st_mysql_sys_var* innobase_system_variables[]= { |
|
234 |
MYSQL_SYSVAR(additional_mem_pool_size), |
|
235 |
MYSQL_SYSVAR(autoextend_increment), |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
236 |
@@ -11339,6 +11454,7 @@
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
237 |
MYSQL_SYSVAR(file_format_check), |
238 |
MYSQL_SYSVAR(file_format_max), |
|
239 |
MYSQL_SYSVAR(flush_log_at_trx_commit), |
|
240 |
+ MYSQL_SYSVAR(use_global_flush_log_at_trx_commit),
|
|
241 |
MYSQL_SYSVAR(flush_method), |
|
242 |
MYSQL_SYSVAR(force_recovery), |
|
243 |
MYSQL_SYSVAR(locks_unsafe_for_binlog), |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
244 |
@@ -11376,6 +11492,13 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
245 |
MYSQL_SYSVAR(show_verbose_locks), |
246 |
MYSQL_SYSVAR(show_locks_held), |
|
247 |
MYSQL_SYSVAR(version), |
|
248 |
+ MYSQL_SYSVAR(ibuf_max_size),
|
|
249 |
+ MYSQL_SYSVAR(ibuf_active_contract),
|
|
250 |
+ MYSQL_SYSVAR(ibuf_accel_rate),
|
|
251 |
+ MYSQL_SYSVAR(checkpoint_age_target),
|
|
252 |
+ MYSQL_SYSVAR(flush_neighbor_pages),
|
|
253 |
+ MYSQL_SYSVAR(read_ahead),
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
254 |
+ MYSQL_SYSVAR(adaptive_flushing_method),
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
255 |
MYSQL_SYSVAR(use_sys_malloc), |
256 |
MYSQL_SYSVAR(use_native_aio), |
|
257 |
MYSQL_SYSVAR(change_buffering), |
|
258 |
diff -ruN a/storage/innobase/ibuf/ibuf0ibuf.c b/storage/innobase/ibuf/ibuf0ibuf.c
|
|
259 |
--- a/storage/innobase/ibuf/ibuf0ibuf.c 2010-11-03 07:01:13.000000000 +0900
|
|
260 |
+++ b/storage/innobase/ibuf/ibuf0ibuf.c 2010-12-03 15:10:09.073984282 +0900
|
|
109
by kinoyasu
port Yasufumi patches to 5.5.12 |
261 |
@@ -514,8 +514,10 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
262 |
grow in size, as the references on the upper levels of the tree can |
263 |
change */ |
|
264 |
||
265 |
- ibuf->max_size = buf_pool_get_curr_size() / UNIV_PAGE_SIZE
|
|
266 |
- / IBUF_POOL_SIZE_PER_MAX_SIZE;
|
|
267 |
+ ibuf->max_size = ut_min( buf_pool_get_curr_size() / UNIV_PAGE_SIZE
|
|
268 |
+ / IBUF_POOL_SIZE_PER_MAX_SIZE, (ulint) srv_ibuf_max_size / UNIV_PAGE_SIZE);
|
|
269 |
+
|
|
270 |
+ srv_ibuf_max_size = (long long) ibuf->max_size * UNIV_PAGE_SIZE;
|
|
271 |
||
272 |
mutex_create(ibuf_pessimistic_insert_mutex_key, |
|
273 |
&ibuf_pessimistic_insert_mutex, |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
274 |
@@ -2753,9 +2755,11 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
275 |
size = ibuf->size; |
276 |
max_size = ibuf->max_size; |
|
277 |
||
278 |
+ if (!srv_ibuf_active_contract) {
|
|
279 |
if (size < max_size + IBUF_CONTRACT_ON_INSERT_NON_SYNC) { |
|
280 |
return; |
|
281 |
} |
|
282 |
+ }
|
|
283 |
||
284 |
sync = (size >= max_size + IBUF_CONTRACT_ON_INSERT_SYNC); |
|
285 |
||
286 |
diff -ruN a/storage/innobase/include/buf0rea.h b/storage/innobase/include/buf0rea.h
|
|
287 |
--- a/storage/innobase/include/buf0rea.h 2010-11-03 07:01:13.000000000 +0900
|
|
288 |
+++ b/storage/innobase/include/buf0rea.h 2010-12-03 15:10:09.076066335 +0900
|
|
289 |
@@ -124,8 +124,7 @@
|
|
290 |
||
291 |
/** The size in pages of the area which the read-ahead algorithms read if |
|
292 |
invoked */ |
|
293 |
-#define BUF_READ_AHEAD_AREA(b) \
|
|
294 |
- ut_min(64, ut_2_power_up((b)->curr_size / 32))
|
|
295 |
+#define BUF_READ_AHEAD_AREA(b) 64
|
|
296 |
||
297 |
/** @name Modes used in read-ahead @{ */ |
|
298 |
/** read only pages belonging to the insert buffer tree */ |
|
299 |
diff -ruN a/storage/innobase/include/ha_prototypes.h b/storage/innobase/include/ha_prototypes.h
|
|
300 |
--- a/storage/innobase/include/ha_prototypes.h 2010-11-03 07:01:13.000000000 +0900
|
|
301 |
+++ b/storage/innobase/include/ha_prototypes.h 2010-12-03 15:10:09.078026360 +0900
|
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
302 |
@@ -284,6 +284,13 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
303 |
/*===================*/ |
304 |
void* thd, /*!< in: thread handle (THD*) */ |
|
305 |
ulint value); /*!< in: time waited for the lock */ |
|
306 |
+/******************************************************************//**
|
|
307 |
+*/
|
|
308 |
+
|
|
309 |
+ulong
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
310 |
+thd_flush_log_at_trx_commit(
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
311 |
+/*================================*/
|
312 |
+ void* thd);
|
|
313 |
||
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
314 |
/**********************************************************************//** |
315 |
Get the current setting of the lower_case_table_names global parameter from |
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
316 |
diff -ruN a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h
|
317 |
--- a/storage/innobase/include/srv0srv.h 2010-12-03 15:09:51.291955835 +0900
|
|
318 |
+++ b/storage/innobase/include/srv0srv.h 2010-12-03 15:10:09.079029047 +0900
|
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
319 |
@@ -138,7 +138,8 @@
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
320 |
extern ulint srv_n_log_files; |
321 |
extern ulint srv_log_file_size; |
|
322 |
extern ulint srv_log_buffer_size; |
|
323 |
-extern ulong srv_flush_log_at_trx_commit;
|
|
324 |
+//extern ulong srv_flush_log_at_trx_commit;
|
|
325 |
+extern char srv_use_global_flush_log_at_trx_commit;
|
|
326 |
extern char srv_adaptive_flushing; |
|
327 |
||
328 |
||
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
329 |
@@ -216,6 +217,16 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
330 |
extern ulong srv_max_purge_lag; |
331 |
||
332 |
extern ulong srv_replication_delay; |
|
333 |
+
|
|
334 |
+extern long long srv_ibuf_max_size;
|
|
335 |
+extern ulint srv_ibuf_active_contract;
|
|
336 |
+extern ulint srv_ibuf_accel_rate;
|
|
337 |
+extern ulint srv_checkpoint_age_target;
|
|
338 |
+extern ulint srv_flush_neighbor_pages;
|
|
339 |
+extern ulint srv_enable_unsafe_group_commit;
|
|
340 |
+extern ulint srv_read_ahead;
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
341 |
+extern ulint srv_adaptive_flushing_method;
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
342 |
+
|
343 |
/*-------------------------------------------*/ |
|
344 |
||
345 |
extern ulint srv_n_rows_inserted; |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
346 |
@@ -394,8 +405,9 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
347 |
when writing data files, but do flush |
348 |
after writing to log files */ |
|
349 |
SRV_UNIX_NOSYNC, /*!< do not flush after writing */ |
|
350 |
- SRV_UNIX_O_DIRECT /*!< invoke os_file_set_nocache() on
|
|
351 |
+ SRV_UNIX_O_DIRECT, /*!< invoke os_file_set_nocache() on
|
|
352 |
data files */ |
|
353 |
+ SRV_UNIX_ALL_O_DIRECT /* new method for examination: logfile also open O_DIRECT */
|
|
354 |
}; |
|
355 |
||
356 |
/** Alternatives for file i/o in Windows */ |
|
357 |
diff -ruN a/storage/innobase/log/log0log.c b/storage/innobase/log/log0log.c
|
|
358 |
--- a/storage/innobase/log/log0log.c 2010-11-03 07:01:13.000000000 +0900
|
|
359 |
+++ b/storage/innobase/log/log0log.c 2010-12-03 15:10:09.084023562 +0900
|
|
65
by Yasufumi Kinoshita
eliminate warnings/build problems from XtraDB |
360 |
@@ -48,6 +48,7 @@
|
361 |
#include "srv0start.h" |
|
362 |
#include "trx0sys.h" |
|
363 |
#include "trx0trx.h" |
|
364 |
+#include "ha_prototypes.h"
|
|
365 |
||
366 |
/* |
|
367 |
General philosophy of InnoDB redo-logs: |
|
368 |
@@ -359,6 +360,33 @@
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
369 |
} |
370 |
||
371 |
/************************************************************//** |
|
372 |
+*/
|
|
373 |
+UNIV_INLINE
|
|
374 |
+ulint
|
|
375 |
+log_max_modified_age_async()
|
|
376 |
+{
|
|
377 |
+ if (srv_checkpoint_age_target) {
|
|
378 |
+ return(ut_min(log_sys->max_modified_age_async,
|
|
379 |
+ srv_checkpoint_age_target
|
|
380 |
+ - srv_checkpoint_age_target / 8));
|
|
381 |
+ } else {
|
|
382 |
+ return(log_sys->max_modified_age_async);
|
|
383 |
+ }
|
|
384 |
+}
|
|
385 |
+
|
|
386 |
+UNIV_INLINE
|
|
387 |
+ulint
|
|
388 |
+log_max_checkpoint_age_async()
|
|
389 |
+{
|
|
390 |
+ if (srv_checkpoint_age_target) {
|
|
391 |
+ return(ut_min(log_sys->max_checkpoint_age_async,
|
|
392 |
+ srv_checkpoint_age_target));
|
|
393 |
+ } else {
|
|
394 |
+ return(log_sys->max_checkpoint_age_async);
|
|
395 |
+ }
|
|
396 |
+}
|
|
397 |
+
|
|
398 |
+/************************************************************//**
|
|
399 |
Closes the log. |
|
400 |
@return lsn */ |
|
401 |
UNIV_INTERN |
|
65
by Yasufumi Kinoshita
eliminate warnings/build problems from XtraDB |
402 |
@@ -427,7 +455,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
403 |
} |
404 |
} |
|
405 |
||
406 |
- if (checkpoint_age <= log->max_modified_age_async) {
|
|
407 |
+ if (checkpoint_age <= log_max_modified_age_async()) {
|
|
408 |
||
409 |
goto function_exit; |
|
410 |
} |
|
65
by Yasufumi Kinoshita
eliminate warnings/build problems from XtraDB |
411 |
@@ -435,8 +463,8 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
412 |
oldest_lsn = buf_pool_get_oldest_modification(); |
413 |
||
414 |
if (!oldest_lsn |
|
415 |
- || lsn - oldest_lsn > log->max_modified_age_async
|
|
416 |
- || checkpoint_age > log->max_checkpoint_age_async) {
|
|
417 |
+ || lsn - oldest_lsn > log_max_modified_age_async()
|
|
418 |
+ || checkpoint_age > log_max_checkpoint_age_async()) {
|
|
419 |
||
420 |
log->check_flush_or_checkpoint = TRUE; |
|
421 |
} |
|
65
by Yasufumi Kinoshita
eliminate warnings/build problems from XtraDB |
422 |
@@ -1100,6 +1128,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
423 |
group = (log_group_t*)((ulint)group - 1); |
424 |
||
425 |
if (srv_unix_file_flush_method != SRV_UNIX_O_DSYNC |
|
426 |
+ && srv_unix_file_flush_method != SRV_UNIX_ALL_O_DIRECT
|
|
427 |
&& srv_unix_file_flush_method != SRV_UNIX_NOSYNC) { |
|
428 |
||
429 |
fil_flush(group->space_id); |
|
65
by Yasufumi Kinoshita
eliminate warnings/build problems from XtraDB |
430 |
@@ -1121,8 +1150,9 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
431 |
logs and cannot end up here! */ |
432 |
||
433 |
if (srv_unix_file_flush_method != SRV_UNIX_O_DSYNC |
|
434 |
+ && srv_unix_file_flush_method != SRV_UNIX_ALL_O_DIRECT
|
|
435 |
&& srv_unix_file_flush_method != SRV_UNIX_NOSYNC |
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
436 |
- && srv_flush_log_at_trx_commit != 2) {
|
437 |
+ && thd_flush_log_at_trx_commit(NULL) != 2) {
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
438 |
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
439 |
fil_flush(group->space_id); |
440 |
} |
|
65
by Yasufumi Kinoshita
eliminate warnings/build problems from XtraDB |
441 |
@@ -1501,7 +1531,8 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
442 |
|
443 |
mutex_exit(&(log_sys->mutex)); |
|
444 |
||
445 |
- if (srv_unix_file_flush_method == SRV_UNIX_O_DSYNC) {
|
|
446 |
+ if (srv_unix_file_flush_method == SRV_UNIX_O_DSYNC
|
|
447 |
+ || srv_unix_file_flush_method == SRV_UNIX_ALL_O_DIRECT) {
|
|
448 |
/* O_DSYNC means the OS did not buffer the log file at all: |
|
449 |
so we have also flushed to disk what we have written */ |
|
450 |
||
65
by Yasufumi Kinoshita
eliminate warnings/build problems from XtraDB |
451 |
@@ -2120,10 +2151,10 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
452 |
|
453 |
sync = TRUE; |
|
454 |
advance = 2 * (age - log->max_modified_age_sync); |
|
455 |
- } else if (age > log->max_modified_age_async) {
|
|
456 |
+ } else if (age > log_max_modified_age_async()) {
|
|
457 |
||
458 |
/* A flush is not urgent: we do an asynchronous preflush */ |
|
459 |
- advance = age - log->max_modified_age_async;
|
|
460 |
+ advance = age - log_max_modified_age_async();
|
|
461 |
} else { |
|
462 |
advance = 0; |
|
463 |
} |
|
65
by Yasufumi Kinoshita
eliminate warnings/build problems from XtraDB |
464 |
@@ -2137,7 +2168,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
465 |
|
466 |
do_checkpoint = TRUE; |
|
467 |
||
468 |
- } else if (checkpoint_age > log->max_checkpoint_age_async) {
|
|
469 |
+ } else if (checkpoint_age > log_max_checkpoint_age_async()) {
|
|
470 |
/* A checkpoint is not urgent: do it asynchronously */ |
|
471 |
||
472 |
do_checkpoint = TRUE; |
|
65
by Yasufumi Kinoshita
eliminate warnings/build problems from XtraDB |
473 |
@@ -3349,6 +3380,17 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
474 |
log_sys->flushed_to_disk_lsn, |
475 |
log_sys->last_checkpoint_lsn); |
|
476 |
||
477 |
+ fprintf(file,
|
|
478 |
+ "Max checkpoint age %lu\n"
|
|
479 |
+ "Checkpoint age target %lu\n"
|
|
480 |
+ "Modified age %lu\n"
|
|
481 |
+ "Checkpoint age %lu\n",
|
|
482 |
+ (ulong) log_sys->max_checkpoint_age,
|
|
483 |
+ (ulong) log_max_checkpoint_age_async(),
|
|
484 |
+ (ulong) (log_sys->lsn -
|
|
485 |
+ log_buf_pool_get_oldest_modification()),
|
|
486 |
+ (ulong) (log_sys->lsn - log_sys->last_checkpoint_lsn));
|
|
487 |
+
|
|
488 |
current_time = time(NULL); |
|
489 |
||
490 |
time_elapsed = 0.001 + difftime(current_time, |
|
491 |
diff -ruN a/storage/innobase/log/log0recv.c b/storage/innobase/log/log0recv.c
|
|
492 |
--- a/storage/innobase/log/log0recv.c 2010-11-03 07:01:13.000000000 +0900
|
|
493 |
+++ b/storage/innobase/log/log0recv.c 2010-12-03 15:10:09.089024191 +0900
|
|
494 |
@@ -2906,9 +2906,12 @@
|
|
495 |
ib_uint64_t archived_lsn; |
|
496 |
#endif /* UNIV_LOG_ARCHIVE */ |
|
497 |
byte* buf; |
|
498 |
- byte log_hdr_buf[LOG_FILE_HDR_SIZE];
|
|
499 |
+ byte* log_hdr_buf;
|
|
500 |
+ byte log_hdr_buf_base[LOG_FILE_HDR_SIZE + OS_FILE_LOG_BLOCK_SIZE];
|
|
501 |
ulint err; |
|
502 |
||
503 |
+ log_hdr_buf = ut_align(log_hdr_buf_base, OS_FILE_LOG_BLOCK_SIZE);
|
|
504 |
+
|
|
505 |
#ifdef UNIV_LOG_ARCHIVE |
|
506 |
ut_ad(type != LOG_CHECKPOINT || limit_lsn == IB_ULONGLONG_MAX); |
|
507 |
/** TRUE when recovering from a checkpoint */ |
|
508 |
diff -ruN a/storage/innobase/os/os0file.c b/storage/innobase/os/os0file.c
|
|
509 |
--- a/storage/innobase/os/os0file.c 2010-11-03 07:01:13.000000000 +0900
|
|
510 |
+++ b/storage/innobase/os/os0file.c 2010-12-03 15:10:09.093023540 +0900
|
|
72
by kinoyasu
port Yasufumi patches to 5.5.9 |
511 |
@@ -1424,7 +1424,7 @@
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
512 |
#endif |
513 |
#ifdef UNIV_NON_BUFFERED_IO |
|
514 |
# ifndef UNIV_HOTBACKUP |
|
515 |
- if (type == OS_LOG_FILE && srv_flush_log_at_trx_commit == 2) {
|
|
516 |
+ if (type == OS_LOG_FILE && thd_flush_log_at_trx_commit(NULL) == 2) {
|
|
517 |
/* Do not use unbuffered i/o to log files because |
|
518 |
value 2 denotes that we do not flush the log at every |
|
519 |
commit, but only once per second */ |
|
72
by kinoyasu
port Yasufumi patches to 5.5.9 |
520 |
@@ -1440,7 +1440,7 @@
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
521 |
attributes = 0; |
522 |
#ifdef UNIV_NON_BUFFERED_IO |
|
523 |
# ifndef UNIV_HOTBACKUP |
|
524 |
- if (type == OS_LOG_FILE && srv_flush_log_at_trx_commit == 2) {
|
|
525 |
+ if (type == OS_LOG_FILE && thd_flush_log_at_trx_commit(NULL) == 2) {
|
|
526 |
/* Do not use unbuffered i/o to log files because |
|
527 |
value 2 denotes that we do not flush the log at every |
|
528 |
commit, but only once per second */ |
|
72
by kinoyasu
port Yasufumi patches to 5.5.9 |
529 |
@@ -1585,6 +1585,11 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
530 |
os_file_set_nocache(file, name, mode_str); |
531 |
} |
|
532 |
||
533 |
+ /* ALL_O_DIRECT: O_DIRECT also for transaction log file */
|
|
534 |
+ if (srv_unix_file_flush_method == SRV_UNIX_ALL_O_DIRECT) {
|
|
535 |
+ os_file_set_nocache(file, name, mode_str);
|
|
536 |
+ }
|
|
537 |
+
|
|
538 |
#ifdef USE_FILE_LOCK |
|
539 |
if (create_mode != OS_FILE_OPEN_RAW && os_file_lock(file, name)) { |
|
540 |
||
541 |
diff -ruN a/storage/innobase/srv/srv0srv.c b/storage/innobase/srv/srv0srv.c
|
|
542 |
--- a/storage/innobase/srv/srv0srv.c 2010-12-03 15:09:51.301987792 +0900
|
|
543 |
+++ b/storage/innobase/srv/srv0srv.c 2010-12-03 15:13:29.369986988 +0900
|
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
544 |
@@ -183,7 +183,8 @@
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
545 |
UNIV_INTERN ulint srv_log_file_size = ULINT_MAX; |
546 |
/* size in database pages */ |
|
547 |
UNIV_INTERN ulint srv_log_buffer_size = ULINT_MAX; |
|
548 |
-UNIV_INTERN ulong srv_flush_log_at_trx_commit = 1;
|
|
549 |
+//UNIV_INTERN ulong srv_flush_log_at_trx_commit = 1;
|
|
550 |
+UNIV_INTERN char srv_use_global_flush_log_at_trx_commit = TRUE;
|
|
551 |
||
552 |
/* Try to flush dirty pages so as to avoid IO bursts at |
|
553 |
the checkpoints. */ |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
554 |
@@ -402,6 +403,17 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
555 |
|
556 |
UNIV_INTERN ulong srv_replication_delay = 0; |
|
557 |
||
558 |
+UNIV_INTERN long long srv_ibuf_max_size = 0;
|
|
559 |
+UNIV_INTERN ulint srv_ibuf_active_contract = 0; /* 0:disable 1:enable */
|
|
560 |
+UNIV_INTERN ulint srv_ibuf_accel_rate = 100;
|
|
561 |
+#define PCT_IBUF_IO(pct) ((ulint) (srv_io_capacity * srv_ibuf_accel_rate * ((double) pct / 10000.0)))
|
|
562 |
+
|
|
563 |
+UNIV_INTERN ulint srv_checkpoint_age_target = 0;
|
|
564 |
+UNIV_INTERN ulint srv_flush_neighbor_pages = 1; /* 0:disable 1:enable */
|
|
565 |
+
|
|
566 |
+UNIV_INTERN ulint srv_enable_unsafe_group_commit = 0; /* 0:disable 1:enable */
|
|
567 |
+UNIV_INTERN ulint srv_read_ahead = 3; /* 1: random 2: linear 3: Both */
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
568 |
+UNIV_INTERN ulint srv_adaptive_flushing_method = 0; /* 0: native 1: estimate 2: keep_average */
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
569 |
/*-------------------------------------------*/ |
570 |
UNIV_INTERN ulong srv_n_spin_wait_rounds = 30; |
|
571 |
UNIV_INTERN ulong srv_n_free_tickets_to_enter = 500; |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
572 |
@@ -2742,6 +2754,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
573 |
ulint n_pages_purged = 0; |
574 |
ulint n_bytes_merged; |
|
575 |
ulint n_pages_flushed; |
|
576 |
+ ulint n_pages_flushed_prev = 0;
|
|
577 |
ulint n_bytes_archived; |
|
578 |
ulint n_tables_to_drop; |
|
579 |
ulint n_ios; |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
580 |
@@ -2749,7 +2762,20 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
581 |
ulint n_ios_very_old; |
582 |
ulint n_pend_ios; |
|
583 |
ulint next_itr_time; |
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
584 |
+ ulint prev_adaptive_flushing_method = ULINT_UNDEFINED;
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
585 |
+ ulint inner_loop = 0;
|
586 |
+ ibool skip_sleep = FALSE;
|
|
587 |
ulint i; |
|
588 |
+ struct t_prev_flush_info_struct {
|
|
589 |
+ ulint count;
|
|
590 |
+ unsigned space:32;
|
|
591 |
+ unsigned offset:32;
|
|
592 |
+ ib_uint64_t oldest_modification;
|
|
593 |
+ } prev_flush_info[MAX_BUFFER_POOLS];
|
|
594 |
+
|
|
595 |
+ ib_uint64_t lsn_old;
|
|
596 |
+
|
|
597 |
+ ib_uint64_t oldest_lsn;
|
|
598 |
||
599 |
#ifdef UNIV_DEBUG_THREAD_CREATION |
|
600 |
fprintf(stderr, "Master thread starts, id %lu\n", |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
601 |
@@ -2771,6 +2797,9 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
602 |
|
603 |
mutex_exit(&kernel_mutex); |
|
604 |
||
605 |
+ mutex_enter(&(log_sys->mutex));
|
|
606 |
+ lsn_old = log_sys->lsn;
|
|
607 |
+ mutex_exit(&(log_sys->mutex));
|
|
608 |
loop: |
|
609 |
/*****************************************************************/ |
|
610 |
/* ---- When there is database activity by users, we cycle in this |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
611 |
@@ -2801,9 +2830,13 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
612 |
/* Sleep for 1 second on entrying the for loop below the first time. */ |
613 |
next_itr_time = ut_time_ms() + 1000; |
|
614 |
||
615 |
+ skip_sleep = FALSE;
|
|
616 |
+
|
|
617 |
for (i = 0; i < 10; i++) { |
|
618 |
ulint cur_time = ut_time_ms(); |
|
619 |
||
36
by Yasufumi Kinoshita
adjustment for compiler warnings; rename fields of innodb_index_stats |
620 |
+ n_pages_flushed = 0; /* initialize */
|
621 |
+
|
|
622 |
/* ALTER TABLE in MySQL requires on Unix that the table handler |
|
623 |
can drop tables lazily after there no longer are SELECT |
|
624 |
queries to them. */ |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
625 |
@@ -2827,6 +2860,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
626 |
srv_main_thread_op_info = "sleeping"; |
627 |
srv_main_1_second_loops++; |
|
628 |
||
629 |
+ if (!skip_sleep) {
|
|
24
by Yasufumi Kinoshita
port Yasufumi's patches to 5.5.8 |
630 |
if (next_itr_time > cur_time |
631 |
&& srv_shutdown_state == SRV_SHUTDOWN_NONE) { |
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
632 |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
633 |
@@ -2837,10 +2871,26 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
634 |
(next_itr_time - cur_time) |
635 |
* 1000)); |
|
636 |
srv_main_sleeps++; |
|
637 |
+
|
|
638 |
+ /*
|
|
639 |
+ mutex_enter(&(log_sys->mutex));
|
|
640 |
+ oldest_lsn = buf_pool_get_oldest_modification();
|
|
641 |
+ ib_uint64_t lsn = log_sys->lsn;
|
|
642 |
+ mutex_exit(&(log_sys->mutex));
|
|
643 |
+
|
|
644 |
+ if(oldest_lsn)
|
|
645 |
+ fprintf(stderr,
|
|
646 |
+ "InnoDB flush: age pct: %lu, lsn progress: %lu\n",
|
|
647 |
+ (lsn - oldest_lsn) * 100 / log_sys->max_checkpoint_age,
|
|
648 |
+ lsn - lsn_old);
|
|
649 |
+ */
|
|
650 |
} |
|
651 |
||
652 |
/* Each iteration should happen at 1 second interval. */ |
|
653 |
next_itr_time = ut_time_ms() + 1000; |
|
654 |
+ } /* if (!skip_sleep) */
|
|
655 |
+
|
|
656 |
+ skip_sleep = FALSE;
|
|
657 |
||
24
by Yasufumi Kinoshita
port Yasufumi's patches to 5.5.8 |
658 |
/* Flush logs if needed */ |
659 |
srv_sync_log_buffer_in_background(); |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
660 |
@@ -2860,7 +2910,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
661 |
if (n_pend_ios < SRV_PEND_IO_THRESHOLD |
662 |
&& (n_ios - n_ios_old < SRV_RECENT_IO_ACTIVITY)) { |
|
663 |
srv_main_thread_op_info = "doing insert buffer merge"; |
|
664 |
- ibuf_contract_for_n_pages(FALSE, PCT_IO(5));
|
|
665 |
+ ibuf_contract_for_n_pages(FALSE, PCT_IBUF_IO(5));
|
|
666 |
||
667 |
/* Flush logs if needed */ |
|
668 |
srv_sync_log_buffer_in_background(); |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
669 |
@@ -2877,7 +2927,11 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
670 |
n_pages_flushed = buf_flush_list( |
671 |
PCT_IO(100), IB_ULONGLONG_MAX); |
|
672 |
||
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
673 |
- } else if (srv_adaptive_flushing) {
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
674 |
+ mutex_enter(&(log_sys->mutex));
|
675 |
+ lsn_old = log_sys->lsn;
|
|
676 |
+ mutex_exit(&(log_sys->mutex));
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
677 |
+ prev_adaptive_flushing_method = ULINT_UNDEFINED;
|
678 |
+ } else if (srv_adaptive_flushing && srv_adaptive_flushing_method == 0) {
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
679 |
|
680 |
/* Try to keep the rate of flushing of dirty |
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
681 |
pages such that redo log generation does not |
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
682 |
@@ -2893,6 +2947,224 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
683 |
n_flush, |
684 |
IB_ULONGLONG_MAX); |
|
685 |
} |
|
686 |
+
|
|
687 |
+ mutex_enter(&(log_sys->mutex));
|
|
688 |
+ lsn_old = log_sys->lsn;
|
|
689 |
+ mutex_exit(&(log_sys->mutex));
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
690 |
+ prev_adaptive_flushing_method = ULINT_UNDEFINED;
|
691 |
+ } else if (srv_adaptive_flushing && srv_adaptive_flushing_method == 1) {
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
692 |
+
|
693 |
+ /* Try to keep modified age not to exceed
|
|
694 |
+ max_checkpoint_age * 7/8 line */
|
|
695 |
+
|
|
696 |
+ mutex_enter(&(log_sys->mutex));
|
|
697 |
+
|
|
698 |
+ oldest_lsn = buf_pool_get_oldest_modification();
|
|
699 |
+ if (oldest_lsn == 0) {
|
|
700 |
+ lsn_old = log_sys->lsn;
|
|
701 |
+ mutex_exit(&(log_sys->mutex));
|
|
702 |
+
|
|
703 |
+ } else {
|
|
704 |
+ if ((log_sys->lsn - oldest_lsn)
|
|
705 |
+ > (log_sys->max_checkpoint_age) - ((log_sys->max_checkpoint_age) / 8)) {
|
|
706 |
+ /* LOG_POOL_PREFLUSH_RATIO_ASYNC is exceeded. */
|
|
707 |
+ /* We should not flush from here. */
|
|
708 |
+ lsn_old = log_sys->lsn;
|
|
709 |
+ mutex_exit(&(log_sys->mutex));
|
|
710 |
+ } else if ((log_sys->lsn - oldest_lsn)
|
|
711 |
+ > (log_sys->max_checkpoint_age)/4 ) {
|
|
712 |
+
|
|
713 |
+ /* defence line (max_checkpoint_age * 1/2) */
|
|
714 |
+ ib_uint64_t lsn = log_sys->lsn;
|
|
715 |
+
|
|
716 |
+ ib_uint64_t level, bpl;
|
|
717 |
+ buf_page_t* bpage;
|
|
718 |
+ ulint j;
|
|
719 |
+
|
|
720 |
+ mutex_exit(&(log_sys->mutex));
|
|
721 |
+
|
|
722 |
+ bpl = 0;
|
|
723 |
+
|
|
724 |
+ for (j = 0; j < srv_buf_pool_instances; j++) {
|
|
725 |
+ buf_pool_t* buf_pool;
|
|
726 |
+ ulint n_blocks;
|
|
727 |
+
|
|
728 |
+ buf_pool = buf_pool_from_array(j);
|
|
729 |
+
|
|
730 |
+ /* The scanning flush_list is optimistic here */
|
|
731 |
+
|
|
732 |
+ level = 0;
|
|
733 |
+ n_blocks = 0;
|
|
734 |
+ bpage = UT_LIST_GET_FIRST(buf_pool->flush_list);
|
|
735 |
+
|
|
736 |
+ while (bpage != NULL) {
|
|
737 |
+ ib_uint64_t oldest_modification = bpage->oldest_modification;
|
|
738 |
+ if (oldest_modification != 0) {
|
|
739 |
+ level += log_sys->max_checkpoint_age
|
|
740 |
+ - (lsn - oldest_modification);
|
|
741 |
+ }
|
|
742 |
+ bpage = UT_LIST_GET_NEXT(list, bpage);
|
|
743 |
+ n_blocks++;
|
|
744 |
+ }
|
|
745 |
+
|
|
746 |
+ if (level) {
|
|
747 |
+ bpl += ((ib_uint64_t) n_blocks * n_blocks
|
|
748 |
+ * (lsn - lsn_old)) / level;
|
|
749 |
+ }
|
|
750 |
+
|
|
751 |
+ }
|
|
752 |
+
|
|
753 |
+ if (!srv_use_doublewrite_buf) {
|
|
754 |
+ /* flush is faster than when doublewrite */
|
|
755 |
+ bpl = (bpl * 7) / 8;
|
|
756 |
+ }
|
|
757 |
+
|
|
758 |
+ if (bpl) {
|
|
759 |
+retry_flush_batch:
|
|
760 |
+ n_pages_flushed = buf_flush_list(bpl,
|
|
761 |
+ oldest_lsn + (lsn - lsn_old));
|
|
762 |
+ if (n_pages_flushed == ULINT_UNDEFINED) {
|
|
763 |
+ os_thread_sleep(5000);
|
|
764 |
+ goto retry_flush_batch;
|
|
765 |
+ }
|
|
766 |
+ }
|
|
767 |
+
|
|
768 |
+ lsn_old = lsn;
|
|
769 |
+ /*
|
|
770 |
+ fprintf(stderr,
|
|
771 |
+ "InnoDB flush: age pct: %lu, lsn progress: %lu, blocks to flush:%llu\n",
|
|
772 |
+ (lsn - oldest_lsn) * 100 / log_sys->max_checkpoint_age,
|
|
773 |
+ lsn - lsn_old, bpl);
|
|
774 |
+ */
|
|
775 |
+ } else {
|
|
776 |
+ lsn_old = log_sys->lsn;
|
|
777 |
+ mutex_exit(&(log_sys->mutex));
|
|
778 |
+ }
|
|
779 |
+ }
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
780 |
+ prev_adaptive_flushing_method = 1;
|
781 |
+ } else if (srv_adaptive_flushing && srv_adaptive_flushing_method == 2) {
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
782 |
+ buf_pool_t* buf_pool;
|
783 |
+ buf_page_t* bpage;
|
|
784 |
+ ib_uint64_t lsn;
|
|
785 |
+ ulint j;
|
|
786 |
+
|
|
787 |
+ mutex_enter(&(log_sys->mutex));
|
|
788 |
+ oldest_lsn = buf_pool_get_oldest_modification();
|
|
789 |
+ lsn = log_sys->lsn;
|
|
790 |
+ mutex_exit(&(log_sys->mutex));
|
|
791 |
+
|
|
792 |
+ /* upper loop/sec. (x10) */
|
|
793 |
+ next_itr_time -= 900; /* 1000 - 900 == 100 */
|
|
794 |
+ inner_loop++;
|
|
795 |
+ if (inner_loop < 10) {
|
|
796 |
+ i--;
|
|
797 |
+ } else {
|
|
798 |
+ inner_loop = 0;
|
|
799 |
+ }
|
|
800 |
+
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
801 |
+ if (prev_adaptive_flushing_method == 2) {
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
802 |
+ lint n_flush;
|
65
by Yasufumi Kinoshita
eliminate warnings/build problems from XtraDB |
803 |
+ lint blocks_sum;
|
804 |
+ ulint new_blocks_sum, flushed_blocks_sum;
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
805 |
+
|
806 |
+ blocks_sum = new_blocks_sum = flushed_blocks_sum = 0;
|
|
807 |
+
|
|
808 |
+ /* prev_flush_info[j] should be the previous loop's */
|
|
809 |
+ for (j = 0; j < srv_buf_pool_instances; j++) {
|
|
810 |
+ lint blocks_num, new_blocks_num, flushed_blocks_num;
|
|
811 |
+ ibool found;
|
|
812 |
+
|
|
813 |
+ buf_pool = buf_pool_from_array(j);
|
|
814 |
+
|
|
815 |
+ blocks_num = UT_LIST_GET_LEN(buf_pool->flush_list);
|
|
816 |
+ bpage = UT_LIST_GET_FIRST(buf_pool->flush_list);
|
|
817 |
+ new_blocks_num = 0;
|
|
818 |
+
|
|
819 |
+ found = FALSE;
|
|
820 |
+ while (bpage != NULL) {
|
|
821 |
+ if (prev_flush_info[j].space == bpage->space
|
|
822 |
+ && prev_flush_info[j].offset == bpage->offset
|
|
823 |
+ && prev_flush_info[j].oldest_modification
|
|
824 |
+ == bpage->oldest_modification) {
|
|
825 |
+ found = TRUE;
|
|
826 |
+ break;
|
|
827 |
+ }
|
|
828 |
+ bpage = UT_LIST_GET_NEXT(list, bpage);
|
|
829 |
+ new_blocks_num++;
|
|
830 |
+ }
|
|
831 |
+ if (!found) {
|
|
832 |
+ new_blocks_num = blocks_num;
|
|
833 |
+ }
|
|
834 |
+
|
|
835 |
+ flushed_blocks_num = new_blocks_num + prev_flush_info[j].count
|
|
836 |
+ - blocks_num;
|
|
837 |
+ if (flushed_blocks_num < 0) {
|
|
838 |
+ flushed_blocks_num = 0;
|
|
839 |
+ }
|
|
840 |
+
|
|
841 |
+ bpage = UT_LIST_GET_FIRST(buf_pool->flush_list);
|
|
842 |
+
|
|
843 |
+ prev_flush_info[j].count = UT_LIST_GET_LEN(buf_pool->flush_list);
|
|
844 |
+ if (bpage) {
|
|
845 |
+ prev_flush_info[j].space = bpage->space;
|
|
846 |
+ prev_flush_info[j].offset = bpage->offset;
|
|
847 |
+ prev_flush_info[j].oldest_modification = bpage->oldest_modification;
|
|
848 |
+ } else {
|
|
849 |
+ prev_flush_info[j].space = 0;
|
|
850 |
+ prev_flush_info[j].offset = 0;
|
|
851 |
+ prev_flush_info[j].oldest_modification = 0;
|
|
852 |
+ }
|
|
853 |
+
|
|
854 |
+ new_blocks_sum += new_blocks_num;
|
|
855 |
+ flushed_blocks_sum += flushed_blocks_num;
|
|
856 |
+ blocks_sum += blocks_num;
|
|
857 |
+ }
|
|
858 |
+
|
|
859 |
+ n_flush = blocks_sum * (lsn - lsn_old) / log_sys->max_modified_age_async;
|
|
860 |
+ if (flushed_blocks_sum > n_pages_flushed_prev) {
|
|
861 |
+ n_flush -= (flushed_blocks_sum - n_pages_flushed_prev);
|
|
862 |
+ }
|
|
863 |
+
|
|
864 |
+ if (n_flush > 0) {
|
|
865 |
+ n_flush++;
|
|
866 |
+ n_pages_flushed = buf_flush_list(n_flush, oldest_lsn + (lsn - lsn_old));
|
|
867 |
+ } else {
|
|
868 |
+ n_pages_flushed = 0;
|
|
869 |
+ }
|
|
870 |
+ } else {
|
|
871 |
+ /* store previous first pages of the flush_list */
|
|
872 |
+ for (j = 0; j < srv_buf_pool_instances; j++) {
|
|
873 |
+ buf_pool = buf_pool_from_array(j);
|
|
874 |
+
|
|
875 |
+ bpage = UT_LIST_GET_FIRST(buf_pool->flush_list);
|
|
876 |
+
|
|
877 |
+ prev_flush_info[j].count = UT_LIST_GET_LEN(buf_pool->flush_list);
|
|
878 |
+ if (bpage) {
|
|
879 |
+ prev_flush_info[j].space = bpage->space;
|
|
880 |
+ prev_flush_info[j].offset = bpage->offset;
|
|
881 |
+ prev_flush_info[j].oldest_modification = bpage->oldest_modification;
|
|
882 |
+ } else {
|
|
883 |
+ prev_flush_info[j].space = 0;
|
|
884 |
+ prev_flush_info[j].offset = 0;
|
|
885 |
+ prev_flush_info[j].oldest_modification = 0;
|
|
886 |
+ }
|
|
887 |
+ }
|
|
888 |
+ n_pages_flushed = 0;
|
|
889 |
+ }
|
|
890 |
+
|
|
891 |
+ lsn_old = lsn;
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
892 |
+ prev_adaptive_flushing_method = 2;
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
893 |
+ } else {
|
894 |
+ mutex_enter(&(log_sys->mutex));
|
|
895 |
+ lsn_old = log_sys->lsn;
|
|
896 |
+ mutex_exit(&(log_sys->mutex));
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
897 |
+ prev_adaptive_flushing_method = ULINT_UNDEFINED;
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
898 |
+ }
|
899 |
+
|
|
900 |
+ if (n_pages_flushed == ULINT_UNDEFINED) {
|
|
901 |
+ n_pages_flushed_prev = 0;
|
|
902 |
+ } else {
|
|
903 |
+ n_pages_flushed_prev = n_pages_flushed;
|
|
904 |
} |
|
905 |
||
906 |
if (srv_activity_count == old_activity_count) { |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
907 |
@@ -2941,7 +3213,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
908 |
even if the server were active */ |
909 |
||
910 |
srv_main_thread_op_info = "doing insert buffer merge"; |
|
911 |
- ibuf_contract_for_n_pages(FALSE, PCT_IO(5));
|
|
912 |
+ ibuf_contract_for_n_pages(FALSE, PCT_IBUF_IO(5));
|
|
913 |
||
914 |
/* Flush logs if needed */ |
|
915 |
srv_sync_log_buffer_in_background(); |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
916 |
@@ -3049,7 +3321,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
917 |
buf_flush_list below. Otherwise, the system favors |
918 |
clean pages over cleanup throughput. */ |
|
919 |
n_bytes_merged = ibuf_contract_for_n_pages(FALSE, |
|
920 |
- PCT_IO(100));
|
|
921 |
+ PCT_IBUF_IO(100));
|
|
922 |
} |
|
923 |
||
924 |
srv_main_thread_op_info = "reserving kernel mutex"; |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
925 |
@@ -3189,6 +3461,7 @@
|
109
by kinoyasu
port Yasufumi patches to 5.5.12 |
926 |
srv_slot_t* slot; |
95
by Yasufumi Kinoshita
Yasufumi patches are ported to 5.5.11; Note: option innodb_extra_rsegments was removed, because the official equivalent option innodb_rollback_segments has been implemented at this version. |
927 |
ulint retries = 0; |
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
928 |
ulint n_total_purged = ULINT_UNDEFINED; |
929 |
+ ulint next_itr_time;
|
|
930 |
||
931 |
ut_a(srv_n_purge_threads == 1); |
|
932 |
||
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
933 |
@@ -3209,9 +3482,12 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
934 |
|
935 |
mutex_exit(&kernel_mutex); |
|
936 |
||
937 |
+ next_itr_time = ut_time_ms();
|
|
938 |
+
|
|
939 |
while (srv_shutdown_state != SRV_SHUTDOWN_EXIT_THREADS) { |
|
940 |
||
95
by Yasufumi Kinoshita
Yasufumi patches are ported to 5.5.11; Note: option innodb_extra_rsegments was removed, because the official equivalent option innodb_rollback_segments has been implemented at this version. |
941 |
ulint n_pages_purged = 0; |
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
942 |
+ ulint cur_time;
|
943 |
||
944 |
/* If there are very few records to purge or the last |
|
945 |
purge didn't purge any records then wait for activity. |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
946 |
@@ -3258,6 +3534,16 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
947 |
} while (n_pages_purged > 0 && !srv_fast_shutdown); |
948 |
||
949 |
srv_sync_log_buffer_in_background(); |
|
950 |
+
|
|
951 |
+ cur_time = ut_time_ms();
|
|
952 |
+ if (next_itr_time > cur_time) {
|
|
953 |
+ os_thread_sleep(ut_min(1000000,
|
|
954 |
+ (next_itr_time - cur_time)
|
|
955 |
+ * 1000));
|
|
956 |
+ next_itr_time = ut_time_ms() + 1000;
|
|
957 |
+ } else {
|
|
958 |
+ next_itr_time = cur_time + 1000;
|
|
959 |
+ }
|
|
960 |
} |
|
961 |
||
962 |
mutex_enter(&kernel_mutex); |
|
963 |
diff -ruN a/storage/innobase/srv/srv0start.c b/storage/innobase/srv/srv0start.c
|
|
964 |
--- a/storage/innobase/srv/srv0start.c 2010-11-03 07:01:13.000000000 +0900
|
|
965 |
+++ b/storage/innobase/srv/srv0start.c 2010-12-03 15:10:09.103023543 +0900
|
|
109
by kinoyasu
port Yasufumi patches to 5.5.12 |
966 |
@@ -1217,6 +1217,9 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
967 |
} else if (0 == ut_strcmp(srv_file_flush_method_str, "O_DIRECT")) { |
968 |
srv_unix_file_flush_method = SRV_UNIX_O_DIRECT; |
|
969 |
||
970 |
+ } else if (0 == ut_strcmp(srv_file_flush_method_str, "ALL_O_DIRECT")) {
|
|
971 |
+ srv_unix_file_flush_method = SRV_UNIX_ALL_O_DIRECT;
|
|
972 |
+
|
|
973 |
} else if (0 == ut_strcmp(srv_file_flush_method_str, "littlesync")) { |
|
974 |
srv_unix_file_flush_method = SRV_UNIX_LITTLESYNC; |
|
975 |
||
104
by Yasufumi Kinoshita
fix bug756387, directly |
976 |
diff -ruN a/storage/innobase/trx/trx0purge.c b/storage/innobase/trx/trx0purge.c
|
977 |
--- a/storage/innobase/trx/trx0purge.c 2011-04-12 14:14:14.000000000 +0900
|
|
978 |
+++ b/storage/innobase/trx/trx0purge.c 2011-04-12 14:15:44.000000000 +0900
|
|
979 |
@@ -392,10 +392,10 @@
|
|
980 |
trx_sys->rseg_history_len++; |
|
981 |
mutex_exit(&kernel_mutex); |
|
982 |
||
983 |
- if (!(trx_sys->rseg_history_len % srv_purge_batch_size)) {
|
|
984 |
+// if (!(trx_sys->rseg_history_len % srv_purge_batch_size)) { /*should wake up always*/
|
|
985 |
/* Inform the purge thread that there is work to do. */ |
|
986 |
srv_wake_purge_thread_if_not_active(); |
|
987 |
- }
|
|
988 |
+// }
|
|
989 |
} |
|
990 |
||
991 |
/**********************************************************************//** |
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
992 |
diff -ruN a/storage/innobase/trx/trx0trx.c b/storage/innobase/trx/trx0trx.c
|
993 |
--- a/storage/innobase/trx/trx0trx.c 2010-11-03 07:01:13.000000000 +0900
|
|
994 |
+++ b/storage/innobase/trx/trx0trx.c 2010-12-03 15:10:09.106023937 +0900
|
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
995 |
@@ -984,6 +984,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
996 |
trx->read_view = NULL; |
997 |
||
998 |
if (lsn) { |
|
999 |
+ ulint flush_log_at_trx_commit;
|
|
1000 |
||
1001 |
mutex_exit(&kernel_mutex); |
|
1002 |
||
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
1003 |
@@ -992,6 +993,12 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1004 |
trx_undo_insert_cleanup(trx); |
1005 |
} |
|
1006 |
||
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
1007 |
+ if (srv_use_global_flush_log_at_trx_commit) {
|
1008 |
+ flush_log_at_trx_commit = thd_flush_log_at_trx_commit(NULL);
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1009 |
+ } else {
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
1010 |
+ flush_log_at_trx_commit = thd_flush_log_at_trx_commit(trx->mysql_thd);
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1011 |
+ }
|
1012 |
+
|
|
1013 |
/* NOTE that we could possibly make a group commit more |
|
1014 |
efficient here: call os_thread_yield here to allow also other |
|
1015 |
trxs to come to commit! */ |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
1016 |
@@ -1023,9 +1030,9 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1017 |
if (trx->flush_log_later) { |
1018 |
/* Do nothing yet */ |
|
1019 |
trx->must_flush_log_later = TRUE; |
|
1020 |
- } else if (srv_flush_log_at_trx_commit == 0) {
|
|
1021 |
+ } else if (flush_log_at_trx_commit == 0) {
|
|
1022 |
/* Do nothing */ |
|
1023 |
- } else if (srv_flush_log_at_trx_commit == 1) {
|
|
1024 |
+ } else if (flush_log_at_trx_commit == 1) {
|
|
1025 |
if (srv_unix_file_flush_method == SRV_UNIX_NOSYNC) { |
|
1026 |
/* Write the log but do not flush it to disk */ |
|
1027 |
||
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
1028 |
@@ -1037,7 +1044,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1029 |
|
1030 |
log_write_up_to(lsn, LOG_WAIT_ONE_GROUP, TRUE); |
|
1031 |
} |
|
1032 |
- } else if (srv_flush_log_at_trx_commit == 2) {
|
|
1033 |
+ } else if (flush_log_at_trx_commit == 2) {
|
|
1034 |
||
1035 |
/* Write the log but do not flush it to disk */ |
|
1036 |
||
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
1037 |
@@ -1701,16 +1708,23 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1038 |
trx_t* trx) /*!< in: trx handle */ |
1039 |
{ |
|
1040 |
ib_uint64_t lsn = trx->commit_lsn; |
|
1041 |
+ ulint flush_log_at_trx_commit;
|
|
1042 |
||
1043 |
ut_a(trx); |
|
1044 |
||
1045 |
trx->op_info = "flushing log"; |
|
1046 |
||
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
1047 |
+ if (srv_use_global_flush_log_at_trx_commit) {
|
1048 |
+ flush_log_at_trx_commit = thd_flush_log_at_trx_commit(NULL);
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1049 |
+ } else {
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
1050 |
+ flush_log_at_trx_commit = thd_flush_log_at_trx_commit(trx->mysql_thd);
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1051 |
+ }
|
1052 |
+
|
|
1053 |
if (!trx->must_flush_log_later) { |
|
1054 |
/* Do nothing */ |
|
1055 |
- } else if (srv_flush_log_at_trx_commit == 0) {
|
|
1056 |
+ } else if (flush_log_at_trx_commit == 0) {
|
|
1057 |
/* Do nothing */ |
|
1058 |
- } else if (srv_flush_log_at_trx_commit == 1) {
|
|
1059 |
+ } else if (flush_log_at_trx_commit == 1) {
|
|
1060 |
if (srv_unix_file_flush_method == SRV_UNIX_NOSYNC) { |
|
1061 |
/* Write the log but do not flush it to disk */ |
|
1062 |
||
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
1063 |
@@ -1721,7 +1735,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1064 |
|
1065 |
log_write_up_to(lsn, LOG_WAIT_ONE_GROUP, TRUE); |
|
1066 |
} |
|
1067 |
- } else if (srv_flush_log_at_trx_commit == 2) {
|
|
1068 |
+ } else if (flush_log_at_trx_commit == 2) {
|
|
1069 |
||
1070 |
/* Write the log but do not flush it to disk */ |
|
1071 |
||
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
1072 |
@@ -1969,6 +1983,8 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1073 |
/*--------------------------------------*/ |
1074 |
||
1075 |
if (lsn) { |
|
1076 |
+ ulint flush_log_at_trx_commit;
|
|
1077 |
+
|
|
1078 |
/* Depending on the my.cnf options, we may now write the log |
|
1079 |
buffer to the log files, making the prepared state of the |
|
1080 |
transaction durable if the OS does not crash. We may also |
|
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
1081 |
@@ -1988,9 +2004,15 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1082 |
|
1083 |
mutex_exit(&kernel_mutex); |
|
1084 |
||
1085 |
- if (srv_flush_log_at_trx_commit == 0) {
|
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
1086 |
+ if (srv_use_global_flush_log_at_trx_commit) {
|
1087 |
+ flush_log_at_trx_commit = thd_flush_log_at_trx_commit(NULL);
|
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1088 |
+ } else {
|
59
by kinoyasu
fix bug635399 and bug689450: change about innodb_adaptive_checkpoint and innodb_flush_log_at_trx_commit_session |
1089 |
+ flush_log_at_trx_commit = thd_flush_log_at_trx_commit(trx->mysql_thd);
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1090 |
+ }
|
1091 |
+
|
|
1092 |
+ if (flush_log_at_trx_commit == 0) {
|
|
1093 |
/* Do nothing */ |
|
1094 |
- } else if (srv_flush_log_at_trx_commit == 1) {
|
|
1095 |
+ } else if (flush_log_at_trx_commit == 1) {
|
|
1096 |
if (srv_unix_file_flush_method == SRV_UNIX_NOSYNC) { |
|
1097 |
/* Write the log but do not flush it to disk */ |
|
1098 |
||
118
by kinoyasu
port Yasufumi patches to 5.5.13 |
1099 |
@@ -2002,7 +2024,7 @@
|
2
by kinoyasu
ported part of Yasufumi patches until innodb_extend_slow.patch |
1100 |
|
1101 |
log_write_up_to(lsn, LOG_WAIT_ONE_GROUP, TRUE); |
|
1102 |
} |
|
1103 |
- } else if (srv_flush_log_at_trx_commit == 2) {
|
|
1104 |
+ } else if (flush_log_at_trx_commit == 2) {
|
|
1105 |
||
1106 |
/* Write the log but do not flush it to disk */ |
|
1107 |