Merge lp:~percona-dev/percona-server/5.5.14-porting-other into lp:percona-server/5.5
- 5.5.14-porting-other
- Merge into 5.5
Proposed by
Oleg Tsarev
Status: | Superseded |
---|---|
Proposed branch: | lp:~percona-dev/percona-server/5.5.14-porting-other |
Merge into: | lp:percona-server/5.5 |
Diff against target: |
5961 lines (+1756/-531) 47 files modified
Makefile (+1/-1) control_online_alter_index.patch (+2/-2) innodb_adaptive_hash_index_partitions.patch (+49/-20) innodb_admin_command_base.patch (+1/-1) innodb_buffer_pool_pages_i_s.patch (+3/-3) innodb_buffer_pool_shm.patch (+5/-5) innodb_bug60788.patch (+8/-8) innodb_deadlock_count.patch (+2/-2) innodb_dict_size_limit.patch (+8/-8) innodb_expand_fast_index_creation.patch (+19/-18) innodb_expand_import.patch (+9/-9) innodb_extend_slow.patch (+25/-27) innodb_extra_rseg.patch (+1/-1) innodb_fake_changes.patch (+32/-21) innodb_fast_checksum.patch (+6/-6) innodb_files_extend.patch (+10/-10) innodb_fix_misc.patch (+944/-56) innodb_io_patches.patch (+20/-20) innodb_kill_idle_transaction.patch (+277/-0) innodb_lru_dump_restore.patch (+3/-3) innodb_opt_lru_count.patch (+1/-1) innodb_overwrite_relay_log_info.patch (+5/-5) innodb_pass_corrupt_table.patch (+38/-38) innodb_recovery_patches.patch (+4/-4) innodb_separate_doublewrite.patch (+23/-23) innodb_show_lock_name.patch (+4/-4) innodb_show_status.patch (+10/-10) innodb_show_status_extend.patch (+11/-11) innodb_show_sys_tables.patch (+1/-1) innodb_split_buf_pool_mutex.patch (+29/-29) innodb_stats.patch (+33/-33) innodb_thread_concurrency_timer_based.patch (+3/-3) log_connection_error.patch (+3/-3) log_warnings_suppress.patch (+5/-5) microsec_process.patch (+1/-1) mysql-test.diff (+19/-0) mysql_syslog.patch (+1/-1) optimizer_fix.patch (+2/-2) processlist_row_stats.patch (+2/-2) query_cache_enhance.patch (+1/-1) response_time_distribution.patch (+8/-8) series (+2/-0) show_slave_status_nolock.patch (+3/-3) show_temp.patch (+13/-13) slow_extended.patch (+22/-20) sql_no_fcache.patch (+6/-6) userstat.patch (+81/-83) |
To merge this branch: | bzr merge lp:~percona-dev/percona-server/5.5.14-porting-other |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Percona developers | Pending | ||
Yasufumi Kinoshita | Pending | ||
Percona developers | Pending | ||
Review via email: mp+69944@code.launchpad.net |
This proposal has been superseded by a proposal from 2011-08-01.
Commit message
Description of the change
1) port all other patches to 5.5.14
2) sql_connect.cc little changed, I fix patches depended from it (slow_extended.
3) handler.h: handler->add_index has now asynchronous, I add final_add_index call (innodb_
http://
Nothing new errors in results.
Will fix available fails in other MP
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'Makefile' |
2 | --- Makefile 2011-06-28 06:56:52 +0000 |
3 | +++ Makefile 2011-08-01 03:32:34 +0000 |
4 | @@ -1,6 +1,6 @@ |
5 | FETCH_CMD=wget |
6 | MASTER_SITE=http://www.percona.com/downloads/community |
7 | -MYSQL_VERSION=5.5.13 |
8 | +MYSQL_VERSION=5.5.14 |
9 | PERCONA_SERVER_VERSION=rel20.4 |
10 | PERCONA_SERVER ?=Percona-Server-$(MYSQL_VERSION)-$(PERCONA_SERVER_VERSION) |
11 | PERCONA_SERVER_SHORT_1 ?=Percona-Server-$(MYSQL_VERSION) |
12 | |
13 | === modified file 'control_online_alter_index.patch' |
14 | --- control_online_alter_index.patch 2011-06-10 10:07:06 +0000 |
15 | +++ control_online_alter_index.patch 2011-08-01 03:32:34 +0000 |
16 | @@ -32,7 +32,7 @@ |
17 | diff -ruN a/sql/sql_partition.cc b/sql/sql_partition.cc |
18 | --- a/sql/sql_partition.cc 2010-11-03 07:01:14.000000000 +0900 |
19 | +++ b/sql/sql_partition.cc 2010-12-03 13:59:56.444039002 +0900 |
20 | -@@ -4636,7 +4636,12 @@ |
21 | +@@ -4637,7 +4637,12 @@ |
22 | alter_info->num_parts= curr_part_no - new_part_no; |
23 | } |
24 | } |
25 | @@ -49,7 +49,7 @@ |
26 | diff -ruN a/sql/sql_table.cc b/sql/sql_table.cc |
27 | --- a/sql/sql_table.cc 2010-11-03 07:01:14.000000000 +0900 |
28 | +++ b/sql/sql_table.cc 2010-12-03 13:51:04.768955495 +0900 |
29 | -@@ -6112,6 +6112,10 @@ |
30 | +@@ -6116,6 +6116,10 @@ |
31 | uint *idx_end_p; |
32 | |
33 | alter_flags= table->file->alter_table_flags(alter_info->flags); |
34 | |
35 | === modified file 'innodb_adaptive_hash_index_partitions.patch' |
36 | --- innodb_adaptive_hash_index_partitions.patch 2011-06-27 07:12:14 +0000 |
37 | +++ innodb_adaptive_hash_index_partitions.patch 2011-08-01 03:32:34 +0000 |
38 | @@ -972,7 +972,7 @@ |
39 | |
40 | block->is_hashed = FALSE; |
41 | |
42 | -@@ -1481,7 +1482,7 @@ |
43 | +@@ -1413,7 +1414,7 @@ |
44 | /* To follow the latching order, we |
45 | have to release btr_search_latch |
46 | before acquiring block->latch. */ |
47 | @@ -981,7 +981,7 @@ |
48 | /* When we release the search latch, |
49 | we must rescan all blocks, because |
50 | some may become hashed again. */ |
51 | -@@ -1512,11 +1513,11 @@ |
52 | +@@ -1444,11 +1445,11 @@ |
53 | anything. block->is_hashed can only |
54 | be set on uncompressed file pages. */ |
55 | |
56 | @@ -995,7 +995,7 @@ |
57 | |
58 | ut_ad(!btr_search_enabled); |
59 | } |
60 | -@@ -1535,7 +1536,11 @@ |
61 | +@@ -1467,7 +1468,11 @@ |
62 | ibool released_search_latch; |
63 | |
64 | #ifdef UNIV_SYNC_DEBUG |
65 | @@ -1008,7 +1008,7 @@ |
66 | #endif /* UNIV_SYNC_DEBUG */ |
67 | ut_ad(!btr_search_enabled); |
68 | |
69 | -@@ -2655,6 +2660,7 @@ |
70 | +@@ -2203,6 +2208,7 @@ |
71 | { |
72 | block->check_index_page_at_flush = FALSE; |
73 | block->index = NULL; |
74 | @@ -1019,7 +1019,36 @@ |
75 | diff -ruN a/storage/innobase/buf/buf0lru.c b/storage/innobase/buf/buf0lru.c |
76 | --- a/storage/innobase/buf/buf0lru.c 2010-12-04 15:35:29.137347521 +0900 |
77 | +++ b/storage/innobase/buf/buf0lru.c 2010-12-04 16:12:48.658550840 +0900 |
78 | -@@ -1798,7 +1798,7 @@ |
79 | +@@ -605,7 +605,7 @@ |
80 | + |
81 | + mutex_exit(&buf_pool->LRU_list_mutex); |
82 | + |
83 | +- rw_lock_s_lock(&btr_search_latch); |
84 | ++ btr_search_s_lock_all(); |
85 | + chunk = buf_pool->chunks; |
86 | + for (j = buf_pool->n_chunks; j--; chunk++) { |
87 | + buf_block_t* block = chunk->blocks; |
88 | +@@ -617,16 +617,16 @@ |
89 | + continue; |
90 | + } |
91 | + |
92 | +- rw_lock_s_unlock(&btr_search_latch); |
93 | ++ btr_search_s_unlock_all(); |
94 | + |
95 | + rw_lock_x_lock(&block->lock); |
96 | + btr_search_drop_page_hash_index(block, NULL); |
97 | + rw_lock_x_unlock(&block->lock); |
98 | + |
99 | +- rw_lock_s_lock(&btr_search_latch); |
100 | ++ btr_search_s_lock_all(); |
101 | + } |
102 | + } |
103 | +- rw_lock_s_unlock(&btr_search_latch); |
104 | ++ btr_search_s_unlock_all(); |
105 | + } |
106 | + } |
107 | + |
108 | +@@ -1787,7 +1787,7 @@ |
109 | |
110 | UNIV_MEM_VALID(((buf_block_t*) bpage)->frame, |
111 | UNIV_PAGE_SIZE); |
112 | @@ -1031,7 +1060,7 @@ |
113 | diff -ruN a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c |
114 | --- a/storage/innobase/dict/dict0dict.c 2010-12-04 15:52:23.398513916 +0900 |
115 | +++ b/storage/innobase/dict/dict0dict.c 2010-12-04 16:12:48.662550715 +0900 |
116 | -@@ -1811,7 +1811,7 @@ |
117 | +@@ -1845,7 +1845,7 @@ |
118 | zero. */ |
119 | |
120 | for (;;) { |
121 | @@ -1056,7 +1085,7 @@ |
122 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
123 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 16:12:20.185850734 +0900 |
124 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 16:12:48.674552412 +0900 |
125 | -@@ -11702,6 +11702,11 @@ |
126 | +@@ -11719,6 +11719,11 @@ |
127 | "Disable with --skip-innodb-adaptive-hash-index.", |
128 | NULL, innodb_adaptive_hash_index_update, TRUE); |
129 | |
130 | @@ -1068,7 +1097,7 @@ |
131 | static MYSQL_SYSVAR_ULONG(replication_delay, srv_replication_delay, |
132 | PLUGIN_VAR_RQCMDARG, |
133 | "Replication thread delay (ms) on the slave server if " |
134 | -@@ -12068,6 +12073,7 @@ |
135 | +@@ -12086,6 +12091,7 @@ |
136 | MYSQL_SYSVAR(use_sys_stats_table), |
137 | MYSQL_SYSVAR(stats_sample_pages), |
138 | MYSQL_SYSVAR(adaptive_hash_index), |
139 | @@ -1264,7 +1293,7 @@ |
140 | diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h |
141 | --- a/storage/innobase/include/buf0buf.h 2010-12-15 19:00:07.713604580 +0900 |
142 | +++ b/storage/innobase/include/buf0buf.h 2010-12-15 20:58:03.546839883 +0900 |
143 | -@@ -1546,7 +1546,7 @@ |
144 | +@@ -1543,7 +1543,7 @@ |
145 | pointers in the adaptive hash index |
146 | pointing to this frame */ |
147 | #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ |
148 | @@ -1273,7 +1302,7 @@ |
149 | already been built on this |
150 | page; note that it does not |
151 | guarantee that the index is |
152 | -@@ -1560,6 +1560,7 @@ |
153 | +@@ -1557,6 +1557,7 @@ |
154 | unsigned curr_left_side:1;/*!< TRUE or FALSE in hash indexing */ |
155 | dict_index_t* index; /*!< Index for which the adaptive |
156 | hash index has been created. */ |
157 | @@ -1329,7 +1358,7 @@ |
158 | diff -ruN a/storage/innobase/row/row0sel.c b/storage/innobase/row/row0sel.c |
159 | --- a/storage/innobase/row/row0sel.c 2010-12-04 16:09:53.204513572 +0900 |
160 | +++ b/storage/innobase/row/row0sel.c 2010-12-04 16:12:48.722551273 +0900 |
161 | -@@ -1210,7 +1210,7 @@ |
162 | +@@ -1211,7 +1211,7 @@ |
163 | ut_ad(plan->unique_search); |
164 | ut_ad(!plan->must_get_clust); |
165 | #ifdef UNIV_SYNC_DEBUG |
166 | @@ -1338,7 +1367,7 @@ |
167 | #endif /* UNIV_SYNC_DEBUG */ |
168 | |
169 | row_sel_open_pcur(plan, TRUE, mtr); |
170 | -@@ -1381,10 +1381,10 @@ |
171 | +@@ -1382,10 +1382,10 @@ |
172 | && !plan->must_get_clust |
173 | && !plan->table->big_rows) { |
174 | if (!search_latch_locked) { |
175 | @@ -1351,7 +1380,7 @@ |
176 | |
177 | /* There is an x-latch request waiting: release the |
178 | s-latch for a moment; as an s-latch here is often |
179 | -@@ -1393,8 +1393,8 @@ |
180 | +@@ -1394,8 +1394,8 @@ |
181 | from acquiring an s-latch for a long time, lowering |
182 | performance significantly in multiprocessors. */ |
183 | |
184 | @@ -1362,7 +1391,7 @@ |
185 | } |
186 | |
187 | found_flag = row_sel_try_search_shortcut(node, plan, &mtr); |
188 | -@@ -1417,7 +1417,7 @@ |
189 | +@@ -1418,7 +1418,7 @@ |
190 | } |
191 | |
192 | if (search_latch_locked) { |
193 | @@ -1371,7 +1400,7 @@ |
194 | |
195 | search_latch_locked = FALSE; |
196 | } |
197 | -@@ -1993,7 +1993,7 @@ |
198 | +@@ -1994,7 +1994,7 @@ |
199 | |
200 | func_exit: |
201 | if (search_latch_locked) { |
202 | @@ -1380,7 +1409,7 @@ |
203 | } |
204 | if (UNIV_LIKELY_NULL(heap)) { |
205 | mem_heap_free(heap); |
206 | -@@ -3356,6 +3356,8 @@ |
207 | +@@ -3357,6 +3357,8 @@ |
208 | /* if the returned record was locked and we did a semi-consistent |
209 | read (fetch the newest committed version), then this is set to |
210 | TRUE */ |
211 | @@ -1389,7 +1418,7 @@ |
212 | #ifdef UNIV_SEARCH_DEBUG |
213 | ulint cnt = 0; |
214 | #endif /* UNIV_SEARCH_DEBUG */ |
215 | -@@ -3446,18 +3448,33 @@ |
216 | +@@ -3447,18 +3449,33 @@ |
217 | /* PHASE 0: Release a possible s-latch we are holding on the |
218 | adaptive hash index latch if there is someone waiting behind */ |
219 | |
220 | @@ -1427,7 +1456,7 @@ |
221 | } |
222 | |
223 | /* Reset the new record lock info if srv_locks_unsafe_for_binlog |
224 | -@@ -3608,9 +3625,28 @@ |
225 | +@@ -3609,9 +3626,28 @@ |
226 | hash index semaphore! */ |
227 | |
228 | #ifndef UNIV_SEARCH_DEBUG |
229 | @@ -1459,7 +1488,7 @@ |
230 | } |
231 | #endif |
232 | switch (row_sel_try_search_shortcut_for_mysql( |
233 | -@@ -3671,7 +3707,11 @@ |
234 | +@@ -3672,7 +3708,11 @@ |
235 | |
236 | trx->search_latch_timeout--; |
237 | |
238 | @@ -1472,7 +1501,7 @@ |
239 | trx->has_search_latch = FALSE; |
240 | } |
241 | |
242 | -@@ -3695,7 +3735,12 @@ |
243 | +@@ -3696,7 +3736,12 @@ |
244 | /* PHASE 3: Open or restore index cursor position */ |
245 | |
246 | if (trx->has_search_latch) { |
247 | |
248 | === modified file 'innodb_admin_command_base.patch' |
249 | --- innodb_admin_command_base.patch 2011-06-10 10:07:06 +0000 |
250 | +++ innodb_admin_command_base.patch 2011-08-01 03:32:34 +0000 |
251 | @@ -8,7 +8,7 @@ |
252 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
253 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:32:15.624039043 +0900 |
254 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:32:35.424957827 +0900 |
255 | -@@ -11863,7 +11863,8 @@ |
256 | +@@ -11881,7 +11881,8 @@ |
257 | i_s_innodb_sys_foreign_cols, |
258 | i_s_innodb_sys_stats, |
259 | i_s_innodb_table_stats, |
260 | |
261 | === modified file 'innodb_buffer_pool_pages_i_s.patch' |
262 | --- innodb_buffer_pool_pages_i_s.patch 2011-06-27 07:12:14 +0000 |
263 | +++ innodb_buffer_pool_pages_i_s.patch 2011-08-01 03:32:34 +0000 |
264 | @@ -8,7 +8,7 @@ |
265 | diff -ruN a/storage/innobase/buf/buf0buf.c b/storage/innobase/buf/buf0buf.c |
266 | --- a/storage/innobase/buf/buf0buf.c 2010-12-04 20:20:44.595483291 +0900 |
267 | +++ b/storage/innobase/buf/buf0buf.c 2010-12-06 19:28:04.055227506 +0900 |
268 | -@@ -4560,6 +4560,36 @@ |
269 | +@@ -4159,6 +4159,36 @@ |
270 | mutex_exit(block_mutex); |
271 | } |
272 | |
273 | @@ -48,7 +48,7 @@ |
274 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
275 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 20:20:44.614551139 +0900 |
276 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-06 19:23:47.622195800 +0900 |
277 | -@@ -12148,6 +12148,9 @@ |
278 | +@@ -12166,6 +12166,9 @@ |
279 | i_s_innodb_sys_stats, |
280 | i_s_innodb_table_stats, |
281 | i_s_innodb_index_stats, |
282 | @@ -786,7 +786,7 @@ |
283 | diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h |
284 | --- a/storage/innobase/include/buf0buf.h 2010-12-04 19:46:40.197471531 +0900 |
285 | +++ b/storage/innobase/include/buf0buf.h 2010-12-06 19:23:47.638195824 +0900 |
286 | -@@ -1144,6 +1144,14 @@ |
287 | +@@ -1141,6 +1141,14 @@ |
288 | /*===========*/ |
289 | const buf_pool_t* buf_pool) /*!< in: buffer pool */ |
290 | __attribute__((nonnull, const)); |
291 | |
292 | === modified file 'innodb_buffer_pool_shm.patch' |
293 | --- innodb_buffer_pool_shm.patch 2011-06-23 07:32:16 +0000 |
294 | +++ innodb_buffer_pool_shm.patch 2011-08-01 03:32:34 +0000 |
295 | @@ -35,16 +35,16 @@ |
296 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
297 | --- a/storage/innobase/handler/ha_innodb.cc 2011-04-09 18:48:47.000000000 +0400 |
298 | +++ b/storage/innobase/handler/ha_innodb.cc 2011-04-09 18:48:48.000000000 +0400 |
299 | -@@ -194,6 +194,8 @@ |
300 | - static my_bool innobase_create_status_file = FALSE; |
301 | +@@ -195,6 +195,8 @@ |
302 | static my_bool innobase_stats_on_metadata = TRUE; |
303 | + static my_bool innobase_large_prefix = FALSE; |
304 | static my_bool innobase_use_sys_stats_table = FALSE; |
305 | +static my_bool innobase_buffer_pool_shm_checksum = TRUE; |
306 | +static uint innobase_buffer_pool_shm_key = 0; |
307 | |
308 | |
309 | static char* internal_innobase_data_file_path = NULL; |
310 | -@@ -2670,6 +2672,12 @@ |
311 | +@@ -2676,6 +2678,12 @@ |
312 | srv_buf_pool_size = (ulint) innobase_buffer_pool_size; |
313 | srv_buf_pool_instances = (ulint) innobase_buffer_pool_instances; |
314 | |
315 | @@ -57,7 +57,7 @@ |
316 | srv_mem_pool_size = (ulint) innobase_additional_mem_pool_size; |
317 | |
318 | srv_n_file_io_threads = (ulint) innobase_file_io_threads; |
319 | -@@ -11733,6 +11741,16 @@ |
320 | +@@ -11750,6 +11758,16 @@ |
321 | "Number of buffer pool instances, set to higher value on high-end machines to increase scalability", |
322 | NULL, NULL, 1L, 1L, MAX_BUFFER_POOLS, 1L); |
323 | |
324 | @@ -74,7 +74,7 @@ |
325 | static MYSQL_SYSVAR_ULONG(commit_concurrency, innobase_commit_concurrency, |
326 | PLUGIN_VAR_RQCMDARG, |
327 | "Helps in performance tuning in heavily concurrent environments.", |
328 | -@@ -12027,6 +12045,8 @@ |
329 | +@@ -12044,6 +12062,8 @@ |
330 | MYSQL_SYSVAR(autoextend_increment), |
331 | MYSQL_SYSVAR(buffer_pool_size), |
332 | MYSQL_SYSVAR(buffer_pool_instances), |
333 | |
334 | === modified file 'innodb_bug60788.patch' |
335 | --- innodb_bug60788.patch 2011-06-29 09:32:51 +0000 |
336 | +++ innodb_bug60788.patch 2011-08-01 03:32:34 +0000 |
337 | @@ -10,7 +10,7 @@ |
338 | diff -ruN a/storage/innobase/os/os0file.c b/storage/innobase/os/os0file.c |
339 | --- a/storage/innobase/os/os0file.c 2011-04-20 12:09:57.000000000 +0400 |
340 | +++ b/storage/innobase/os/os0file.c 2011-04-20 12:10:04.000000000 +0400 |
341 | -@@ -2092,6 +2092,9 @@ |
342 | +@@ -2093,6 +2093,9 @@ |
343 | failures++; |
344 | |
345 | retry = TRUE; |
346 | @@ -20,7 +20,7 @@ |
347 | } else { |
348 | |
349 | retry = FALSE; |
350 | -@@ -2222,6 +2225,7 @@ |
351 | +@@ -2223,6 +2226,7 @@ |
352 | off_t offs; |
353 | #if defined(HAVE_PREAD) && !defined(HAVE_BROKEN_PREAD) |
354 | ssize_t n_bytes; |
355 | @@ -28,7 +28,7 @@ |
356 | #endif /* HAVE_PREAD && !HAVE_BROKEN_PREAD */ |
357 | ulint sec; |
358 | ulint ms; |
359 | -@@ -2262,7 +2266,18 @@ |
360 | +@@ -2263,7 +2267,18 @@ |
361 | os_n_pending_reads++; |
362 | os_mutex_exit(os_file_count_mutex); |
363 | |
364 | @@ -48,7 +48,7 @@ |
365 | |
366 | os_mutex_enter(os_file_count_mutex); |
367 | os_file_n_pending_preads--; |
368 | -@@ -2281,6 +2296,7 @@ |
369 | +@@ -2282,6 +2297,7 @@ |
370 | { |
371 | off_t ret_offset; |
372 | ssize_t ret; |
373 | @@ -56,7 +56,7 @@ |
374 | #ifndef UNIV_HOTBACKUP |
375 | ulint i; |
376 | #endif /* !UNIV_HOTBACKUP */ |
377 | -@@ -2301,7 +2317,17 @@ |
378 | +@@ -2302,7 +2318,17 @@ |
379 | if (ret_offset < 0) { |
380 | ret = -1; |
381 | } else { |
382 | @@ -75,7 +75,7 @@ |
383 | } |
384 | |
385 | #ifndef UNIV_HOTBACKUP |
386 | -@@ -2340,6 +2366,7 @@ |
387 | +@@ -2341,6 +2367,7 @@ |
388 | offset */ |
389 | { |
390 | ssize_t ret; |
391 | @@ -83,7 +83,7 @@ |
392 | off_t offs; |
393 | |
394 | ut_a((offset & 0xFFFFFFFFUL) == offset); |
395 | -@@ -2367,7 +2394,18 @@ |
396 | +@@ -2368,7 +2395,18 @@ |
397 | os_n_pending_writes++; |
398 | os_mutex_exit(os_file_count_mutex); |
399 | |
400 | @@ -103,7 +103,7 @@ |
401 | |
402 | os_mutex_enter(os_file_count_mutex); |
403 | os_file_n_pending_pwrites--; |
404 | -@@ -2414,7 +2452,17 @@ |
405 | +@@ -2415,7 +2453,17 @@ |
406 | goto func_exit; |
407 | } |
408 | |
409 | |
410 | === modified file 'innodb_deadlock_count.patch' |
411 | --- innodb_deadlock_count.patch 2011-06-10 10:07:06 +0000 |
412 | +++ innodb_deadlock_count.patch 2011-08-01 03:32:34 +0000 |
413 | @@ -8,7 +8,7 @@ |
414 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
415 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 16:09:53.145500265 +0900 |
416 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 16:10:24.605515894 +0900 |
417 | -@@ -686,6 +686,8 @@ |
418 | +@@ -687,6 +687,8 @@ |
419 | (char*) &export_vars.innodb_dblwr_pages_written, SHOW_LONG}, |
420 | {"dblwr_writes", |
421 | (char*) &export_vars.innodb_dblwr_writes, SHOW_LONG}, |
422 | @@ -42,7 +42,7 @@ |
423 | diff -ruN a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c |
424 | --- a/storage/innobase/lock/lock0lock.c 2010-12-03 17:49:11.609953956 +0900 |
425 | +++ b/storage/innobase/lock/lock0lock.c 2010-12-04 16:10:24.608513889 +0900 |
426 | -@@ -3328,6 +3328,7 @@ |
427 | +@@ -3330,6 +3330,7 @@ |
428 | break; |
429 | |
430 | case LOCK_VICTIM_IS_START: |
431 | |
432 | === modified file 'innodb_dict_size_limit.patch' |
433 | --- innodb_dict_size_limit.patch 2011-06-10 10:07:06 +0000 |
434 | +++ innodb_dict_size_limit.patch 2011-08-01 03:32:34 +0000 |
435 | @@ -252,7 +252,7 @@ |
436 | diff -ruN a/storage/innobase/dict/dict0crea.c b/storage/innobase/dict/dict0crea.c |
437 | --- a/storage/innobase/dict/dict0crea.c 2010-11-03 07:01:13.000000000 +0900 |
438 | +++ b/storage/innobase/dict/dict0crea.c 2010-12-03 15:45:47.521955810 +0900 |
439 | -@@ -1210,6 +1210,9 @@ |
440 | +@@ -1209,6 +1209,9 @@ |
441 | /* Foreign constraint system tables have already been |
442 | created, and they are ok */ |
443 | |
444 | @@ -262,7 +262,7 @@ |
445 | mutex_exit(&(dict_sys->mutex)); |
446 | |
447 | return(DB_SUCCESS); |
448 | -@@ -1291,6 +1294,11 @@ |
449 | +@@ -1290,6 +1293,11 @@ |
450 | |
451 | trx_commit_for_mysql(trx); |
452 | |
453 | @@ -360,7 +360,7 @@ |
454 | /****************************************************************//** |
455 | If the given column name is reserved for InnoDB system columns, return |
456 | TRUE. |
457 | -@@ -1728,6 +1790,11 @@ |
458 | +@@ -1762,6 +1824,11 @@ |
459 | ut_ad(index->magic_n == DICT_INDEX_MAGIC_N); |
460 | ut_ad(mutex_own(&(dict_sys->mutex))); |
461 | |
462 | @@ -375,7 +375,7 @@ |
463 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
464 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:43:57.294986852 +0900 |
465 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:45:47.534959966 +0900 |
466 | -@@ -674,6 +674,8 @@ |
467 | +@@ -675,6 +675,8 @@ |
468 | (char*) &export_vars.innodb_dblwr_pages_written, SHOW_LONG}, |
469 | {"dblwr_writes", |
470 | (char*) &export_vars.innodb_dblwr_writes, SHOW_LONG}, |
471 | @@ -384,7 +384,7 @@ |
472 | {"have_atomic_builtins", |
473 | (char*) &export_vars.innodb_have_atomic_builtins, SHOW_BOOL}, |
474 | {"log_waits", |
475 | -@@ -11642,6 +11644,11 @@ |
476 | +@@ -11659,6 +11661,11 @@ |
477 | "Choose method of innodb_adaptive_flushing. (native, [estimate], keep_average)", |
478 | NULL, innodb_adaptive_flushing_method_update, 1, &adaptive_flushing_method_typelib); |
479 | |
480 | @@ -396,7 +396,7 @@ |
481 | static struct st_mysql_sys_var* innobase_system_variables[]= { |
482 | MYSQL_SYSVAR(additional_mem_pool_size), |
483 | MYSQL_SYSVAR(autoextend_increment), |
484 | -@@ -11709,6 +11716,7 @@ |
485 | +@@ -11727,6 +11734,7 @@ |
486 | MYSQL_SYSVAR(flush_neighbor_pages), |
487 | MYSQL_SYSVAR(read_ahead), |
488 | MYSQL_SYSVAR(adaptive_flushing_method), |
489 | @@ -435,7 +435,7 @@ |
490 | diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h |
491 | --- a/storage/innobase/include/buf0buf.h 2011-02-01 18:00:03.000000000 +0900 |
492 | +++ b/storage/innobase/include/buf0buf.h 2011-02-01 18:03:29.000000000 +0900 |
493 | -@@ -1555,6 +1555,15 @@ |
494 | +@@ -1558,6 +1558,15 @@ |
495 | #define BUF_POOL_ZIP_FOLD_BPAGE(b) BUF_POOL_ZIP_FOLD((buf_block_t*) (b)) |
496 | /* @} */ |
497 | |
498 | @@ -454,7 +454,7 @@ |
499 | diff -ruN a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h |
500 | --- a/storage/innobase/include/dict0dict.h 2010-11-03 07:01:13.000000000 +0900 |
501 | +++ b/storage/innobase/include/dict0dict.h 2010-12-03 15:45:47.558024515 +0900 |
502 | -@@ -1170,6 +1170,12 @@ |
503 | +@@ -1183,6 +1183,12 @@ |
504 | /*====================================*/ |
505 | dict_table_t* table, /*!< in: table */ |
506 | const char* name); /*!< in: name of the index to find */ |
507 | |
508 | === modified file 'innodb_expand_fast_index_creation.patch' |
509 | --- innodb_expand_fast_index_creation.patch 2011-05-11 13:27:33 +0000 |
510 | +++ innodb_expand_fast_index_creation.patch 2011-08-01 03:32:34 +0000 |
511 | @@ -219,7 +219,7 @@ |
512 | +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; |
513 | + |
514 | +###################################### |
515 | -+DROP TABLE t1; |
516 | ++DROP t1; |
517 | +CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB; |
518 | +INSERT INTO t2 VALUES (0), (1), (2); |
519 | +CREATE TABLE t1 ( |
520 | @@ -301,7 +301,7 @@ |
521 | diff -ruN a/mysql-test/suite/innodb/t/innodb-index.test b/mysql-test/suite/innodb/t/innodb-index.test |
522 | --- a/mysql-test/suite/innodb/t/innodb-index.test 2011-03-31 17:36:17.000000000 +0400 |
523 | +++ b/mysql-test/suite/innodb/t/innodb-index.test 2011-04-11 08:57:21.000000000 +0400 |
524 | -@@ -28,6 +28,11 @@ |
525 | +@@ -87,6 +87,11 @@ |
526 | show create table t1; |
527 | --error ER_MULTIPLE_PRI_KEY |
528 | alter table t1 add primary key (c); |
529 | @@ -419,7 +419,7 @@ |
530 | diff -ruN a/sql/sql_lex.h b/sql/sql_lex.h |
531 | --- a/sql/sql_lex.h 2011-04-11 08:57:19.000000000 +0400 |
532 | +++ b/sql/sql_lex.h 2011-04-11 08:57:21.000000000 +0400 |
533 | -@@ -1003,6 +1003,9 @@ |
534 | +@@ -1009,6 +1009,9 @@ |
535 | List<Alter_column> alter_list; |
536 | List<Key> key_list; |
537 | List<Create_field> create_list; |
538 | @@ -429,7 +429,7 @@ |
539 | uint flags; |
540 | enum enum_enable_or_disable keys_onoff; |
541 | enum tablespace_op_type tablespace_op; |
542 | -@@ -1014,6 +1017,8 @@ |
543 | +@@ -1020,6 +1023,8 @@ |
544 | |
545 | |
546 | Alter_info() : |
547 | @@ -438,7 +438,7 @@ |
548 | flags(0), |
549 | keys_onoff(LEAVE_AS_IS), |
550 | tablespace_op(NO_TABLESPACE_OP), |
551 | -@@ -1029,6 +1034,9 @@ |
552 | +@@ -1035,6 +1040,9 @@ |
553 | alter_list.empty(); |
554 | key_list.empty(); |
555 | create_list.empty(); |
556 | @@ -451,7 +451,7 @@ |
557 | diff -ruN a/sql/sql_table.cc b/sql/sql_table.cc |
558 | --- a/sql/sql_table.cc 2011-04-11 08:56:57.000000000 +0400 |
559 | +++ b/sql/sql_table.cc 2011-04-11 23:30:02.000000000 +0400 |
560 | -@@ -2773,7 +2773,7 @@ |
561 | +@@ -2774,7 +2774,7 @@ |
562 | file The handler for the new table. |
563 | key_info_buffer OUT An array of KEY structs for the indexes. |
564 | key_count OUT The number of elements in the array. |
565 | @@ -460,7 +460,7 @@ |
566 | |
567 | DESCRIPTION |
568 | Prepares the table and key structures for table creation. |
569 | -@@ -3119,7 +3119,6 @@ |
570 | +@@ -3120,7 +3120,6 @@ |
571 | } |
572 | |
573 | /* Create keys */ |
574 | @@ -468,7 +468,7 @@ |
575 | List_iterator<Key> key_iterator(alter_info->key_list); |
576 | List_iterator<Key> key_iterator2(alter_info->key_list); |
577 | uint key_parts=0, fk_key_count=0; |
578 | -@@ -3217,6 +3216,14 @@ |
579 | +@@ -3218,6 +3217,14 @@ |
580 | if (!*key_info_buffer || ! key_part_info) |
581 | DBUG_RETURN(TRUE); // Out of memory |
582 | |
583 | @@ -483,7 +483,7 @@ |
584 | key_iterator.rewind(); |
585 | key_number=0; |
586 | for (; (key=key_iterator++) ; key_number++) |
587 | -@@ -3635,6 +3642,22 @@ |
588 | +@@ -3636,6 +3643,22 @@ |
589 | key_info->comment.str= key->key_create_info.comment.str; |
590 | } |
591 | |
592 | @@ -506,7 +506,7 @@ |
593 | key_info++; |
594 | } |
595 | if (!unique_key && !primary_key && |
596 | -@@ -5247,6 +5270,10 @@ |
597 | +@@ -5249,6 +5272,10 @@ |
598 | List<Create_field> new_create_list; |
599 | /* New key definitions are added here */ |
600 | List<Key> new_key_list; |
601 | @@ -517,7 +517,7 @@ |
602 | List_iterator<Alter_drop> drop_it(alter_info->drop_list); |
603 | List_iterator<Create_field> def_it(alter_info->create_list); |
604 | List_iterator<Alter_column> alter_it(alter_info->alter_list); |
605 | -@@ -5259,6 +5286,7 @@ |
606 | +@@ -5261,6 +5288,7 @@ |
607 | uint used_fields= create_info->used_fields; |
608 | KEY *key_info=table->key_info; |
609 | bool rc= TRUE; |
610 | @@ -525,7 +525,7 @@ |
611 | |
612 | DBUG_ENTER("mysql_prepare_alter_table"); |
613 | |
614 | -@@ -5431,7 +5459,23 @@ |
615 | +@@ -5433,7 +5461,23 @@ |
616 | /* |
617 | Collect all keys which isn't in drop list. Add only those |
618 | for which some fields exists. |
619 | @@ -550,7 +550,7 @@ |
620 | |
621 | for (uint i=0 ; i < table->s->keys ; i++,key_info++) |
622 | { |
623 | -@@ -5548,6 +5592,8 @@ |
624 | +@@ -5550,6 +5594,8 @@ |
625 | test(key_info->flags & HA_GENERATED_KEY), |
626 | key_parts); |
627 | new_key_list.push_back(key); |
628 | @@ -559,7 +559,7 @@ |
629 | } |
630 | } |
631 | { |
632 | -@@ -5555,7 +5601,21 @@ |
633 | +@@ -5557,7 +5603,21 @@ |
634 | while ((key=key_it++)) // Add new keys |
635 | { |
636 | if (key->type != Key::FOREIGN_KEY) |
637 | @@ -581,7 +581,7 @@ |
638 | if (key->name.str && |
639 | !my_strcasecmp(system_charset_info, key->name.str, primary_key_name)) |
640 | { |
641 | -@@ -5604,12 +5664,100 @@ |
642 | +@@ -5606,12 +5666,101 @@ |
643 | rc= FALSE; |
644 | alter_info->create_list.swap(new_create_list); |
645 | alter_info->key_list.swap(new_key_list); |
646 | @@ -659,9 +659,9 @@ |
647 | + for (key_part= key->key_part; key_part < part_end; key_part++) |
648 | + key_part->field= table->field[key_part->fieldnr]; |
649 | + } |
650 | -+ |
651 | ++ handler_add_index *add= 0; |
652 | + if ((error= table->file->add_index(table, alter_info->delayed_key_info, |
653 | -+ alter_info->delayed_key_count))) |
654 | ++ alter_info->delayed_key_count, &add))) |
655 | + { |
656 | + /* |
657 | + Exchange the key_info for the error message. If we exchange |
658 | @@ -674,6 +674,7 @@ |
659 | + |
660 | + DBUG_RETURN(error); |
661 | + } |
662 | ++ table->file->final_add_index(add, true); |
663 | + |
664 | + DBUG_RETURN(0); |
665 | +} |
666 | @@ -682,7 +683,7 @@ |
667 | Alter table |
668 | |
669 | SYNOPSIS |
670 | -@@ -6400,19 +6548,38 @@ |
671 | +@@ -6404,19 +6552,38 @@ |
672 | */ |
673 | if (new_table && !(new_table->file->ha_table_flags() & HA_NO_COPY_ON_ALTER)) |
674 | { |
675 | |
676 | === modified file 'innodb_expand_import.patch' |
677 | --- innodb_expand_import.patch 2011-06-10 10:07:06 +0000 |
678 | +++ innodb_expand_import.patch 2011-08-01 03:32:34 +0000 |
679 | @@ -53,7 +53,7 @@ |
680 | #ifndef UNIV_HOTBACKUP |
681 | # include "buf0lru.h" |
682 | # include "ibuf0ibuf.h" |
683 | -@@ -3032,6 +3040,84 @@ |
684 | +@@ -3033,6 +3041,84 @@ |
685 | } |
686 | |
687 | /********************************************************************//** |
688 | @@ -138,7 +138,7 @@ |
689 | Tries to open a single-table tablespace and optionally checks the space id is |
690 | right in it. If does not succeed, prints an error message to the .err log. This |
691 | function is used to open a tablespace when we start up mysqld, and also in |
692 | -@@ -3078,7 +3164,7 @@ |
693 | +@@ -3079,7 +3165,7 @@ |
694 | |
695 | file = os_file_create_simple_no_error_handling( |
696 | innodb_file_data_key, filepath, OS_FILE_OPEN, |
697 | @@ -147,7 +147,7 @@ |
698 | if (!success) { |
699 | /* The following call prints an error message */ |
700 | os_file_get_last_error(TRUE); |
701 | -@@ -3125,6 +3211,445 @@ |
702 | +@@ -3126,6 +3212,445 @@ |
703 | space_id = fsp_header_get_space_id(page); |
704 | space_flags = fsp_header_get_flags(page); |
705 | |
706 | @@ -593,7 +593,7 @@ |
707 | ut_free(buf2); |
708 | |
709 | if (UNIV_UNLIKELY(space_id != id |
710 | -@@ -3166,6 +3691,271 @@ |
711 | +@@ -3167,6 +3692,271 @@ |
712 | os_file_close(file); |
713 | mem_free(filepath); |
714 | |
715 | @@ -868,7 +868,7 @@ |
716 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
717 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:49:59.195023983 +0900 |
718 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:52:23.555957062 +0900 |
719 | -@@ -7377,6 +7377,14 @@ |
720 | +@@ -7389,6 +7389,14 @@ |
721 | err = row_discard_tablespace_for_mysql(dict_table->name, trx); |
722 | } else { |
723 | err = row_import_tablespace_for_mysql(dict_table->name, trx); |
724 | @@ -883,7 +883,7 @@ |
725 | } |
726 | |
727 | err = convert_error_code_to_mysql(err, dict_table->flags, NULL); |
728 | -@@ -11649,6 +11657,11 @@ |
729 | +@@ -11666,6 +11674,11 @@ |
730 | "Choose method of innodb_adaptive_flushing. (native, [estimate], keep_average)", |
731 | NULL, innodb_adaptive_flushing_method_update, 1, &adaptive_flushing_method_typelib); |
732 | |
733 | @@ -895,7 +895,7 @@ |
734 | static MYSQL_SYSVAR_ULONG(dict_size_limit, srv_dict_size_limit, |
735 | PLUGIN_VAR_RQCMDARG, |
736 | "Limit the allocated memory for dictionary cache. (0: unlimited)", |
737 | -@@ -11721,6 +11734,7 @@ |
738 | +@@ -11739,6 +11752,7 @@ |
739 | MYSQL_SYSVAR(flush_neighbor_pages), |
740 | MYSQL_SYSVAR(read_ahead), |
741 | MYSQL_SYSVAR(adaptive_flushing_method), |
742 | @@ -1033,7 +1033,7 @@ |
743 | diff -ruN a/storage/innobase/row/row0mysql.c b/storage/innobase/row/row0mysql.c |
744 | --- a/storage/innobase/row/row0mysql.c 2011-04-11 19:44:03.000000000 +0900 |
745 | +++ b/storage/innobase/row/row0mysql.c 2011-06-06 11:53:18.395764565 +0900 |
746 | -@@ -2568,6 +2568,11 @@ |
747 | +@@ -2573,6 +2573,11 @@ |
748 | |
749 | current_lsn = log_get_lsn(); |
750 | |
751 | @@ -1045,7 +1045,7 @@ |
752 | /* It is possible, though very improbable, that the lsn's in the |
753 | tablespace to be imported have risen above the current system lsn, if |
754 | a lengthy purge, ibuf merge, or rollback was performed on a backup |
755 | -@@ -2679,6 +2684,11 @@ |
756 | +@@ -2684,6 +2689,11 @@ |
757 | |
758 | trx->op_info = ""; |
759 | |
760 | |
761 | === modified file 'innodb_extend_slow.patch' |
762 | --- innodb_extend_slow.patch 2011-06-29 09:32:51 +0000 |
763 | +++ innodb_extend_slow.patch 2011-08-01 03:32:34 +0000 |
764 | @@ -114,7 +114,7 @@ |
765 | buf_pool_t* buf_pool = buf_pool_get(space, offset); |
766 | |
767 | ut_ad(mtr); |
768 | -@@ -2875,6 +2935,9 @@ |
769 | +@@ -2876,6 +2936,9 @@ |
770 | || ibuf_page_low(space, zip_size, offset, |
771 | FALSE, file, line, NULL)); |
772 | #endif |
773 | @@ -124,7 +124,7 @@ |
774 | buf_pool->stat.n_page_gets++; |
775 | fold = buf_page_address_fold(space, offset); |
776 | loop: |
777 | -@@ -2949,7 +3012,7 @@ |
778 | +@@ -2950,7 +3013,7 @@ |
779 | return(NULL); |
780 | } |
781 | |
782 | @@ -335,7 +335,7 @@ |
783 | diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c |
784 | --- a/storage/innobase/fil/fil0fil.c 2010-12-03 15:53:54.610037199 +0900 |
785 | +++ b/storage/innobase/fil/fil0fil.c 2010-12-03 17:42:42.079064198 +0900 |
786 | -@@ -4747,7 +4747,7 @@ |
787 | +@@ -4748,7 +4748,7 @@ |
788 | node->name, node->handle, buf, |
789 | offset_low, offset_high, |
790 | page_size * n_pages, |
791 | @@ -344,7 +344,7 @@ |
792 | #endif |
793 | if (success) { |
794 | node->size += n_pages; |
795 | -@@ -5074,7 +5074,7 @@ |
796 | +@@ -5075,7 +5075,7 @@ |
797 | i/o on a tablespace which does not exist */ |
798 | UNIV_INTERN |
799 | ulint |
800 | @@ -353,7 +353,7 @@ |
801 | /*===*/ |
802 | ulint type, /*!< in: OS_FILE_READ or OS_FILE_WRITE, |
803 | ORed to OS_FILE_LOG, if a log i/o |
804 | -@@ -5099,8 +5099,9 @@ |
805 | +@@ -5100,8 +5100,9 @@ |
806 | void* buf, /*!< in/out: buffer where to store read data |
807 | or from where to write; in aio this must be |
808 | appropriately aligned */ |
809 | @@ -364,7 +364,7 @@ |
810 | { |
811 | ulint mode; |
812 | fil_space_t* space; |
813 | -@@ -5268,7 +5269,7 @@ |
814 | +@@ -5269,7 +5270,7 @@ |
815 | #else |
816 | /* Queue the aio request */ |
817 | ret = os_aio(type, mode | wake_later, node->name, node->handle, buf, |
818 | @@ -376,7 +376,7 @@ |
819 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
820 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:36:44.293955189 +0900 |
821 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:42:42.090024586 +0900 |
822 | -@@ -1573,6 +1573,16 @@ |
823 | +@@ -1579,6 +1579,16 @@ |
824 | trx->check_unique_secondary = !thd_test_options( |
825 | thd, OPTION_RELAXED_UNIQUE_CHECKS); |
826 | |
827 | @@ -393,7 +393,7 @@ |
828 | DBUG_VOID_RETURN; |
829 | } |
830 | |
831 | -@@ -1627,6 +1637,32 @@ |
832 | +@@ -1633,6 +1643,32 @@ |
833 | return(trx); |
834 | } |
835 | |
836 | @@ -426,7 +426,7 @@ |
837 | /*********************************************************************//** |
838 | Note that a transaction has been registered with MySQL. |
839 | @return true if transaction is registered with MySQL 2PC coordinator */ |
840 | -@@ -9301,6 +9337,25 @@ |
841 | +@@ -9313,6 +9349,25 @@ |
842 | statement has ended */ |
843 | |
844 | if (trx->n_mysql_tables_in_use == 0) { |
845 | @@ -675,7 +675,7 @@ |
846 | diff -ruN a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c |
847 | --- a/storage/innobase/lock/lock0lock.c 2010-12-03 15:09:51.297986437 +0900 |
848 | +++ b/storage/innobase/lock/lock0lock.c 2010-12-03 17:42:42.111024587 +0900 |
849 | -@@ -1755,6 +1755,8 @@ |
850 | +@@ -1765,6 +1765,8 @@ |
851 | { |
852 | lock_t* lock; |
853 | trx_t* trx; |
854 | @@ -684,7 +684,7 @@ |
855 | |
856 | ut_ad(mutex_own(&kernel_mutex)); |
857 | |
858 | -@@ -1813,6 +1815,10 @@ |
859 | +@@ -1823,6 +1825,10 @@ |
860 | trx->que_state = TRX_QUE_LOCK_WAIT; |
861 | trx->was_chosen_as_deadlock_victim = FALSE; |
862 | trx->wait_started = time(NULL); |
863 | @@ -695,7 +695,7 @@ |
864 | |
865 | ut_a(que_thr_stop(thr)); |
866 | |
867 | -@@ -3764,6 +3770,8 @@ |
868 | +@@ -3766,6 +3772,8 @@ |
869 | { |
870 | lock_t* lock; |
871 | trx_t* trx; |
872 | @@ -704,7 +704,7 @@ |
873 | |
874 | ut_ad(mutex_own(&kernel_mutex)); |
875 | |
876 | -@@ -3819,6 +3827,10 @@ |
877 | +@@ -3821,6 +3829,10 @@ |
878 | return(DB_SUCCESS); |
879 | } |
880 | |
881 | @@ -727,7 +727,7 @@ |
882 | #include "log0recv.h" |
883 | #ifndef UNIV_HOTBACKUP |
884 | # include "os0sync.h" |
885 | -@@ -2212,13 +2214,18 @@ |
886 | +@@ -2213,13 +2215,18 @@ |
887 | ulint n, /*!< in: number of bytes to read */ |
888 | ulint offset, /*!< in: least significant 32 bits of file |
889 | offset from where to read */ |
890 | @@ -747,7 +747,7 @@ |
891 | |
892 | ut_a((offset & 0xFFFFFFFFUL) == offset); |
893 | |
894 | -@@ -2239,6 +2246,15 @@ |
895 | +@@ -2240,6 +2247,15 @@ |
896 | |
897 | os_n_file_reads++; |
898 | |
899 | @@ -763,7 +763,7 @@ |
900 | #if defined(HAVE_PREAD) && !defined(HAVE_BROKEN_PREAD) |
901 | os_mutex_enter(os_file_count_mutex); |
902 | os_file_n_pending_preads++; |
903 | -@@ -2252,6 +2268,13 @@ |
904 | +@@ -2253,6 +2269,13 @@ |
905 | os_n_pending_reads--; |
906 | os_mutex_exit(os_file_count_mutex); |
907 | |
908 | @@ -777,7 +777,7 @@ |
909 | return(n_bytes); |
910 | #else |
911 | { |
912 | -@@ -2288,6 +2311,13 @@ |
913 | +@@ -2289,6 +2312,13 @@ |
914 | os_n_pending_reads--; |
915 | os_mutex_exit(os_file_count_mutex); |
916 | |
917 | @@ -791,7 +791,7 @@ |
918 | return(ret); |
919 | } |
920 | #endif |
921 | -@@ -2428,7 +2458,8 @@ |
922 | +@@ -2429,7 +2459,8 @@ |
923 | offset where to read */ |
924 | ulint offset_high, /*!< in: most significant 32 bits of |
925 | offset */ |
926 | @@ -801,7 +801,7 @@ |
927 | { |
928 | #ifdef __WIN__ |
929 | BOOL ret; |
930 | -@@ -2503,7 +2534,7 @@ |
931 | +@@ -2504,7 +2535,7 @@ |
932 | os_bytes_read_since_printout += n; |
933 | |
934 | try_again: |
935 | @@ -810,7 +810,7 @@ |
936 | |
937 | if ((ulint)ret == n) { |
938 | |
939 | -@@ -2632,7 +2663,7 @@ |
940 | +@@ -2633,7 +2664,7 @@ |
941 | os_bytes_read_since_printout += n; |
942 | |
943 | try_again: |
944 | @@ -819,7 +819,7 @@ |
945 | |
946 | if ((ulint)ret == n) { |
947 | |
948 | -@@ -4026,10 +4057,11 @@ |
949 | +@@ -4027,10 +4058,11 @@ |
950 | (can be used to identify a completed |
951 | aio operation); ignored if mode is |
952 | OS_AIO_SYNC */ |
953 | @@ -832,18 +832,16 @@ |
954 | { |
955 | os_aio_array_t* array; |
956 | os_aio_slot_t* slot; |
957 | -@@ -4070,8 +4102,8 @@ |
958 | - wait in the Windows case. */ |
959 | +@@ -4078,7 +4110,7 @@ |
960 | |
961 | if (type == OS_FILE_READ) { |
962 | -- return(os_file_read(file, buf, offset, |
963 | + return(os_file_read_func(file, buf, offset, |
964 | - offset_high, n)); |
965 | -+ return(os_file_read_trx(file, buf, offset, |
966 | + offset_high, n, trx)); |
967 | } |
968 | |
969 | ut_a(type == OS_FILE_WRITE); |
970 | -@@ -4111,6 +4143,11 @@ |
971 | +@@ -4119,6 +4151,11 @@ |
972 | array = NULL; /* Eliminate compiler warning */ |
973 | } |
974 | |
975 | @@ -901,7 +899,7 @@ |
976 | + |
977 | trx->op_info = "waiting in InnoDB queue"; |
978 | |
979 | - thd_wait_begin(trx->mysql_thd, THD_WAIT_ROW_TABLE_LOCK); |
980 | + thd_wait_begin(trx->mysql_thd, THD_WAIT_USER_LOCK); |
981 | @@ -1379,6 +1395,12 @@ |
982 | |
983 | trx->op_info = ""; |
984 | |
985 | === modified file 'innodb_extra_rseg.patch' |
986 | --- innodb_extra_rseg.patch 2011-06-10 10:07:06 +0000 |
987 | +++ innodb_extra_rseg.patch 2011-08-01 03:32:34 +0000 |
988 | @@ -8,7 +8,7 @@ |
989 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
990 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:18:48.879955903 +0900 |
991 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:22:53.779955671 +0900 |
992 | -@@ -11528,6 +11528,7 @@ |
993 | +@@ -11546,6 +11546,7 @@ |
994 | innobase_system_variables, /* system variables */ |
995 | NULL /* reserved */ |
996 | }, |
997 | |
998 | === modified file 'innodb_fake_changes.patch' |
999 | --- innodb_fake_changes.patch 2011-07-06 11:02:28 +0000 |
1000 | +++ innodb_fake_changes.patch 2011-08-01 03:32:34 +0000 |
1001 | @@ -1,5 +1,5 @@ |
1002 | # name : innodb_fake_changes.patch |
1003 | -# introduced : 5.5.13 |
1004 | +# introduced : 5.5.14 |
1005 | # maintainer : Yasufumi |
1006 | # |
1007 | #!!! notice !!! |
1008 | @@ -182,20 +182,20 @@ |
1009 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
1010 | --- a/storage/innobase/handler/ha_innodb.cc 2011-06-01 21:04:26.511385596 +0900 |
1011 | +++ b/storage/innobase/handler/ha_innodb.cc 2011-06-01 21:04:53.723390828 +0900 |
1012 | -@@ -485,6 +485,12 @@ |
1013 | +@@ -486,6 +486,12 @@ |
1014 | " or 2 (write at commit, flush once per second).", |
1015 | NULL, NULL, 1, 0, 2, 0); |
1016 | |
1017 | +static MYSQL_THDVAR_BOOL(fake_changes, PLUGIN_VAR_OPCMDARG, |
1018 | + "In the transaction after enabled, UPDATE, INSERT and DELETE only move the cursor to the records " |
1019 | + "and do nothing other operations (no changes, no ibuf, no undo, no transaction log) in the transaction. " |
1020 | -+ "ATTENTION: the transaction started after enabled is affected.", |
1021 | ++ "This is to cause replication prefetch IO. ATTENTION: the transaction started after enabled is affected.", |
1022 | + NULL, NULL, FALSE); |
1023 | + |
1024 | |
1025 | static handler *innobase_create_handler(handlerton *hton, |
1026 | TABLE_SHARE *table, |
1027 | -@@ -1676,6 +1682,8 @@ |
1028 | +@@ -1682,6 +1688,8 @@ |
1029 | trx->check_unique_secondary = !thd_test_options( |
1030 | thd, OPTION_RELAXED_UNIQUE_CHECKS); |
1031 | |
1032 | @@ -204,7 +204,7 @@ |
1033 | #ifdef EXTENDED_SLOWLOG |
1034 | if (thd_log_slow_verbosity(thd) & SLOG_V_INNODB) { |
1035 | trx->take_stats = TRUE; |
1036 | -@@ -3152,6 +3160,11 @@ |
1037 | +@@ -3164,6 +3172,11 @@ |
1038 | trx_search_latch_release_if_reserved(trx); |
1039 | } |
1040 | |
1041 | @@ -216,7 +216,7 @@ |
1042 | /* Transaction is deregistered only in a commit or a rollback. If |
1043 | it is deregistered we know there cannot be resources to be freed |
1044 | and we could return immediately. For the time being, we play safe |
1045 | -@@ -7491,6 +7504,12 @@ |
1046 | +@@ -7507,6 +7520,12 @@ |
1047 | |
1048 | trx = innobase_trx_allocate(thd); |
1049 | |
1050 | @@ -229,7 +229,7 @@ |
1051 | /* Latch the InnoDB data dictionary exclusively so that no deadlocks |
1052 | or lock waits can happen in it during a table create operation. |
1053 | Drop table etc. do this latching in row0mysql.c. */ |
1054 | -@@ -7711,6 +7730,10 @@ |
1055 | +@@ -7727,6 +7746,10 @@ |
1056 | DBUG_RETURN(HA_ERR_CRASHED); |
1057 | } |
1058 | |
1059 | @@ -240,7 +240,7 @@ |
1060 | /* Truncate the table in InnoDB */ |
1061 | |
1062 | error = row_truncate_table_for_mysql(prebuilt->table, prebuilt->trx); |
1063 | -@@ -7767,6 +7790,12 @@ |
1064 | +@@ -7783,6 +7806,12 @@ |
1065 | |
1066 | trx = innobase_trx_allocate(thd); |
1067 | |
1068 | @@ -253,7 +253,7 @@ |
1069 | name_len = strlen(name); |
1070 | |
1071 | ut_a(name_len < 1000); |
1072 | -@@ -7853,6 +7882,12 @@ |
1073 | +@@ -7869,6 +7898,12 @@ |
1074 | trx->mysql_thd = NULL; |
1075 | #else |
1076 | trx = innobase_trx_allocate(thd); |
1077 | @@ -266,7 +266,7 @@ |
1078 | #endif |
1079 | row_drop_database_for_mysql(namebuf, trx); |
1080 | my_free(namebuf); |
1081 | -@@ -7958,6 +7993,11 @@ |
1082 | +@@ -7974,6 +8009,11 @@ |
1083 | trx_search_latch_release_if_reserved(parent_trx); |
1084 | |
1085 | trx = innobase_trx_allocate(thd); |
1086 | @@ -278,7 +278,7 @@ |
1087 | |
1088 | error = innobase_rename_table(trx, from, to, TRUE); |
1089 | |
1090 | -@@ -10756,6 +10796,10 @@ |
1091 | +@@ -10772,6 +10812,10 @@ |
1092 | return(0); |
1093 | } |
1094 | |
1095 | @@ -289,7 +289,7 @@ |
1096 | thd_get_xid(thd, (MYSQL_XID*) &trx->xid); |
1097 | |
1098 | /* Release a possible FIFO ticket and search latch. Since we will |
1099 | -@@ -12226,6 +12270,7 @@ |
1100 | +@@ -12300,6 +12344,7 @@ |
1101 | MYSQL_SYSVAR(rollback_segments), |
1102 | MYSQL_SYSVAR(corrupt_table_action), |
1103 | MYSQL_SYSVAR(lazy_drop_table), |
1104 | @@ -300,7 +300,7 @@ |
1105 | diff -ruN a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc |
1106 | --- a/storage/innobase/handler/handler0alter.cc 2011-04-11 19:44:03.000000000 +0900 |
1107 | +++ b/storage/innobase/handler/handler0alter.cc 2011-06-01 21:04:53.728495636 +0900 |
1108 | -@@ -657,6 +657,10 @@ |
1109 | +@@ -695,6 +695,10 @@ |
1110 | possible adaptive hash latch to avoid deadlocks of threads. */ |
1111 | trx_search_latch_release_if_reserved(prebuilt->trx); |
1112 | |
1113 | @@ -311,7 +311,7 @@ |
1114 | /* Check if the index name is reserved. */ |
1115 | if (innobase_index_name_is_reserved(user_thd, key_info, num_of_keys)) { |
1116 | DBUG_RETURN(-1); |
1117 | -@@ -682,6 +686,13 @@ |
1118 | +@@ -732,6 +736,13 @@ |
1119 | /* Create a background transaction for the operations on |
1120 | the data dictionary tables. */ |
1121 | trx = innobase_trx_allocate(user_thd); |
1122 | @@ -325,7 +325,18 @@ |
1123 | trx_start_if_not_started(trx); |
1124 | |
1125 | /* Create table containing all indexes to be built in this |
1126 | -@@ -1172,6 +1183,12 @@ |
1127 | +@@ -1092,6 +1103,10 @@ |
1128 | + trx_search_latch_release_if_reserved(prebuilt->trx); |
1129 | + trx = prebuilt->trx; |
1130 | + |
1131 | ++ if (trx->fake_changes) { |
1132 | ++ DBUG_RETURN(HA_ERR_WRONG_COMMAND); |
1133 | ++ } |
1134 | ++ |
1135 | + /* Test and mark all the indexes to be dropped */ |
1136 | + |
1137 | + row_mysql_lock_data_dictionary(trx); |
1138 | +@@ -1296,6 +1311,12 @@ |
1139 | /* Create a background transaction for the operations on |
1140 | the data dictionary tables. */ |
1141 | trx = innobase_trx_allocate(user_thd); |
1142 | @@ -364,7 +375,7 @@ |
1143 | diff -ruN a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c |
1144 | --- a/storage/innobase/lock/lock0lock.c 2011-06-01 21:04:26.543396960 +0900 |
1145 | +++ b/storage/innobase/lock/lock0lock.c 2011-06-01 21:04:53.739416526 +0900 |
1146 | -@@ -3909,6 +3909,10 @@ |
1147 | +@@ -3912,6 +3912,10 @@ |
1148 | |
1149 | trx = thr_get_trx(thr); |
1150 | |
1151 | @@ -375,7 +386,7 @@ |
1152 | lock_mutex_enter_kernel(); |
1153 | |
1154 | /* Look for stronger locks the same trx already has on the table */ |
1155 | -@@ -5107,6 +5111,11 @@ |
1156 | +@@ -5114,6 +5118,11 @@ |
1157 | } |
1158 | |
1159 | trx = thr_get_trx(thr); |
1160 | @@ -387,7 +398,7 @@ |
1161 | next_rec = page_rec_get_next_const(rec); |
1162 | next_rec_heap_no = page_rec_get_heap_no(next_rec); |
1163 | |
1164 | -@@ -5275,6 +5284,10 @@ |
1165 | +@@ -5282,6 +5291,10 @@ |
1166 | return(DB_SUCCESS); |
1167 | } |
1168 | |
1169 | @@ -398,7 +409,7 @@ |
1170 | heap_no = rec_offs_comp(offsets) |
1171 | ? rec_get_heap_no_new(rec) |
1172 | : rec_get_heap_no_old(rec); |
1173 | -@@ -5333,6 +5346,10 @@ |
1174 | +@@ -5340,6 +5353,10 @@ |
1175 | return(DB_SUCCESS); |
1176 | } |
1177 | |
1178 | @@ -409,7 +420,7 @@ |
1179 | heap_no = page_rec_get_heap_no(rec); |
1180 | |
1181 | /* Another transaction cannot have an implicit lock on the record, |
1182 | -@@ -5420,6 +5437,10 @@ |
1183 | +@@ -5427,6 +5444,10 @@ |
1184 | return(DB_SUCCESS); |
1185 | } |
1186 | |
1187 | @@ -420,7 +431,7 @@ |
1188 | heap_no = page_rec_get_heap_no(rec); |
1189 | |
1190 | lock_mutex_enter_kernel(); |
1191 | -@@ -5496,6 +5517,10 @@ |
1192 | +@@ -5503,6 +5524,10 @@ |
1193 | return(DB_SUCCESS); |
1194 | } |
1195 | |
1196 | |
1197 | === modified file 'innodb_fast_checksum.patch' |
1198 | --- innodb_fast_checksum.patch 2011-06-10 10:07:06 +0000 |
1199 | +++ innodb_fast_checksum.patch 2011-08-01 03:32:34 +0000 |
1200 | @@ -109,7 +109,7 @@ |
1201 | diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c |
1202 | --- a/storage/innobase/fil/fil0fil.c 2010-12-04 15:52:23.406513743 +0900 |
1203 | +++ b/storage/innobase/fil/fil0fil.c 2010-12-04 15:53:45.020513800 +0900 |
1204 | -@@ -3094,13 +3094,24 @@ |
1205 | +@@ -3095,13 +3095,24 @@ |
1206 | return(TRUE); |
1207 | } |
1208 | |
1209 | @@ -135,7 +135,7 @@ |
1210 | return(FALSE); |
1211 | } |
1212 | |
1213 | -@@ -3116,7 +3127,9 @@ |
1214 | +@@ -3117,7 +3128,9 @@ |
1215 | if (!zip_size) { |
1216 | mach_write_to_4(page + FIL_PAGE_SPACE_OR_CHKSUM, |
1217 | srv_use_checksums |
1218 | @@ -157,7 +157,7 @@ |
1219 | static my_bool innobase_recovery_stats = TRUE; |
1220 | static my_bool innobase_locks_unsafe_for_binlog = FALSE; |
1221 | static my_bool innobase_overwrite_relay_log_info = FALSE; |
1222 | -@@ -2620,6 +2621,7 @@ |
1223 | +@@ -2626,6 +2627,7 @@ |
1224 | |
1225 | srv_use_doublewrite_buf = (ibool) innobase_use_doublewrite; |
1226 | srv_use_checksums = (ibool) innobase_use_checksums; |
1227 | @@ -165,7 +165,7 @@ |
1228 | |
1229 | #ifdef HAVE_LARGE_PAGES |
1230 | if ((os_use_large_pages = (ibool) my_use_large_pages)) |
1231 | -@@ -11421,6 +11423,15 @@ |
1232 | +@@ -11433,6 +11435,15 @@ |
1233 | "Disable with --skip-innodb-checksums.", |
1234 | NULL, NULL, TRUE); |
1235 | |
1236 | @@ -181,7 +181,7 @@ |
1237 | static MYSQL_SYSVAR_STR(data_home_dir, innobase_data_home_dir, |
1238 | PLUGIN_VAR_READONLY, |
1239 | "The common part for InnoDB table spaces.", |
1240 | -@@ -11930,6 +11941,7 @@ |
1241 | +@@ -11947,6 +11958,7 @@ |
1242 | MYSQL_SYSVAR(buffer_pool_size), |
1243 | MYSQL_SYSVAR(buffer_pool_instances), |
1244 | MYSQL_SYSVAR(checksums), |
1245 | @@ -192,7 +192,7 @@ |
1246 | diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h |
1247 | --- a/storage/innobase/include/buf0buf.h 2010-12-04 15:52:23.458514045 +0900 |
1248 | +++ b/storage/innobase/include/buf0buf.h 2010-12-04 15:53:45.044514150 +0900 |
1249 | -@@ -604,6 +604,11 @@ |
1250 | +@@ -607,6 +607,11 @@ |
1251 | buf_calc_page_new_checksum( |
1252 | /*=======================*/ |
1253 | const byte* page); /*!< in: buffer page */ |
1254 | |
1255 | === modified file 'innodb_files_extend.patch' |
1256 | --- innodb_files_extend.patch 2011-06-10 10:07:06 +0000 |
1257 | +++ innodb_files_extend.patch 2011-08-01 03:32:34 +0000 |
1258 | @@ -17,7 +17,7 @@ |
1259 | fprintf(stderr, |
1260 | "InnoDB: Error: the size of single-table" |
1261 | " tablespace file %s\n" |
1262 | -@@ -4151,7 +4151,7 @@ |
1263 | +@@ -4152,7 +4152,7 @@ |
1264 | |
1265 | size = (((ib_int64_t)size_high) << 32) + (ib_int64_t)size_low; |
1266 | #ifndef UNIV_HOTBACKUP |
1267 | @@ -26,7 +26,7 @@ |
1268 | fprintf(stderr, |
1269 | "InnoDB: Error: the size of single-table tablespace" |
1270 | " file %s\n" |
1271 | -@@ -4171,7 +4171,7 @@ |
1272 | +@@ -4172,7 +4172,7 @@ |
1273 | /* Align the memory for file i/o if we might have O_DIRECT set */ |
1274 | page = ut_align(buf2, UNIV_PAGE_SIZE); |
1275 | |
1276 | @@ -35,7 +35,7 @@ |
1277 | success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE); |
1278 | |
1279 | /* We have to read the tablespace id from the file */ |
1280 | -@@ -5149,9 +5149,9 @@ |
1281 | +@@ -5150,9 +5150,9 @@ |
1282 | ut_ad(ut_is_2pow(zip_size)); |
1283 | ut_ad(buf); |
1284 | ut_ad(len > 0); |
1285 | @@ -112,7 +112,7 @@ |
1286 | static my_bool innobase_thread_concurrency_timer_based; |
1287 | static long long innobase_buffer_pool_size, innobase_log_file_size; |
1288 | |
1289 | -@@ -2316,6 +2319,65 @@ |
1290 | +@@ -2322,6 +2325,65 @@ |
1291 | } |
1292 | #endif /* DBUG_OFF */ |
1293 | |
1294 | @@ -178,7 +178,7 @@ |
1295 | #ifndef MYSQL_SERVER |
1296 | innodb_overwrite_relay_log_info = FALSE; |
1297 | #endif |
1298 | -@@ -7241,9 +7303,9 @@ |
1299 | +@@ -7253,9 +7315,9 @@ |
1300 | | DICT_TF_COMPACT |
1301 | | DICT_TF_FORMAT_ZIP |
1302 | << DICT_TF_FORMAT_SHIFT; |
1303 | @@ -191,7 +191,7 @@ |
1304 | } |
1305 | } |
1306 | |
1307 | -@@ -11432,6 +11494,16 @@ |
1308 | +@@ -11444,6 +11506,16 @@ |
1309 | "#### Attention: The checksum is not compatible for normal or disabled version! ####", |
1310 | NULL, NULL, FALSE); |
1311 | |
1312 | @@ -208,7 +208,7 @@ |
1313 | static MYSQL_SYSVAR_STR(data_home_dir, innobase_data_home_dir, |
1314 | PLUGIN_VAR_READONLY, |
1315 | "The common part for InnoDB table spaces.", |
1316 | -@@ -11936,6 +12008,8 @@ |
1317 | +@@ -11953,6 +12025,8 @@ |
1318 | NULL, NULL, 0, &corrupt_table_action_typelib); |
1319 | |
1320 | static struct st_mysql_sys_var* innobase_system_variables[]= { |
1321 | @@ -220,7 +220,7 @@ |
1322 | diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h |
1323 | --- a/storage/innobase/include/buf0buf.h 2010-12-04 15:55:21.375482937 +0900 |
1324 | +++ b/storage/innobase/include/buf0buf.h 2010-12-04 15:55:58.258469088 +0900 |
1325 | -@@ -1683,7 +1683,7 @@ |
1326 | +@@ -1686,7 +1686,7 @@ |
1327 | time_t last_printout_time; |
1328 | /*!< when buf_print_io was last time |
1329 | called */ |
1330 | @@ -229,7 +229,7 @@ |
1331 | /*!< Statistics of buddy system, |
1332 | indexed by block size */ |
1333 | buf_pool_stat_t stat; /*!< current statistics */ |
1334 | -@@ -1779,7 +1779,7 @@ |
1335 | +@@ -1782,7 +1782,7 @@ |
1336 | /* @{ */ |
1337 | UT_LIST_BASE_NODE_T(buf_page_t) zip_clean; |
1338 | /*!< unmodified compressed pages */ |
1339 | @@ -238,7 +238,7 @@ |
1340 | /*!< buddy free lists */ |
1341 | |
1342 | buf_page_t watch[BUF_POOL_WATCH_SIZE]; |
1343 | -@@ -1787,9 +1787,9 @@ |
1344 | +@@ -1790,9 +1790,9 @@ |
1345 | pool watches. Protected by |
1346 | buf_pool->mutex. */ |
1347 | |
1348 | |
1349 | === modified file 'innodb_fix_misc.patch' |
1350 | --- innodb_fix_misc.patch 2011-06-29 09:32:51 +0000 |
1351 | +++ innodb_fix_misc.patch 2011-08-01 03:32:34 +0000 |
1352 | @@ -5,15 +5,639 @@ |
1353 | # Bug fix for |
1354 | # http://bugs.mysql.com/56433 (always: because good for all users, and safe) |
1355 | # and http://bugs.mysql.com/51325 (optional: innodb_lazy_drop_table) |
1356 | +# and http://bugs.mysql.com/61341 (needed for innodb_lazy_drop_table to remove buf_LRU_insert_zip_clean()) |
1357 | # were added. They may be removed in the future when will be fixed officially. |
1358 | # |
1359 | #!!! notice !!! |
1360 | # Any small change to this file in the main branch |
1361 | # should be done or reviewed by the maintainer! |
1362 | +diff -ruN a/storage/innobase/buf/buf0buddy.c b/storage/innobase/buf/buf0buddy.c |
1363 | +--- a/storage/innobase/buf/buf0buddy.c 2011-07-05 15:15:38.473447294 +0900 |
1364 | ++++ b/storage/innobase/buf/buf0buddy.c 2011-07-05 15:16:09.258444327 +0900 |
1365 | +@@ -378,7 +378,6 @@ |
1366 | + buf_page_t* bpage, /*!< in: block to relocate */ |
1367 | + buf_page_t* dpage) /*!< in: free block to relocate to */ |
1368 | + { |
1369 | +- buf_page_t* b; |
1370 | + buf_pool_t* buf_pool = buf_pool_from_bpage(bpage); |
1371 | + |
1372 | + //ut_ad(buf_pool_mutex_own(buf_pool)); |
1373 | +@@ -421,16 +420,6 @@ |
1374 | + buf_relocate(bpage, dpage); |
1375 | + ut_d(bpage->state = BUF_BLOCK_ZIP_FREE); |
1376 | + |
1377 | +- /* relocate buf_pool->zip_clean */ |
1378 | +- b = UT_LIST_GET_PREV(zip_list, dpage); |
1379 | +- UT_LIST_REMOVE(zip_list, buf_pool->zip_clean, dpage); |
1380 | +- |
1381 | +- if (b) { |
1382 | +- UT_LIST_INSERT_AFTER(zip_list, buf_pool->zip_clean, b, dpage); |
1383 | +- } else { |
1384 | +- UT_LIST_ADD_FIRST(zip_list, buf_pool->zip_clean, dpage); |
1385 | +- } |
1386 | +- |
1387 | + UNIV_MEM_INVALID(bpage, sizeof *bpage); |
1388 | + |
1389 | + mutex_exit(&buf_pool->zip_mutex); |
1390 | diff -ruN a/storage/innobase/buf/buf0buf.c b/storage/innobase/buf/buf0buf.c |
1391 | --- a/storage/innobase/buf/buf0buf.c 2011-02-23 19:00:48.178696354 +0900 |
1392 | +++ b/storage/innobase/buf/buf0buf.c 2011-02-23 19:01:19.138826278 +0900 |
1393 | -@@ -4084,6 +4084,7 @@ |
1394 | +@@ -1189,72 +1189,6 @@ |
1395 | + return(NULL); |
1396 | + } |
1397 | + |
1398 | +-/*********************************************************************//** |
1399 | +-Checks that all blocks in the buffer chunk are in BUF_BLOCK_NOT_USED state. |
1400 | +-@return TRUE if all freed */ |
1401 | +-static |
1402 | +-ibool |
1403 | +-buf_chunk_all_free( |
1404 | +-/*===============*/ |
1405 | +- const buf_chunk_t* chunk) /*!< in: chunk being checked */ |
1406 | +-{ |
1407 | +- const buf_block_t* block; |
1408 | +- ulint i; |
1409 | +- |
1410 | +- block = chunk->blocks; |
1411 | +- |
1412 | +- for (i = chunk->size; i--; block++) { |
1413 | +- |
1414 | +- if (buf_block_get_state(block) != BUF_BLOCK_NOT_USED) { |
1415 | +- |
1416 | +- return(FALSE); |
1417 | +- } |
1418 | +- } |
1419 | +- |
1420 | +- return(TRUE); |
1421 | +-} |
1422 | +- |
1423 | +-/********************************************************************//** |
1424 | +-Frees a chunk of buffer frames. */ |
1425 | +-static |
1426 | +-void |
1427 | +-buf_chunk_free( |
1428 | +-/*===========*/ |
1429 | +- buf_pool_t* buf_pool, /*!< in: buffer pool instance */ |
1430 | +- buf_chunk_t* chunk) /*!< out: chunk of buffers */ |
1431 | +-{ |
1432 | +- buf_block_t* block; |
1433 | +- const buf_block_t* block_end; |
1434 | +- |
1435 | +- //ut_ad(buf_pool_mutex_own(buf_pool)); /* but we need all mutex here */ |
1436 | +- |
1437 | +- block_end = chunk->blocks + chunk->size; |
1438 | +- |
1439 | +- for (block = chunk->blocks; block < block_end; block++) { |
1440 | +- ut_a(buf_block_get_state(block) == BUF_BLOCK_NOT_USED); |
1441 | +- ut_a(!block->page.zip.data); |
1442 | +- |
1443 | +- ut_ad(!block->page.in_LRU_list); |
1444 | +- ut_ad(!block->in_unzip_LRU_list); |
1445 | +- ut_ad(!block->page.in_flush_list); |
1446 | +- /* Remove the block from the free list. */ |
1447 | +- mutex_enter(&buf_pool->free_list_mutex); |
1448 | +- ut_ad(block->page.in_free_list); |
1449 | +- UT_LIST_REMOVE(free, buf_pool->free, (&block->page)); |
1450 | +- mutex_exit(&buf_pool->free_list_mutex); |
1451 | +- |
1452 | +- /* Free the latches. */ |
1453 | +- mutex_free(&block->mutex); |
1454 | +- rw_lock_free(&block->lock); |
1455 | +-#ifdef UNIV_SYNC_DEBUG |
1456 | +- rw_lock_free(&block->debug_latch); |
1457 | +-#endif /* UNIV_SYNC_DEBUG */ |
1458 | +- UNIV_MEM_UNDESC(block); |
1459 | +- } |
1460 | +- |
1461 | +- os_mem_free_large(chunk->mem, chunk->mem_size); |
1462 | +-} |
1463 | +- |
1464 | + /********************************************************************//** |
1465 | + Set buffer pool size variables after resizing it */ |
1466 | + static |
1467 | +@@ -1380,8 +1314,6 @@ |
1468 | + chunk = chunks + buf_pool->n_chunks; |
1469 | + |
1470 | + while (--chunk >= chunks) { |
1471 | +- /* Bypass the checks of buf_chunk_free(), since they |
1472 | +- would fail at shutdown. */ |
1473 | + os_mem_free_large(chunk->mem, chunk->mem_size); |
1474 | + } |
1475 | + |
1476 | +@@ -1644,290 +1576,6 @@ |
1477 | + HASH_INSERT(buf_page_t, hash, buf_pool->page_hash, fold, dpage); |
1478 | + } |
1479 | + |
1480 | +-/********************************************************************//** |
1481 | +-Shrinks a buffer pool instance. */ |
1482 | +-static |
1483 | +-void |
1484 | +-buf_pool_shrink_instance( |
1485 | +-/*=====================*/ |
1486 | +- buf_pool_t* buf_pool, /*!< in: buffer pool instance */ |
1487 | +- ulint chunk_size) /*!< in: number of pages to remove */ |
1488 | +-{ |
1489 | +- buf_chunk_t* chunks; |
1490 | +- buf_chunk_t* chunk; |
1491 | +- ulint max_size; |
1492 | +- ulint max_free_size; |
1493 | +- buf_chunk_t* max_chunk; |
1494 | +- buf_chunk_t* max_free_chunk; |
1495 | +- |
1496 | +- ut_ad(!buf_pool_mutex_own(buf_pool)); |
1497 | +- |
1498 | +-try_again: |
1499 | +- btr_search_disable(); /* Empty the adaptive hash index again */ |
1500 | +- //buf_pool_mutex_enter(buf_pool); |
1501 | +- mutex_enter(&buf_pool->LRU_list_mutex); |
1502 | +- |
1503 | +-shrink_again: |
1504 | +- if (buf_pool->n_chunks <= 1) { |
1505 | +- |
1506 | +- /* Cannot shrink if there is only one chunk */ |
1507 | +- goto func_done; |
1508 | +- } |
1509 | +- |
1510 | +- /* Search for the largest free chunk |
1511 | +- not larger than the size difference */ |
1512 | +- chunks = buf_pool->chunks; |
1513 | +- chunk = chunks + buf_pool->n_chunks; |
1514 | +- max_size = max_free_size = 0; |
1515 | +- max_chunk = max_free_chunk = NULL; |
1516 | +- |
1517 | +- while (--chunk >= chunks) { |
1518 | +- if (chunk->size <= chunk_size |
1519 | +- && chunk->size > max_free_size) { |
1520 | +- if (chunk->size > max_size) { |
1521 | +- max_size = chunk->size; |
1522 | +- max_chunk = chunk; |
1523 | +- } |
1524 | +- |
1525 | +- if (buf_chunk_all_free(chunk)) { |
1526 | +- max_free_size = chunk->size; |
1527 | +- max_free_chunk = chunk; |
1528 | +- } |
1529 | +- } |
1530 | +- } |
1531 | +- |
1532 | +- if (!max_free_size) { |
1533 | +- |
1534 | +- ulint dirty = 0; |
1535 | +- ulint nonfree = 0; |
1536 | +- buf_block_t* block; |
1537 | +- buf_block_t* bend; |
1538 | +- |
1539 | +- /* Cannot shrink: try again later |
1540 | +- (do not assign srv_buf_pool_old_size) */ |
1541 | +- if (!max_chunk) { |
1542 | +- |
1543 | +- goto func_exit; |
1544 | +- } |
1545 | +- |
1546 | +- block = max_chunk->blocks; |
1547 | +- bend = block + max_chunk->size; |
1548 | +- |
1549 | +- /* Move the blocks of chunk to the end of the |
1550 | +- LRU list and try to flush them. */ |
1551 | +- for (; block < bend; block++) { |
1552 | +- switch (buf_block_get_state(block)) { |
1553 | +- case BUF_BLOCK_NOT_USED: |
1554 | +- continue; |
1555 | +- case BUF_BLOCK_FILE_PAGE: |
1556 | +- break; |
1557 | +- default: |
1558 | +- nonfree++; |
1559 | +- continue; |
1560 | +- } |
1561 | +- |
1562 | +- mutex_enter(&block->mutex); |
1563 | +- /* The following calls will temporarily |
1564 | +- release block->mutex and buf_pool->mutex. |
1565 | +- Therefore, we have to always retry, |
1566 | +- even if !dirty && !nonfree. */ |
1567 | +- |
1568 | +- if (!buf_flush_ready_for_replace(&block->page)) { |
1569 | +- |
1570 | +- buf_LRU_make_block_old(&block->page); |
1571 | +- dirty++; |
1572 | +- } else if (buf_LRU_free_block(&block->page, TRUE, TRUE) |
1573 | +- != BUF_LRU_FREED) { |
1574 | +- nonfree++; |
1575 | +- } |
1576 | +- |
1577 | +- mutex_exit(&block->mutex); |
1578 | +- } |
1579 | +- |
1580 | +- //buf_pool_mutex_exit(buf_pool); |
1581 | +- mutex_exit(&buf_pool->LRU_list_mutex); |
1582 | +- |
1583 | +- /* Request for a flush of the chunk if it helps. |
1584 | +- Do not flush if there are non-free blocks, since |
1585 | +- flushing will not make the chunk freeable. */ |
1586 | +- if (nonfree) { |
1587 | +- /* Avoid busy-waiting. */ |
1588 | +- os_thread_sleep(100000); |
1589 | +- } else if (dirty |
1590 | +- && buf_flush_LRU(buf_pool, dirty) |
1591 | +- == ULINT_UNDEFINED) { |
1592 | +- |
1593 | +- buf_flush_wait_batch_end(buf_pool, BUF_FLUSH_LRU); |
1594 | +- } |
1595 | +- |
1596 | +- goto try_again; |
1597 | +- } |
1598 | +- |
1599 | +- max_size = max_free_size; |
1600 | +- max_chunk = max_free_chunk; |
1601 | +- |
1602 | +- buf_pool->old_pool_size = buf_pool->curr_pool_size; |
1603 | +- |
1604 | +- /* Rewrite buf_pool->chunks. Copy everything but max_chunk. */ |
1605 | +- chunks = mem_alloc((buf_pool->n_chunks - 1) * sizeof *chunks); |
1606 | +- memcpy(chunks, buf_pool->chunks, |
1607 | +- (max_chunk - buf_pool->chunks) * sizeof *chunks); |
1608 | +- memcpy(chunks + (max_chunk - buf_pool->chunks), |
1609 | +- max_chunk + 1, |
1610 | +- buf_pool->chunks + buf_pool->n_chunks |
1611 | +- - (max_chunk + 1)); |
1612 | +- ut_a(buf_pool->curr_size > max_chunk->size); |
1613 | +- buf_pool->curr_size -= max_chunk->size; |
1614 | +- buf_pool->curr_pool_size = buf_pool->curr_size * UNIV_PAGE_SIZE; |
1615 | +- chunk_size -= max_chunk->size; |
1616 | +- buf_chunk_free(buf_pool, max_chunk); |
1617 | +- mem_free(buf_pool->chunks); |
1618 | +- buf_pool->chunks = chunks; |
1619 | +- buf_pool->n_chunks--; |
1620 | +- |
1621 | +- /* Allow a slack of one megabyte. */ |
1622 | +- if (chunk_size > 1048576 / UNIV_PAGE_SIZE) { |
1623 | +- |
1624 | +- goto shrink_again; |
1625 | +- } |
1626 | +- goto func_exit; |
1627 | +- |
1628 | +-func_done: |
1629 | +- buf_pool->old_pool_size = buf_pool->curr_pool_size; |
1630 | +-func_exit: |
1631 | +- //buf_pool_mutex_exit(buf_pool); |
1632 | +- mutex_exit(&buf_pool->LRU_list_mutex); |
1633 | +- btr_search_enable(); |
1634 | +-} |
1635 | +- |
1636 | +-/********************************************************************//** |
1637 | +-Shrinks the buffer pool. */ |
1638 | +-static |
1639 | +-void |
1640 | +-buf_pool_shrink( |
1641 | +-/*============*/ |
1642 | +- ulint chunk_size) /*!< in: number of pages to remove */ |
1643 | +-{ |
1644 | +- ulint i; |
1645 | +- |
1646 | +- for (i = 0; i < srv_buf_pool_instances; i++) { |
1647 | +- buf_pool_t* buf_pool; |
1648 | +- ulint instance_chunk_size; |
1649 | +- |
1650 | +- instance_chunk_size = chunk_size / srv_buf_pool_instances; |
1651 | +- buf_pool = buf_pool_from_array(i); |
1652 | +- buf_pool_shrink_instance(buf_pool, instance_chunk_size); |
1653 | +- } |
1654 | +- |
1655 | +- buf_pool_set_sizes(); |
1656 | +-} |
1657 | +- |
1658 | +-/********************************************************************//** |
1659 | +-Rebuild buf_pool->page_hash for a buffer pool instance. */ |
1660 | +-static |
1661 | +-void |
1662 | +-buf_pool_page_hash_rebuild_instance( |
1663 | +-/*================================*/ |
1664 | +- buf_pool_t* buf_pool) /*!< in: buffer pool instance */ |
1665 | +-{ |
1666 | +- ulint i; |
1667 | +- buf_page_t* b; |
1668 | +- buf_chunk_t* chunk; |
1669 | +- ulint n_chunks; |
1670 | +- hash_table_t* zip_hash; |
1671 | +- hash_table_t* page_hash; |
1672 | +- |
1673 | +- //buf_pool_mutex_enter(buf_pool); |
1674 | +- mutex_enter(&buf_pool->LRU_list_mutex); |
1675 | +- rw_lock_x_lock(&buf_pool->page_hash_latch); |
1676 | +- |
1677 | +- /* Free, create, and populate the hash table. */ |
1678 | +- hash_table_free(buf_pool->page_hash); |
1679 | +- buf_pool->page_hash = page_hash = hash_create(2 * buf_pool->curr_size); |
1680 | +- zip_hash = hash_create(2 * buf_pool->curr_size); |
1681 | +- |
1682 | +- HASH_MIGRATE(buf_pool->zip_hash, zip_hash, buf_page_t, hash, |
1683 | +- BUF_POOL_ZIP_FOLD_BPAGE); |
1684 | +- |
1685 | +- hash_table_free(buf_pool->zip_hash); |
1686 | +- buf_pool->zip_hash = zip_hash; |
1687 | +- |
1688 | +- /* Insert the uncompressed file pages to buf_pool->page_hash. */ |
1689 | +- |
1690 | +- chunk = buf_pool->chunks; |
1691 | +- n_chunks = buf_pool->n_chunks; |
1692 | +- |
1693 | +- for (i = 0; i < n_chunks; i++, chunk++) { |
1694 | +- ulint j; |
1695 | +- buf_block_t* block = chunk->blocks; |
1696 | +- |
1697 | +- for (j = 0; j < chunk->size; j++, block++) { |
1698 | +- if (buf_block_get_state(block) |
1699 | +- == BUF_BLOCK_FILE_PAGE) { |
1700 | +- ut_ad(!block->page.in_zip_hash); |
1701 | +- ut_ad(block->page.in_page_hash); |
1702 | +- |
1703 | +- HASH_INSERT(buf_page_t, hash, page_hash, |
1704 | +- buf_page_address_fold( |
1705 | +- block->page.space, |
1706 | +- block->page.offset), |
1707 | +- &block->page); |
1708 | +- } |
1709 | +- } |
1710 | +- } |
1711 | +- |
1712 | +- /* Insert the compressed-only pages to buf_pool->page_hash. |
1713 | +- All such blocks are either in buf_pool->zip_clean or |
1714 | +- in buf_pool->flush_list. */ |
1715 | +- |
1716 | +- mutex_enter(&buf_pool->zip_mutex); |
1717 | +- for (b = UT_LIST_GET_FIRST(buf_pool->zip_clean); b; |
1718 | +- b = UT_LIST_GET_NEXT(zip_list, b)) { |
1719 | +- ut_a(buf_page_get_state(b) == BUF_BLOCK_ZIP_PAGE); |
1720 | +- ut_ad(!b->in_flush_list); |
1721 | +- ut_ad(b->in_LRU_list); |
1722 | +- ut_ad(b->in_page_hash); |
1723 | +- ut_ad(!b->in_zip_hash); |
1724 | +- |
1725 | +- HASH_INSERT(buf_page_t, hash, page_hash, |
1726 | +- buf_page_address_fold(b->space, b->offset), b); |
1727 | +- } |
1728 | +- mutex_exit(&buf_pool->zip_mutex); |
1729 | +- |
1730 | +- buf_flush_list_mutex_enter(buf_pool); |
1731 | +- for (b = UT_LIST_GET_FIRST(buf_pool->flush_list); b; |
1732 | +- b = UT_LIST_GET_NEXT(flush_list, b)) { |
1733 | +- ut_ad(b->in_flush_list); |
1734 | +- ut_ad(b->in_LRU_list); |
1735 | +- ut_ad(b->in_page_hash); |
1736 | +- ut_ad(!b->in_zip_hash); |
1737 | +- |
1738 | +- switch (buf_page_get_state(b)) { |
1739 | +- case BUF_BLOCK_ZIP_DIRTY: |
1740 | +- HASH_INSERT(buf_page_t, hash, page_hash, |
1741 | +- buf_page_address_fold(b->space, |
1742 | +- b->offset), b); |
1743 | +- break; |
1744 | +- case BUF_BLOCK_FILE_PAGE: |
1745 | +- /* uncompressed page */ |
1746 | +- break; |
1747 | +- case BUF_BLOCK_ZIP_FREE: |
1748 | +- case BUF_BLOCK_ZIP_PAGE: |
1749 | +- case BUF_BLOCK_NOT_USED: |
1750 | +- case BUF_BLOCK_READY_FOR_USE: |
1751 | +- case BUF_BLOCK_MEMORY: |
1752 | +- case BUF_BLOCK_REMOVE_HASH: |
1753 | +- ut_error; |
1754 | +- break; |
1755 | +- } |
1756 | +- } |
1757 | +- |
1758 | +- buf_flush_list_mutex_exit(buf_pool); |
1759 | +- //buf_pool_mutex_exit(buf_pool); |
1760 | +- mutex_exit(&buf_pool->LRU_list_mutex); |
1761 | +- rw_lock_x_unlock(&buf_pool->page_hash_latch); |
1762 | +-} |
1763 | +- |
1764 | + /******************************************************************** |
1765 | + Determine if a block is a sentinel for a buffer pool watch. |
1766 | + @return TRUE if a sentinel for a buffer pool watch, FALSE if not */ |
1767 | +@@ -2049,127 +1697,6 @@ |
1768 | + return(NULL); |
1769 | + } |
1770 | + |
1771 | +-/********************************************************************//** |
1772 | +-Rebuild buf_pool->page_hash. */ |
1773 | +-static |
1774 | +-void |
1775 | +-buf_pool_page_hash_rebuild(void) |
1776 | +-/*============================*/ |
1777 | +-{ |
1778 | +- ulint i; |
1779 | +- |
1780 | +- for (i = 0; i < srv_buf_pool_instances; i++) { |
1781 | +- buf_pool_page_hash_rebuild_instance(buf_pool_from_array(i)); |
1782 | +- } |
1783 | +-} |
1784 | +- |
1785 | +-/********************************************************************//** |
1786 | +-Increase the buffer pool size of one buffer pool instance. */ |
1787 | +-static |
1788 | +-void |
1789 | +-buf_pool_increase_instance( |
1790 | +-/*=======================*/ |
1791 | +- buf_pool_t* buf_pool, /*!< in: buffer pool instane */ |
1792 | +- ulint change_size) /*!< in: new size of the pool */ |
1793 | +-{ |
1794 | +- buf_chunk_t* chunks; |
1795 | +- buf_chunk_t* chunk; |
1796 | +- |
1797 | +- mutex_enter(&buf_pool->LRU_list_mutex); |
1798 | +- rw_lock_x_lock(&buf_pool->page_hash_latch); |
1799 | +- buf_pool_mutex_enter(buf_pool); |
1800 | +- chunks = mem_alloc((buf_pool->n_chunks + 1) * sizeof *chunks); |
1801 | +- |
1802 | +- memcpy(chunks, buf_pool->chunks, buf_pool->n_chunks * sizeof *chunks); |
1803 | +- |
1804 | +- chunk = &chunks[buf_pool->n_chunks]; |
1805 | +- |
1806 | +- if (!buf_chunk_init(buf_pool, chunk, change_size)) { |
1807 | +- mem_free(chunks); |
1808 | +- } else { |
1809 | +- buf_pool->old_pool_size = buf_pool->curr_pool_size; |
1810 | +- buf_pool->curr_size += chunk->size; |
1811 | +- buf_pool->curr_pool_size = buf_pool->curr_size * UNIV_PAGE_SIZE; |
1812 | +- mem_free(buf_pool->chunks); |
1813 | +- buf_pool->chunks = chunks; |
1814 | +- buf_pool->n_chunks++; |
1815 | +- } |
1816 | +- |
1817 | +- mutex_exit(&buf_pool->LRU_list_mutex); |
1818 | +- rw_lock_x_unlock(&buf_pool->page_hash_latch); |
1819 | +- buf_pool_mutex_exit(buf_pool); |
1820 | +-} |
1821 | +- |
1822 | +-/********************************************************************//** |
1823 | +-Increase the buffer pool size. */ |
1824 | +-static |
1825 | +-void |
1826 | +-buf_pool_increase( |
1827 | +-/*==============*/ |
1828 | +- ulint change_size) |
1829 | +-{ |
1830 | +- ulint i; |
1831 | +- |
1832 | +- for (i = 0; i < srv_buf_pool_instances; i++) { |
1833 | +- buf_pool_increase_instance( |
1834 | +- buf_pool_from_array(i), |
1835 | +- change_size / srv_buf_pool_instances); |
1836 | +- } |
1837 | +- |
1838 | +- buf_pool_set_sizes(); |
1839 | +-} |
1840 | +- |
1841 | +-/********************************************************************//** |
1842 | +-Resizes the buffer pool. */ |
1843 | +-UNIV_INTERN |
1844 | +-void |
1845 | +-buf_pool_resize(void) |
1846 | +-/*=================*/ |
1847 | +-{ |
1848 | +- ulint change_size; |
1849 | +- ulint min_change_size = 1048576 * srv_buf_pool_instances; |
1850 | +- |
1851 | +- buf_pool_mutex_enter_all(); |
1852 | +- |
1853 | +- if (srv_buf_pool_old_size == srv_buf_pool_size) { |
1854 | +- |
1855 | +- buf_pool_mutex_exit_all(); |
1856 | +- |
1857 | +- return; |
1858 | +- |
1859 | +- } else if (srv_buf_pool_curr_size + min_change_size |
1860 | +- > srv_buf_pool_size) { |
1861 | +- |
1862 | +- change_size = (srv_buf_pool_curr_size - srv_buf_pool_size) |
1863 | +- / UNIV_PAGE_SIZE; |
1864 | +- |
1865 | +- buf_pool_mutex_exit_all(); |
1866 | +- |
1867 | +- /* Disable adaptive hash indexes and empty the index |
1868 | +- in order to free up memory in the buffer pool chunks. */ |
1869 | +- buf_pool_shrink(change_size); |
1870 | +- |
1871 | +- } else if (srv_buf_pool_curr_size + min_change_size |
1872 | +- < srv_buf_pool_size) { |
1873 | +- |
1874 | +- /* Enlarge the buffer pool by at least one megabyte */ |
1875 | +- |
1876 | +- change_size = srv_buf_pool_size - srv_buf_pool_curr_size; |
1877 | +- |
1878 | +- buf_pool_mutex_exit_all(); |
1879 | +- |
1880 | +- buf_pool_increase(change_size); |
1881 | +- } else { |
1882 | +- srv_buf_pool_size = srv_buf_pool_old_size; |
1883 | +- |
1884 | +- buf_pool_mutex_exit_all(); |
1885 | +- |
1886 | +- return; |
1887 | +- } |
1888 | +- |
1889 | +- buf_pool_page_hash_rebuild(); |
1890 | +-} |
1891 | +- |
1892 | + /****************************************************************//** |
1893 | + Remove the sentinel block for the watch before replacing it with a real block. |
1894 | + buf_page_watch_clear() or buf_page_watch_occurred() will notice that |
1895 | +@@ -2513,6 +2040,27 @@ |
1896 | + #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */ |
1897 | + } |
1898 | + |
1899 | ++ if (UNIV_UNLIKELY(bpage->space_was_being_deleted)) { |
1900 | ++ /* This page is obsoleted, should discard and retry */ |
1901 | ++ rw_lock_s_unlock(&buf_pool->page_hash_latch); |
1902 | ++ |
1903 | ++ mutex_enter(&buf_pool->LRU_list_mutex); |
1904 | ++ block_mutex = buf_page_get_mutex_enter(bpage); |
1905 | ++ |
1906 | ++ if (UNIV_UNLIKELY(!block_mutex)) { |
1907 | ++ mutex_exit(&buf_pool->LRU_list_mutex); |
1908 | ++ goto lookup; |
1909 | ++ } |
1910 | ++ |
1911 | ++ buf_LRU_free_block(bpage, TRUE, TRUE); |
1912 | ++ |
1913 | ++ mutex_exit(&buf_pool->LRU_list_mutex); |
1914 | ++ mutex_exit(block_mutex); |
1915 | ++ block_mutex = NULL; |
1916 | ++ |
1917 | ++ goto lookup; |
1918 | ++ } |
1919 | ++ |
1920 | + if (UNIV_UNLIKELY(!bpage->zip.data)) { |
1921 | + /* There is no compressed page. */ |
1922 | + err_exit: |
1923 | +@@ -3026,6 +2574,27 @@ |
1924 | + block = (buf_block_t*) buf_page_hash_get_low( |
1925 | + buf_pool, space, offset, fold); |
1926 | + if (block) { |
1927 | ++ if (UNIV_UNLIKELY(block->page.space_was_being_deleted)) { |
1928 | ++ /* This page is obsoleted, should discard and retry */ |
1929 | ++ rw_lock_s_unlock(&buf_pool->page_hash_latch); |
1930 | ++ |
1931 | ++ mutex_enter(&buf_pool->LRU_list_mutex); |
1932 | ++ block_mutex = buf_page_get_mutex_enter((buf_page_t*)block); |
1933 | ++ |
1934 | ++ if (UNIV_UNLIKELY(!block_mutex)) { |
1935 | ++ mutex_exit(&buf_pool->LRU_list_mutex); |
1936 | ++ goto loop; |
1937 | ++ } |
1938 | ++ |
1939 | ++ buf_LRU_free_block((buf_page_t*)block, TRUE, TRUE); |
1940 | ++ |
1941 | ++ mutex_exit(&buf_pool->LRU_list_mutex); |
1942 | ++ mutex_exit(block_mutex); |
1943 | ++ block_mutex = NULL; |
1944 | ++ |
1945 | ++ goto loop; |
1946 | ++ } |
1947 | ++ |
1948 | + block_mutex = buf_page_get_mutex_enter((buf_page_t*)block); |
1949 | + ut_a(block_mutex); |
1950 | + } |
1951 | +@@ -3225,8 +2794,6 @@ |
1952 | + |
1953 | + if (buf_page_get_state(&block->page) |
1954 | + == BUF_BLOCK_ZIP_PAGE) { |
1955 | +- UT_LIST_REMOVE(zip_list, buf_pool->zip_clean, |
1956 | +- &block->page); |
1957 | + ut_ad(!block->page.in_flush_list); |
1958 | + } else { |
1959 | + /* Relocate buf_pool->flush_list. */ |
1960 | +@@ -3943,11 +3510,28 @@ |
1961 | + |
1962 | + fold = buf_page_address_fold(space, offset); |
1963 | + |
1964 | ++retry: |
1965 | + //buf_pool_mutex_enter(buf_pool); |
1966 | + mutex_enter(&buf_pool->LRU_list_mutex); |
1967 | + rw_lock_x_lock(&buf_pool->page_hash_latch); |
1968 | + |
1969 | + watch_page = buf_page_hash_get_low(buf_pool, space, offset, fold); |
1970 | ++ |
1971 | ++ if (UNIV_UNLIKELY(watch_page && watch_page->space_was_being_deleted)) { |
1972 | ++ mutex_t* block_mutex = buf_page_get_mutex_enter(watch_page); |
1973 | ++ |
1974 | ++ /* This page is obsoleted, should discard and retry */ |
1975 | ++ rw_lock_x_unlock(&buf_pool->page_hash_latch); |
1976 | ++ ut_a(block_mutex); |
1977 | ++ |
1978 | ++ buf_LRU_free_block(watch_page, TRUE, TRUE); |
1979 | ++ |
1980 | ++ mutex_exit(&buf_pool->LRU_list_mutex); |
1981 | ++ mutex_exit(block_mutex); |
1982 | ++ |
1983 | ++ goto retry; |
1984 | ++ } |
1985 | ++ |
1986 | + if (watch_page && !buf_pool_watch_is_sentinel(buf_pool, watch_page)) { |
1987 | + /* The page is already in the buffer pool. */ |
1988 | + watch_page = NULL; |
1989 | +@@ -4084,6 +3668,7 @@ |
1990 | bpage->state = BUF_BLOCK_ZIP_PAGE; |
1991 | bpage->space = space; |
1992 | bpage->offset = offset; |
1993 | @@ -21,6 +645,121 @@ |
1994 | |
1995 | |
1996 | #ifdef UNIV_DEBUG |
1997 | +@@ -4112,7 +3697,6 @@ |
1998 | + |
1999 | + /* The block must be put to the LRU list, to the old blocks */ |
2000 | + buf_LRU_add_block(bpage, TRUE/* to old blocks */); |
2001 | +- buf_LRU_insert_zip_clean(bpage); |
2002 | + |
2003 | + mutex_exit(&buf_pool->LRU_list_mutex); |
2004 | + |
2005 | +@@ -4167,6 +3751,7 @@ |
2006 | + |
2007 | + fold = buf_page_address_fold(space, offset); |
2008 | + |
2009 | ++retry: |
2010 | + //buf_pool_mutex_enter(buf_pool); |
2011 | + mutex_enter(&buf_pool->LRU_list_mutex); |
2012 | + rw_lock_x_lock(&buf_pool->page_hash_latch); |
2013 | +@@ -4174,6 +3759,21 @@ |
2014 | + block = (buf_block_t*) buf_page_hash_get_low( |
2015 | + buf_pool, space, offset, fold); |
2016 | + |
2017 | ++ if (UNIV_UNLIKELY(block && block->page.space_was_being_deleted)) { |
2018 | ++ mutex_t* block_mutex = buf_page_get_mutex_enter((buf_page_t*)block); |
2019 | ++ |
2020 | ++ /* This page is obsoleted, should discard and retry */ |
2021 | ++ rw_lock_x_unlock(&buf_pool->page_hash_latch); |
2022 | ++ ut_a(block_mutex); |
2023 | ++ |
2024 | ++ buf_LRU_free_block((buf_page_t*)block, TRUE, TRUE); |
2025 | ++ |
2026 | ++ mutex_exit(&buf_pool->LRU_list_mutex); |
2027 | ++ mutex_exit(block_mutex); |
2028 | ++ |
2029 | ++ goto retry; |
2030 | ++ } |
2031 | ++ |
2032 | + if (block |
2033 | + && buf_page_in_file(&block->page) |
2034 | + && !buf_pool_watch_is_sentinel(buf_pool, &block->page)) { |
2035 | +@@ -4465,9 +4065,9 @@ |
2036 | + } |
2037 | + |
2038 | + if (io_type == BUF_IO_WRITE |
2039 | +- && (buf_page_get_state(bpage) == BUF_BLOCK_ZIP_DIRTY |
2040 | +- || buf_page_get_flush_type(bpage) == BUF_FLUSH_LRU)) { |
2041 | +- /* to keep consistency at buf_LRU_insert_zip_clean() */ |
2042 | ++ && (/* buf_page_get_state(bpage) == BUF_BLOCK_ZIP_DIRTY |
2043 | ++ ||*/ buf_page_get_flush_type(bpage) == BUF_FLUSH_LRU)) { |
2044 | ++ /* (REMOVED) to keep consistency at buf_LRU_insert_zip_clean() */ |
2045 | + have_LRU_mutex = TRUE; /* optimistic */ |
2046 | + } |
2047 | + retry_mutex: |
2048 | +@@ -4788,35 +4388,7 @@ |
2049 | + |
2050 | + mutex_enter(&buf_pool->zip_mutex); |
2051 | + |
2052 | +- /* Check clean compressed-only blocks. */ |
2053 | +- |
2054 | +- for (b = UT_LIST_GET_FIRST(buf_pool->zip_clean); b; |
2055 | +- b = UT_LIST_GET_NEXT(zip_list, b)) { |
2056 | +- ut_a(buf_page_get_state(b) == BUF_BLOCK_ZIP_PAGE); |
2057 | +- switch (buf_page_get_io_fix(b)) { |
2058 | +- case BUF_IO_NONE: |
2059 | +- /* All clean blocks should be I/O-unfixed. */ |
2060 | +- break; |
2061 | +- case BUF_IO_READ: |
2062 | +- /* In buf_LRU_free_block(), we temporarily set |
2063 | +- b->io_fix = BUF_IO_READ for a newly allocated |
2064 | +- control block in order to prevent |
2065 | +- buf_page_get_gen() from decompressing the block. */ |
2066 | +- break; |
2067 | +- default: |
2068 | +- ut_error; |
2069 | +- break; |
2070 | +- } |
2071 | +- |
2072 | +- /* It is OK to read oldest_modification here because |
2073 | +- we have acquired buf_pool->zip_mutex above which acts |
2074 | +- as the 'block->mutex' for these bpages. */ |
2075 | +- ut_a(!b->oldest_modification); |
2076 | +- ut_a(buf_page_hash_get(buf_pool, b->space, b->offset) == b); |
2077 | +- |
2078 | +- n_lru++; |
2079 | +- n_zip++; |
2080 | +- } |
2081 | ++ /* Check clean compressed-only blocks. (zip_clean list was removed)*/ |
2082 | + |
2083 | + /* Check dirty blocks. */ |
2084 | + |
2085 | +@@ -4880,7 +4452,7 @@ |
2086 | + ut_error; |
2087 | + } |
2088 | + |
2089 | +- ut_a(UT_LIST_GET_LEN(buf_pool->LRU) == n_lru); |
2090 | ++ //ut_a(UT_LIST_GET_LEN(buf_pool->LRU) == n_lru); /* zip_clean list was removed */ |
2091 | + /* because of latching order with block->mutex, we cannot get needed mutexes before that */ |
2092 | + /* |
2093 | + if (UT_LIST_GET_LEN(buf_pool->free) != n_free) { |
2094 | +@@ -5116,17 +4688,6 @@ |
2095 | + |
2096 | + /* Traverse the lists of clean and dirty compressed-only blocks. */ |
2097 | + |
2098 | +- for (b = UT_LIST_GET_FIRST(buf_pool->zip_clean); b; |
2099 | +- b = UT_LIST_GET_NEXT(zip_list, b)) { |
2100 | +- ut_a(buf_page_get_state(b) == BUF_BLOCK_ZIP_PAGE); |
2101 | +- ut_a(buf_page_get_io_fix(b) != BUF_IO_WRITE); |
2102 | +- |
2103 | +- if (b->buf_fix_count != 0 |
2104 | +- || buf_page_get_io_fix(b) != BUF_IO_NONE) { |
2105 | +- fixed_pages_number++; |
2106 | +- } |
2107 | +- } |
2108 | +- |
2109 | + buf_flush_list_mutex_enter(buf_pool); |
2110 | + for (b = UT_LIST_GET_FIRST(buf_pool->flush_list); b; |
2111 | + b = UT_LIST_GET_NEXT(flush_list, b)) { |
2112 | diff -ruN a/storage/innobase/buf/buf0flu.c b/storage/innobase/buf/buf0flu.c |
2113 | --- a/storage/innobase/buf/buf0flu.c 2011-02-23 19:00:48.182659256 +0900 |
2114 | +++ b/storage/innobase/buf/buf0flu.c 2011-02-23 19:01:19.138826278 +0900 |
2115 | @@ -47,31 +786,66 @@ |
2116 | if (flush_type != BUF_FLUSH_LRU) { |
2117 | |
2118 | return(TRUE); |
2119 | +@@ -527,7 +534,6 @@ |
2120 | + case BUF_BLOCK_ZIP_DIRTY: |
2121 | + buf_page_set_state(bpage, BUF_BLOCK_ZIP_PAGE); |
2122 | + UT_LIST_REMOVE(flush_list, buf_pool->flush_list, bpage); |
2123 | +- buf_LRU_insert_zip_clean(bpage); |
2124 | + break; |
2125 | + case BUF_BLOCK_FILE_PAGE: |
2126 | + UT_LIST_REMOVE(flush_list, buf_pool->flush_list, bpage); |
2127 | diff -ruN a/storage/innobase/buf/buf0lru.c b/storage/innobase/buf/buf0lru.c |
2128 | --- a/storage/innobase/buf/buf0lru.c 2011-02-23 19:00:47.939695791 +0900 |
2129 | +++ b/storage/innobase/buf/buf0lru.c 2011-02-23 19:01:19.142741970 +0900 |
2130 | -@@ -574,6 +574,37 @@ |
2131 | +@@ -574,38 +574,59 @@ |
2132 | } |
2133 | } |
2134 | |
2135 | +-/********************************************************************//** |
2136 | +-Insert a compressed block into buf_pool->zip_clean in the LRU order. */ |
2137 | +/******************************************************************//** |
2138 | +*/ |
2139 | -+UNIV_INTERN |
2140 | -+void |
2141 | + UNIV_INTERN |
2142 | + void |
2143 | +-buf_LRU_insert_zip_clean( |
2144 | +-/*=====================*/ |
2145 | +- buf_page_t* bpage) /*!< in: pointer to the block in question */ |
2146 | +buf_LRU_mark_space_was_deleted( |
2147 | +/*===========================*/ |
2148 | + ulint id) /*!< in: space id */ |
2149 | -+{ |
2150 | + { |
2151 | +- buf_page_t* b; |
2152 | +- buf_pool_t* buf_pool = buf_pool_from_bpage(bpage); |
2153 | + ulint i; |
2154 | -+ |
2155 | + |
2156 | +- //ut_ad(buf_pool_mutex_own(buf_pool)); |
2157 | +- ut_ad(mutex_own(&buf_pool->LRU_list_mutex)); |
2158 | +- ut_ad(mutex_own(&buf_pool->zip_mutex)); |
2159 | +- ut_ad(buf_page_get_state(bpage) == BUF_BLOCK_ZIP_PAGE); |
2160 | + for (i = 0; i < srv_buf_pool_instances; i++) { |
2161 | + buf_pool_t* buf_pool; |
2162 | + buf_page_t* bpage; |
2163 | -+ |
2164 | ++ buf_chunk_t* chunk; |
2165 | ++ ulint j, k; |
2166 | + |
2167 | +- /* Find the first successor of bpage in the LRU list |
2168 | +- that is in the zip_clean list. */ |
2169 | +- b = bpage; |
2170 | +- do { |
2171 | +- b = UT_LIST_GET_NEXT(LRU, b); |
2172 | +- } while (b && (buf_page_get_state(b) != BUF_BLOCK_ZIP_PAGE || !b->in_LRU_list)); |
2173 | + buf_pool = buf_pool_from_array(i); |
2174 | -+ |
2175 | + |
2176 | +- /* Insert bpage before b, i.e., after the predecessor of b. */ |
2177 | +- if (b) { |
2178 | +- b = UT_LIST_GET_PREV(zip_list, b); |
2179 | +- } |
2180 | + mutex_enter(&buf_pool->LRU_list_mutex); |
2181 | -+ |
2182 | + |
2183 | +- if (b) { |
2184 | +- UT_LIST_INSERT_AFTER(zip_list, buf_pool->zip_clean, b, bpage); |
2185 | +- } else { |
2186 | +- UT_LIST_ADD_FIRST(zip_list, buf_pool->zip_clean, bpage); |
2187 | + bpage = UT_LIST_GET_FIRST(buf_pool->LRU); |
2188 | + |
2189 | + while (bpage != NULL) { |
2190 | @@ -82,13 +856,33 @@ |
2191 | + } |
2192 | + |
2193 | + mutex_exit(&buf_pool->LRU_list_mutex); |
2194 | -+ } |
2195 | -+} |
2196 | -+ |
2197 | - /********************************************************************//** |
2198 | - Insert a compressed block into buf_pool->zip_clean in the LRU order. */ |
2199 | - UNIV_INTERN |
2200 | -@@ -1558,6 +1589,10 @@ |
2201 | ++ |
2202 | ++ rw_lock_s_lock(&btr_search_latch); |
2203 | ++ chunk = buf_pool->chunks; |
2204 | ++ for (j = buf_pool->n_chunks; j--; chunk++) { |
2205 | ++ buf_block_t* block = chunk->blocks; |
2206 | ++ for (k = chunk->size; k--; block++) { |
2207 | ++ if (buf_block_get_state(block) |
2208 | ++ != BUF_BLOCK_FILE_PAGE |
2209 | ++ || !block->is_hashed |
2210 | ++ || buf_page_get_space(&block->page) != id) { |
2211 | ++ continue; |
2212 | ++ } |
2213 | ++ |
2214 | ++ rw_lock_s_unlock(&btr_search_latch); |
2215 | ++ |
2216 | ++ rw_lock_x_lock(&block->lock); |
2217 | ++ btr_search_drop_page_hash_index(block, NULL); |
2218 | ++ rw_lock_x_unlock(&block->lock); |
2219 | ++ |
2220 | ++ rw_lock_s_lock(&btr_search_latch); |
2221 | ++ } |
2222 | ++ } |
2223 | ++ rw_lock_s_unlock(&btr_search_latch); |
2224 | + } |
2225 | + } |
2226 | + |
2227 | +@@ -1558,6 +1579,10 @@ |
2228 | return(BUF_LRU_NOT_FREED); |
2229 | } |
2230 | |
2231 | @@ -99,6 +893,23 @@ |
2232 | #ifdef UNIV_IBUF_COUNT_DEBUG |
2233 | ut_a(ibuf_count_get(bpage->space, bpage->offset) == 0); |
2234 | #endif /* UNIV_IBUF_COUNT_DEBUG */ |
2235 | +@@ -1733,7 +1758,6 @@ |
2236 | + |
2237 | + mutex_enter(&buf_pool->zip_mutex); |
2238 | + if (b->state == BUF_BLOCK_ZIP_PAGE) { |
2239 | +- buf_LRU_insert_zip_clean(b); |
2240 | + } else { |
2241 | + /* Relocate on buf_pool->flush_list. */ |
2242 | + buf_flush_relocate_on_flush_list(bpage, b); |
2243 | +@@ -2038,8 +2062,6 @@ |
2244 | + ut_a(bpage->zip.data); |
2245 | + ut_a(buf_page_get_zip_size(bpage)); |
2246 | + |
2247 | +- UT_LIST_REMOVE(zip_list, buf_pool->zip_clean, bpage); |
2248 | +- |
2249 | + mutex_exit(&buf_pool->zip_mutex); |
2250 | + //buf_pool_mutex_exit_forbid(buf_pool); |
2251 | + |
2252 | diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c |
2253 | --- a/storage/innobase/fil/fil0fil.c 2011-02-23 19:00:48.223696428 +0900 |
2254 | +++ b/storage/innobase/fil/fil0fil.c 2011-02-23 19:01:19.147655510 +0900 |
2255 | @@ -117,9 +928,9 @@ |
2256 | - ut_a(node->n_pending == 0); |
2257 | + ut_a(node->n_pending == 0 || node->space->is_being_deleted); |
2258 | ut_a(node->n_pending_flushes == 0); |
2259 | - ut_a(node->modification_counter == node->flush_counter); |
2260 | - |
2261 | -@@ -876,7 +877,7 @@ |
2262 | + ut_a(node->modification_counter == node->flush_counter |
2263 | + || srv_fast_shutdown == 2); |
2264 | +@@ -877,7 +878,7 @@ |
2265 | ut_a(system->n_open > 0); |
2266 | system->n_open--; |
2267 | |
2268 | @@ -128,7 +939,7 @@ |
2269 | ut_a(UT_LIST_GET_LEN(system->LRU) > 0); |
2270 | |
2271 | /* The node is in the LRU list, remove it */ |
2272 | -@@ -1075,7 +1076,7 @@ |
2273 | +@@ -1076,7 +1077,7 @@ |
2274 | ut_ad(node && system && space); |
2275 | ut_ad(mutex_own(&(system->mutex))); |
2276 | ut_a(node->magic_n == FIL_NODE_MAGIC_N); |
2277 | @@ -137,7 +948,7 @@ |
2278 | |
2279 | if (node->open) { |
2280 | /* We fool the assertion in fil_node_close_file() to think |
2281 | -@@ -1597,6 +1598,8 @@ |
2282 | +@@ -1598,6 +1599,8 @@ |
2283 | |
2284 | mutex_create(fil_system_mutex_key, |
2285 | &fil_system->mutex, SYNC_ANY_LATCH); |
2286 | @@ -146,7 +957,7 @@ |
2287 | |
2288 | fil_system->spaces = hash_create(hash_size); |
2289 | fil_system->name_hash = hash_create(hash_size); |
2290 | -@@ -2343,7 +2346,11 @@ |
2291 | +@@ -2344,7 +2347,11 @@ |
2292 | completely and permanently. The flag is_being_deleted also prevents |
2293 | fil_flush() from being applied to this tablespace. */ |
2294 | |
2295 | @@ -158,7 +969,7 @@ |
2296 | #endif |
2297 | /* printf("Deleting tablespace %s id %lu\n", space->name, id); */ |
2298 | |
2299 | -@@ -4721,6 +4728,10 @@ |
2300 | +@@ -4722,6 +4729,10 @@ |
2301 | ulint page_size; |
2302 | ibool success = TRUE; |
2303 | |
2304 | @@ -169,7 +980,7 @@ |
2305 | fil_mutex_enter_and_prepare_for_io(space_id); |
2306 | |
2307 | space = fil_space_get_by_id(space_id); |
2308 | -@@ -4732,6 +4743,7 @@ |
2309 | +@@ -4733,6 +4744,7 @@ |
2310 | *actual_size = space->size; |
2311 | |
2312 | mutex_exit(&fil_system->mutex); |
2313 | @@ -177,7 +988,7 @@ |
2314 | |
2315 | return(TRUE); |
2316 | } |
2317 | -@@ -4764,6 +4776,8 @@ |
2318 | +@@ -4765,6 +4777,8 @@ |
2319 | offset_low = ((start_page_no - file_start_page_no) |
2320 | % (4096 * ((1024 * 1024) / page_size))) |
2321 | * page_size; |
2322 | @@ -186,7 +997,7 @@ |
2323 | #ifdef UNIV_HOTBACKUP |
2324 | success = os_file_write(node->name, node->handle, buf, |
2325 | offset_low, offset_high, |
2326 | -@@ -4773,8 +4787,10 @@ |
2327 | +@@ -4774,8 +4788,10 @@ |
2328 | node->name, node->handle, buf, |
2329 | offset_low, offset_high, |
2330 | page_size * n_pages, |
2331 | @@ -198,7 +1009,7 @@ |
2332 | if (success) { |
2333 | node->size += n_pages; |
2334 | space->size += n_pages; |
2335 | -@@ -4820,6 +4836,7 @@ |
2336 | +@@ -4821,6 +4837,7 @@ |
2337 | printf("Extended %s to %lu, actual size %lu pages\n", space->name, |
2338 | size_after_extend, *actual_size); */ |
2339 | mutex_exit(&fil_system->mutex); |
2340 | @@ -206,7 +1017,7 @@ |
2341 | |
2342 | fil_flush(space_id, TRUE); |
2343 | |
2344 | -@@ -5182,6 +5199,22 @@ |
2345 | +@@ -5183,6 +5200,22 @@ |
2346 | srv_data_written+= len; |
2347 | } |
2348 | |
2349 | @@ -229,7 +1040,7 @@ |
2350 | /* Reserve the fil_system mutex and make sure that we can open at |
2351 | least one file while holding it, if the file is not already open */ |
2352 | |
2353 | -@@ -5323,10 +5356,24 @@ |
2354 | +@@ -5324,10 +5357,24 @@ |
2355 | #else |
2356 | /* Queue the aio request */ |
2357 | ret = os_aio(type, mode | wake_later, node->name, node->handle, buf, |
2358 | @@ -255,7 +1066,7 @@ |
2359 | ut_a(ret); |
2360 | |
2361 | if (mode == OS_AIO_SYNC) { |
2362 | -@@ -5426,6 +5473,7 @@ |
2363 | +@@ -5427,6 +5474,7 @@ |
2364 | fil_node_t* fil_node; |
2365 | void* message; |
2366 | ulint type; |
2367 | @@ -263,7 +1074,7 @@ |
2368 | |
2369 | ut_ad(fil_validate_skip()); |
2370 | |
2371 | -@@ -5433,10 +5481,10 @@ |
2372 | +@@ -5434,10 +5482,10 @@ |
2373 | srv_set_io_thread_op_info(segment, "native aio handle"); |
2374 | #ifdef WIN_ASYNC_IO |
2375 | ret = os_aio_windows_handle(segment, 0, &fil_node, |
2376 | @@ -276,7 +1087,7 @@ |
2377 | #else |
2378 | ut_error; |
2379 | ret = 0; /* Eliminate compiler warning */ |
2380 | -@@ -5445,7 +5493,22 @@ |
2381 | +@@ -5446,7 +5494,22 @@ |
2382 | srv_set_io_thread_op_info(segment, "simulated aio handle"); |
2383 | |
2384 | ret = os_aio_simulated_handle(segment, &fil_node, |
2385 | @@ -303,7 +1114,7 @@ |
2386 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
2387 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:57:13.035513990 +0900 |
2388 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:57:53.084513775 +0900 |
2389 | -@@ -12007,6 +12007,12 @@ |
2390 | +@@ -12024,6 +12024,12 @@ |
2391 | "except for the deletion.", |
2392 | NULL, NULL, 0, &corrupt_table_action_typelib); |
2393 | |
2394 | @@ -316,7 +1127,7 @@ |
2395 | static struct st_mysql_sys_var* innobase_system_variables[]= { |
2396 | MYSQL_SYSVAR(page_size), |
2397 | MYSQL_SYSVAR(log_block_size), |
2398 | -@@ -12097,6 +12103,7 @@ |
2399 | +@@ -12115,6 +12121,7 @@ |
2400 | MYSQL_SYSVAR(purge_batch_size), |
2401 | MYSQL_SYSVAR(rollback_segments), |
2402 | MYSQL_SYSVAR(corrupt_table_action), |
2403 | @@ -324,7 +1135,7 @@ |
2404 | NULL |
2405 | }; |
2406 | |
2407 | -@@ -12106,7 +12113,7 @@ |
2408 | +@@ -12124,7 +12131,7 @@ |
2409 | &innobase_storage_engine, |
2410 | innobase_hton_name, |
2411 | plugin_author, |
2412 | @@ -336,7 +1147,20 @@ |
2413 | diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h |
2414 | --- a/storage/innobase/include/buf0buf.h 2011-02-23 19:00:48.252696774 +0900 |
2415 | +++ b/storage/innobase/include/buf0buf.h 2011-02-23 19:01:19.182655902 +0900 |
2416 | -@@ -1438,6 +1438,7 @@ |
2417 | +@@ -261,12 +261,6 @@ |
2418 | + BUF_BLOCK_ZIP_DIRTY or BUF_BLOCK_ZIP_PAGE */ |
2419 | + buf_page_t* dpage) /*!< in/out: destination control block */ |
2420 | + __attribute__((nonnull)); |
2421 | +-/********************************************************************//** |
2422 | +-Resizes the buffer pool. */ |
2423 | +-UNIV_INTERN |
2424 | +-void |
2425 | +-buf_pool_resize(void); |
2426 | +-/*=================*/ |
2427 | + /*********************************************************************//** |
2428 | + Gets the current size of buffer buf_pool in bytes. |
2429 | + @return size in bytes */ |
2430 | +@@ -1441,6 +1435,7 @@ |
2431 | 0 if the block was never accessed |
2432 | in the buffer pool */ |
2433 | /* @} */ |
2434 | @@ -344,6 +1168,15 @@ |
2435 | ibool is_corrupt; |
2436 | # if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG |
2437 | ibool file_page_was_freed; |
2438 | +@@ -1780,8 +1775,6 @@ |
2439 | + frames and buf_page_t descriptors of blocks that exist |
2440 | + in the buffer pool only in compressed form. */ |
2441 | + /* @{ */ |
2442 | +- UT_LIST_BASE_NODE_T(buf_page_t) zip_clean; |
2443 | +- /*!< unmodified compressed pages */ |
2444 | + UT_LIST_BASE_NODE_T(buf_page_t) zip_free[BUF_BUDDY_SIZES_MAX]; |
2445 | + /*!< buddy free lists */ |
2446 | + |
2447 | diff -ruN a/storage/innobase/include/buf0buf.ic b/storage/innobase/include/buf0buf.ic |
2448 | --- a/storage/innobase/include/buf0buf.ic 2011-02-23 19:00:48.130659154 +0900 |
2449 | +++ b/storage/innobase/include/buf0buf.ic 2011-02-23 19:01:19.185655906 +0900 |
2450 | @@ -358,20 +1191,25 @@ |
2451 | diff -ruN a/storage/innobase/include/buf0lru.h b/storage/innobase/include/buf0lru.h |
2452 | --- a/storage/innobase/include/buf0lru.h 2011-02-23 19:00:47.977658923 +0900 |
2453 | +++ b/storage/innobase/include/buf0lru.h 2011-02-23 19:01:19.188625768 +0900 |
2454 | -@@ -85,6 +85,13 @@ |
2455 | +@@ -85,13 +85,13 @@ |
2456 | buf_LRU_invalidate_tablespace( |
2457 | /*==========================*/ |
2458 | ulint id); /*!< in: space id */ |
2459 | +-/********************************************************************//** |
2460 | +-Insert a compressed block into buf_pool->zip_clean in the LRU order. */ |
2461 | +/******************************************************************//** |
2462 | +*/ |
2463 | -+UNIV_INTERN |
2464 | -+void |
2465 | + UNIV_INTERN |
2466 | + void |
2467 | +-buf_LRU_insert_zip_clean( |
2468 | +-/*=====================*/ |
2469 | +- buf_page_t* bpage); /*!< in: pointer to the block in question */ |
2470 | +buf_LRU_mark_space_was_deleted( |
2471 | +/*===========================*/ |
2472 | + ulint id); /*!< in: space id */ |
2473 | - /********************************************************************//** |
2474 | - Insert a compressed block into buf_pool->zip_clean in the LRU order. */ |
2475 | - UNIV_INTERN |
2476 | + |
2477 | + /******************************************************************//** |
2478 | + Try to free a block. If bpage is a descriptor of a compressed-only |
2479 | diff -ruN a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h |
2480 | --- a/storage/innobase/include/os0file.h 2011-02-23 19:00:48.260696646 +0900 |
2481 | +++ b/storage/innobase/include/os0file.h 2011-02-23 19:01:19.190656054 +0900 |
2482 | @@ -493,7 +1331,7 @@ |
2483 | +++ b/storage/innobase/include/univ.i 2010-12-04 15:57:53.091592933 +0900 |
2484 | @@ -53,6 +53,11 @@ |
2485 | #define INNODB_VERSION_MINOR 1 |
2486 | - #define INNODB_VERSION_BUGFIX 7 |
2487 | + #define INNODB_VERSION_BUGFIX 8 |
2488 | |
2489 | +#ifndef PERCONA_INNODB_VERSION |
2490 | +#define PERCONA_INNODB_VERSION 20.1 |
2491 | @@ -524,7 +1362,7 @@ |
2492 | fil_node_t* message1; /*!< message which is given by the */ |
2493 | void* message2; /*!< the requester of an aio operation |
2494 | and which can be used to identify |
2495 | -@@ -3685,7 +3686,8 @@ |
2496 | +@@ -3686,7 +3687,8 @@ |
2497 | offset */ |
2498 | ulint offset_high, /*!< in: most significant 32 bits of |
2499 | offset */ |
2500 | @@ -534,7 +1372,7 @@ |
2501 | { |
2502 | os_aio_slot_t* slot = NULL; |
2503 | #ifdef WIN_ASYNC_IO |
2504 | -@@ -3774,6 +3776,7 @@ |
2505 | +@@ -3775,6 +3777,7 @@ |
2506 | slot->offset = offset; |
2507 | slot->offset_high = offset_high; |
2508 | slot->io_already_done = FALSE; |
2509 | @@ -542,7 +1380,7 @@ |
2510 | |
2511 | #ifdef WIN_ASYNC_IO |
2512 | control = &(slot->control); |
2513 | -@@ -4061,6 +4064,7 @@ |
2514 | +@@ -4062,6 +4065,7 @@ |
2515 | (can be used to identify a completed |
2516 | aio operation); ignored if mode is |
2517 | OS_AIO_SYNC */ |
2518 | @@ -550,7 +1388,7 @@ |
2519 | trx_t* trx) |
2520 | { |
2521 | os_aio_array_t* array; |
2522 | -@@ -4149,7 +4153,7 @@ |
2523 | +@@ -4157,7 +4161,7 @@ |
2524 | trx->io_read += n; |
2525 | } |
2526 | slot = os_aio_array_reserve_slot(type, array, message1, message2, file, |
2527 | @@ -559,7 +1397,7 @@ |
2528 | if (type == OS_FILE_READ) { |
2529 | if (srv_use_native_aio) { |
2530 | os_n_file_reads++; |
2531 | -@@ -4268,7 +4272,8 @@ |
2532 | +@@ -4276,7 +4280,8 @@ |
2533 | parameters are valid and can be used to |
2534 | restart the operation, for example */ |
2535 | void** message2, |
2536 | @@ -569,7 +1407,7 @@ |
2537 | { |
2538 | ulint orig_seg = segment; |
2539 | os_aio_array_t* array; |
2540 | -@@ -4347,6 +4352,7 @@ |
2541 | +@@ -4355,6 +4360,7 @@ |
2542 | *message2 = slot->message2; |
2543 | |
2544 | *type = slot->type; |
2545 | @@ -577,7 +1415,7 @@ |
2546 | |
2547 | if (ret && len == slot->len) { |
2548 | ret_val = TRUE; |
2549 | -@@ -4575,7 +4581,8 @@ |
2550 | +@@ -4583,7 +4589,8 @@ |
2551 | aio operation failed, these output |
2552 | parameters are valid and can be used to |
2553 | restart the operation. */ |
2554 | @@ -587,7 +1425,7 @@ |
2555 | { |
2556 | ulint segment; |
2557 | os_aio_array_t* array; |
2558 | -@@ -4648,6 +4655,7 @@ |
2559 | +@@ -4656,6 +4663,7 @@ |
2560 | *message2 = slot->message2; |
2561 | |
2562 | *type = slot->type; |
2563 | @@ -595,7 +1433,7 @@ |
2564 | |
2565 | if ((slot->ret == 0) && (slot->n_bytes == (long)slot->len)) { |
2566 | ret = TRUE; |
2567 | -@@ -4701,7 +4709,8 @@ |
2568 | +@@ -4709,7 +4717,8 @@ |
2569 | parameters are valid and can be used to |
2570 | restart the operation, for example */ |
2571 | void** message2, |
2572 | @@ -605,7 +1443,7 @@ |
2573 | { |
2574 | os_aio_array_t* array; |
2575 | ulint segment; |
2576 | -@@ -4997,6 +5006,7 @@ |
2577 | +@@ -5005,6 +5014,7 @@ |
2578 | *message2 = slot->message2; |
2579 | |
2580 | *type = slot->type; |
2581 | @@ -638,10 +1476,60 @@ |
2582 | if (prebuilt->sql_stat_start) { |
2583 | node->state = INS_NODE_SET_IX_LOCK; |
2584 | prebuilt->sql_stat_start = FALSE; |
2585 | +@@ -2602,10 +2610,29 @@ |
2586 | + |
2587 | + err = DB_ERROR; |
2588 | + } else { |
2589 | ++ dict_index_t* index; |
2590 | ++ |
2591 | + /* Set the flag which tells that now it is legal to |
2592 | + IMPORT a tablespace for this table */ |
2593 | + table->tablespace_discarded = TRUE; |
2594 | + table->ibd_file_missing = TRUE; |
2595 | ++ |
2596 | ++ /* check adaptive hash entries */ |
2597 | ++ index = dict_table_get_first_index(table); |
2598 | ++ while (index) { |
2599 | ++ ulint ref_count = btr_search_info_get_ref_count(index->search_info, index->id); |
2600 | ++ if (ref_count) { |
2601 | ++ fprintf(stderr, "InnoDB: Warning:" |
2602 | ++ " hash index ref_count (%lu) is not zero" |
2603 | ++ " after fil_discard_tablespace().\n" |
2604 | ++ "index: \"%s\"" |
2605 | ++ " table: \"%s\"\n", |
2606 | ++ ref_count, |
2607 | ++ index->name, |
2608 | ++ table->name); |
2609 | ++ } |
2610 | ++ index = dict_table_get_next_index(index); |
2611 | ++ } |
2612 | + } |
2613 | + } |
2614 | + |
2615 | +@@ -2954,6 +2981,19 @@ |
2616 | + table->space = space; |
2617 | + index = dict_table_get_first_index(table); |
2618 | + do { |
2619 | ++ ulint ref_count = btr_search_info_get_ref_count(index->search_info, index->id); |
2620 | ++ /* check adaptive hash entries */ |
2621 | ++ if (ref_count) { |
2622 | ++ fprintf(stderr, "InnoDB: Warning:" |
2623 | ++ " hash index ref_count (%lu) is not zero" |
2624 | ++ " after fil_discard_tablespace().\n" |
2625 | ++ "index: \"%s\"" |
2626 | ++ " table: \"%s\"\n", |
2627 | ++ ref_count, |
2628 | ++ index->name, |
2629 | ++ table->name); |
2630 | ++ } |
2631 | ++ |
2632 | + index->space = space; |
2633 | + index = dict_table_get_next_index(index); |
2634 | + } while (index); |
2635 | diff -ruN a/storage/innobase/row/row0sel.c b/storage/innobase/row/row0sel.c |
2636 | --- a/storage/innobase/row/row0sel.c 2010-12-04 15:52:23.494514495 +0900 |
2637 | +++ b/storage/innobase/row/row0sel.c 2010-12-04 16:01:38.320883699 +0900 |
2638 | -@@ -3366,6 +3366,7 @@ |
2639 | +@@ -3367,6 +3367,7 @@ |
2640 | ulint offsets_[REC_OFFS_NORMAL_SIZE]; |
2641 | ulint* offsets = offsets_; |
2642 | ibool table_lock_waited = FALSE; |
2643 | @@ -649,7 +1537,7 @@ |
2644 | |
2645 | rec_offs_init(offsets_); |
2646 | |
2647 | -@@ -3737,6 +3738,17 @@ |
2648 | +@@ -3738,6 +3739,17 @@ |
2649 | |
2650 | /* Do some start-of-statement preparations */ |
2651 | |
2652 | @@ -667,7 +1555,7 @@ |
2653 | if (!prebuilt->sql_stat_start) { |
2654 | /* No need to set an intention lock or assign a read view */ |
2655 | |
2656 | -@@ -3747,6 +3759,18 @@ |
2657 | +@@ -3748,6 +3760,18 @@ |
2658 | " perform a consistent read\n" |
2659 | "InnoDB: but the read view is not assigned!\n", |
2660 | stderr); |
2661 | |
2662 | === modified file 'innodb_io_patches.patch' |
2663 | --- innodb_io_patches.patch 2011-07-07 15:13:12 +0000 |
2664 | +++ innodb_io_patches.patch 2011-08-01 03:32:34 +0000 |
2665 | @@ -62,7 +62,7 @@ |
2666 | diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c |
2667 | --- a/storage/innobase/fil/fil0fil.c 2011-07-07 18:43:12.000000000 +0400 |
2668 | +++ b/storage/innobase/fil/fil0fil.c 2011-07-07 19:01:22.000000000 +0400 |
2669 | -@@ -2600,7 +2600,7 @@ |
2670 | +@@ -2601,7 +2601,7 @@ |
2671 | |
2672 | os_thread_sleep(20000); |
2673 | |
2674 | @@ -71,7 +71,7 @@ |
2675 | |
2676 | goto retry; |
2677 | |
2678 | -@@ -2814,7 +2814,7 @@ |
2679 | +@@ -2815,7 +2815,7 @@ |
2680 | goto error_exit; |
2681 | } |
2682 | |
2683 | @@ -80,7 +80,7 @@ |
2684 | |
2685 | if (!ret) { |
2686 | fputs("InnoDB: Error: file flush of tablespace ", stderr); |
2687 | -@@ -3000,7 +3000,7 @@ |
2688 | +@@ -3001,7 +3001,7 @@ |
2689 | } |
2690 | } |
2691 | |
2692 | @@ -89,7 +89,7 @@ |
2693 | if (!success) { |
2694 | |
2695 | goto func_exit; |
2696 | -@@ -3022,7 +3022,7 @@ |
2697 | +@@ -3023,7 +3023,7 @@ |
2698 | |
2699 | goto func_exit; |
2700 | } |
2701 | @@ -98,7 +98,7 @@ |
2702 | func_exit: |
2703 | os_file_close(file); |
2704 | ut_free(buf2); |
2705 | -@@ -4005,7 +4005,7 @@ |
2706 | +@@ -4006,7 +4006,7 @@ |
2707 | size_after_extend, *actual_size); */ |
2708 | mutex_exit(&fil_system->mutex); |
2709 | |
2710 | @@ -107,7 +107,7 @@ |
2711 | |
2712 | return(success); |
2713 | } |
2714 | -@@ -4576,8 +4576,9 @@ |
2715 | +@@ -4577,8 +4577,9 @@ |
2716 | void |
2717 | fil_flush( |
2718 | /*======*/ |
2719 | @@ -118,7 +118,7 @@ |
2720 | { |
2721 | fil_space_t* space; |
2722 | fil_node_t* node; |
2723 | -@@ -4648,7 +4649,7 @@ |
2724 | +@@ -4649,7 +4650,7 @@ |
2725 | /* fprintf(stderr, "Flushing to file %s\n", |
2726 | node->name); */ |
2727 | |
2728 | @@ -127,7 +127,7 @@ |
2729 | |
2730 | mutex_enter(&fil_system->mutex); |
2731 | |
2732 | -@@ -4731,7 +4732,7 @@ |
2733 | +@@ -4732,7 +4733,7 @@ |
2734 | a non-existing space id. */ |
2735 | for (i = 0; i < n_space_ids; i++) { |
2736 | |
2737 | @@ -139,7 +139,7 @@ |
2738 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
2739 | --- a/storage/innobase/handler/ha_innodb.cc 2011-07-07 18:43:12.000000000 +0400 |
2740 | +++ b/storage/innobase/handler/ha_innodb.cc 2011-07-07 19:01:24.000000000 +0400 |
2741 | -@@ -444,6 +444,12 @@ |
2742 | +@@ -445,6 +445,12 @@ |
2743 | "Timeout in seconds an InnoDB transaction may wait for a lock before being rolled back. Values above 100000000 disable the timeout.", |
2744 | NULL, NULL, 50, 1, 1024 * 1024 * 1024, 0); |
2745 | |
2746 | @@ -152,7 +152,7 @@ |
2747 | |
2748 | static handler *innobase_create_handler(handlerton *hton, |
2749 | TABLE_SHARE *table, |
2750 | -@@ -838,6 +844,17 @@ |
2751 | +@@ -839,6 +845,17 @@ |
2752 | } |
2753 | } |
2754 | |
2755 | @@ -170,7 +170,7 @@ |
2756 | /********************************************************************//** |
2757 | Obtain the InnoDB transaction of a MySQL thread. |
2758 | @return reference to transaction pointer */ |
2759 | -@@ -2437,6 +2454,9 @@ |
2760 | +@@ -2443,6 +2460,9 @@ |
2761 | srv_n_read_io_threads = (ulint) innobase_read_io_threads; |
2762 | srv_n_write_io_threads = (ulint) innobase_write_io_threads; |
2763 | |
2764 | @@ -180,7 +180,7 @@ |
2765 | srv_force_recovery = (ulint) innobase_force_recovery; |
2766 | |
2767 | srv_use_doublewrite_buf = (ibool) innobase_use_doublewrite; |
2768 | -@@ -11025,7 +11045,7 @@ |
2769 | +@@ -11037,7 +11057,7 @@ |
2770 | PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY, |
2771 | "Purge threads can be either 0 or 1.", |
2772 | NULL, NULL, |
2773 | @@ -189,7 +189,7 @@ |
2774 | 0, /* Minimum value */ |
2775 | 1, 0); /* Maximum value */ |
2776 | |
2777 | -@@ -11067,12 +11087,18 @@ |
2778 | +@@ -11079,12 +11099,18 @@ |
2779 | innodb_file_format_max_validate, |
2780 | innodb_file_format_max_update, "Antelope"); |
2781 | |
2782 | @@ -214,7 +214,7 @@ |
2783 | |
2784 | static MYSQL_SYSVAR_STR(flush_method, innobase_file_flush_method, |
2785 | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, |
2786 | -@@ -11167,7 +11193,7 @@ |
2787 | +@@ -11184,7 +11210,7 @@ |
2788 | static MYSQL_SYSVAR_LONGLONG(buffer_pool_size, innobase_buffer_pool_size, |
2789 | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, |
2790 | "The size of the memory buffer InnoDB uses to cache data and indexes of its tables.", |
2791 | @@ -223,7 +223,7 @@ |
2792 | |
2793 | static MYSQL_SYSVAR_LONG(buffer_pool_instances, innobase_buffer_pool_instances, |
2794 | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, |
2795 | -@@ -11319,6 +11345,95 @@ |
2796 | +@@ -11336,6 +11362,95 @@ |
2797 | "trigger a readahead.", |
2798 | NULL, NULL, 56, 0, 64, 0); |
2799 | |
2800 | @@ -319,15 +319,15 @@ |
2801 | static struct st_mysql_sys_var* innobase_system_variables[]= { |
2802 | MYSQL_SYSVAR(additional_mem_pool_size), |
2803 | MYSQL_SYSVAR(autoextend_increment), |
2804 | -@@ -11339,6 +11454,7 @@ |
2805 | +@@ -11356,6 +11471,7 @@ |
2806 | MYSQL_SYSVAR(file_format_check), |
2807 | MYSQL_SYSVAR(file_format_max), |
2808 | MYSQL_SYSVAR(flush_log_at_trx_commit), |
2809 | + MYSQL_SYSVAR(use_global_flush_log_at_trx_commit), |
2810 | MYSQL_SYSVAR(flush_method), |
2811 | MYSQL_SYSVAR(force_recovery), |
2812 | - MYSQL_SYSVAR(locks_unsafe_for_binlog), |
2813 | -@@ -11376,6 +11492,13 @@ |
2814 | + MYSQL_SYSVAR(large_prefix), |
2815 | +@@ -11394,6 +11510,13 @@ |
2816 | MYSQL_SYSVAR(show_verbose_locks), |
2817 | MYSQL_SYSVAR(show_locks_held), |
2818 | MYSQL_SYSVAR(version), |
2819 | @@ -837,7 +837,7 @@ |
2820 | } |
2821 | # endif /* UNIV_DO_FLUSH */ |
2822 | |
2823 | -@@ -4289,7 +4305,7 @@ |
2824 | +@@ -4296,7 +4312,7 @@ |
2825 | #ifdef UNIV_DO_FLUSH |
2826 | if (slot->type == OS_FILE_WRITE |
2827 | && !os_do_not_call_flush_at_each_write) { |
2828 | @@ -846,7 +846,7 @@ |
2829 | ut_error; |
2830 | } |
2831 | } |
2832 | -@@ -4590,7 +4606,7 @@ |
2833 | +@@ -4597,7 +4613,7 @@ |
2834 | #ifdef UNIV_DO_FLUSH |
2835 | if (slot->type == OS_FILE_WRITE |
2836 | && !os_do_not_call_flush_at_each_write) |
2837 | |
2838 | === added file 'innodb_kill_idle_transaction.patch' |
2839 | --- innodb_kill_idle_transaction.patch 1970-01-01 00:00:00 +0000 |
2840 | +++ innodb_kill_idle_transaction.patch 2011-08-01 03:32:34 +0000 |
2841 | @@ -0,0 +1,277 @@ |
2842 | +# name : innodb_kill_idle_transaction.patch |
2843 | +# introduced : 5.5.14 |
2844 | +# maintainer : Yasufumi |
2845 | +# |
2846 | +#!!! notice !!! |
2847 | +# Any small change to this file in the main branch |
2848 | +# should be done or reviewed by the maintainer! |
2849 | +diff -ruN a/include/mysql/plugin.h b/include/mysql/plugin.h |
2850 | +--- a/include/mysql/plugin.h 2011-06-22 01:42:39.000000000 +0900 |
2851 | ++++ b/include/mysql/plugin.h 2011-07-12 22:19:58.000000000 +0900 |
2852 | +@@ -625,6 +625,12 @@ |
2853 | + */ |
2854 | + void thd_set_ha_data(MYSQL_THD thd, const struct handlerton *hton, |
2855 | + const void *ha_data); |
2856 | ++ |
2857 | ++int thd_command(const MYSQL_THD thd); |
2858 | ++long long thd_start_time(const MYSQL_THD thd); |
2859 | ++void thd_kill(MYSQL_THD thd); |
2860 | ++#define EXTENDED_FOR_KILLIDLE |
2861 | ++ |
2862 | + #ifdef __cplusplus |
2863 | + } |
2864 | + #endif |
2865 | +diff -ruN a/include/mysql/plugin_audit.h.pp b/include/mysql/plugin_audit.h.pp |
2866 | +--- a/include/mysql/plugin_audit.h.pp 2011-06-22 01:42:39.000000000 +0900 |
2867 | ++++ b/include/mysql/plugin_audit.h.pp 2011-07-13 00:53:06.000000000 +0900 |
2868 | +@@ -195,6 +195,9 @@ |
2869 | + void *thd_get_ha_data(const void* thd, const struct handlerton *hton); |
2870 | + void thd_set_ha_data(void* thd, const struct handlerton *hton, |
2871 | + const void *ha_data); |
2872 | ++int thd_command(const void* thd); |
2873 | ++long long thd_start_time(const void* thd); |
2874 | ++void thd_kill(void* thd); |
2875 | + struct mysql_event_general |
2876 | + { |
2877 | + unsigned int event_subclass; |
2878 | +diff -ruN a/include/mysql/plugin_auth.h.pp b/include/mysql/plugin_auth.h.pp |
2879 | +--- a/include/mysql/plugin_auth.h.pp 2011-06-22 01:42:39.000000000 +0900 |
2880 | ++++ b/include/mysql/plugin_auth.h.pp 2011-07-13 00:53:06.000000000 +0900 |
2881 | +@@ -195,6 +195,9 @@ |
2882 | + void *thd_get_ha_data(const void* thd, const struct handlerton *hton); |
2883 | + void thd_set_ha_data(void* thd, const struct handlerton *hton, |
2884 | + const void *ha_data); |
2885 | ++int thd_command(const void* thd); |
2886 | ++long long thd_start_time(const void* thd); |
2887 | ++void thd_kill(void* thd); |
2888 | + #include <mysql/plugin_auth_common.h> |
2889 | + typedef struct st_plugin_vio_info |
2890 | + { |
2891 | +diff -ruN a/include/mysql/plugin_ftparser.h.pp b/include/mysql/plugin_ftparser.h.pp |
2892 | +--- a/include/mysql/plugin_ftparser.h.pp 2011-06-22 01:42:39.000000000 +0900 |
2893 | ++++ b/include/mysql/plugin_ftparser.h.pp 2011-07-13 00:53:06.000000000 +0900 |
2894 | +@@ -148,6 +148,9 @@ |
2895 | + void *thd_get_ha_data(const void* thd, const struct handlerton *hton); |
2896 | + void thd_set_ha_data(void* thd, const struct handlerton *hton, |
2897 | + const void *ha_data); |
2898 | ++int thd_command(const void* thd); |
2899 | ++long long thd_start_time(const void* thd); |
2900 | ++void thd_kill(void* thd); |
2901 | + enum enum_ftparser_mode |
2902 | + { |
2903 | + MYSQL_FTPARSER_SIMPLE_MODE= 0, |
2904 | +diff -ruN a/sql/sql_class.cc b/sql/sql_class.cc |
2905 | +--- a/sql/sql_class.cc 2011-06-22 01:42:40.000000000 +0900 |
2906 | ++++ b/sql/sql_class.cc 2011-07-12 22:23:35.000000000 +0900 |
2907 | +@@ -711,6 +711,26 @@ |
2908 | + return buffer; |
2909 | + } |
2910 | + |
2911 | ++/* extend for kill session of idle transaction from engine */ |
2912 | ++extern "C" |
2913 | ++int thd_command(const THD* thd) |
2914 | ++{ |
2915 | ++ return (int) thd->command; |
2916 | ++} |
2917 | ++ |
2918 | ++extern "C" |
2919 | ++long long thd_start_time(const THD* thd) |
2920 | ++{ |
2921 | ++ return (long long) thd->start_time; |
2922 | ++} |
2923 | ++ |
2924 | ++extern "C" |
2925 | ++void thd_kill(THD* thd) |
2926 | ++{ |
2927 | ++ mysql_mutex_lock(&thd->LOCK_thd_data); |
2928 | ++ thd->awake(THD::KILL_CONNECTION); |
2929 | ++ mysql_mutex_unlock(&thd->LOCK_thd_data); |
2930 | ++} |
2931 | + |
2932 | + /** |
2933 | + Implementation of Drop_table_error_handler::handle_condition(). |
2934 | +diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
2935 | +--- a/storage/innobase/handler/ha_innodb.cc 2011-07-12 17:10:37.000000000 +0900 |
2936 | ++++ b/storage/innobase/handler/ha_innodb.cc 2011-07-12 22:33:06.000000000 +0900 |
2937 | +@@ -2828,6 +2828,10 @@ |
2938 | + |
2939 | + innobase_commit_concurrency_init_default(); |
2940 | + |
2941 | ++#ifndef EXTENDED_FOR_KILLIDLE |
2942 | ++ srv_kill_idle_transaction = 0; |
2943 | ++#endif |
2944 | ++ |
2945 | + #ifdef HAVE_PSI_INTERFACE |
2946 | + /* Register keys with MySQL performance schema */ |
2947 | + if (PSI_server) { |
2948 | +@@ -11586,6 +11590,48 @@ |
2949 | + return(false); |
2950 | + } |
2951 | + |
2952 | ++/*********************************************************************** |
2953 | ++functions for kill session of idle transaction */ |
2954 | ++extern "C" |
2955 | ++ibool |
2956 | ++innobase_thd_is_idle( |
2957 | ++/*=================*/ |
2958 | ++ const void* thd) /*!< in: thread handle (THD*) */ |
2959 | ++{ |
2960 | ++#ifdef EXTENDED_FOR_KILLIDLE |
2961 | ++ return(thd_command((const THD*) thd) == COM_SLEEP); |
2962 | ++#else |
2963 | ++ return(FALSE); |
2964 | ++#endif |
2965 | ++} |
2966 | ++ |
2967 | ++extern "C" |
2968 | ++ib_int64_t |
2969 | ++innobase_thd_get_start_time( |
2970 | ++/*========================*/ |
2971 | ++ const void* thd) /*!< in: thread handle (THD*) */ |
2972 | ++{ |
2973 | ++#ifdef EXTENDED_FOR_KILLIDLE |
2974 | ++ return((ib_int64_t)thd_start_time((const THD*) thd)); |
2975 | ++#else |
2976 | ++ return(0); /*dummy value*/ |
2977 | ++#endif |
2978 | ++} |
2979 | ++ |
2980 | ++extern "C" |
2981 | ++void |
2982 | ++innobase_thd_kill( |
2983 | ++/*==============*/ |
2984 | ++ void* thd) |
2985 | ++{ |
2986 | ++#ifdef EXTENDED_FOR_KILLIDLE |
2987 | ++ thd_kill((THD*) thd); |
2988 | ++#else |
2989 | ++ return; |
2990 | ++#endif |
2991 | ++} |
2992 | ++ |
2993 | ++ |
2994 | + static SHOW_VAR innodb_status_variables_export[]= { |
2995 | + {"Innodb", (char*) &show_innodb_vars, SHOW_FUNC}, |
2996 | + {NullS, NullS, SHOW_LONG} |
2997 | +@@ -11872,6 +11918,15 @@ |
2998 | + "Number of times a thread is allowed to enter InnoDB within the same SQL query after it has once got the ticket", |
2999 | + NULL, NULL, 500L, 1L, ~0L, 0); |
3000 | + |
3001 | ++static MYSQL_SYSVAR_LONG(kill_idle_transaction, srv_kill_idle_transaction, |
3002 | ++ PLUGIN_VAR_RQCMDARG, |
3003 | ++#ifdef EXTENDED_FOR_KILLIDLE |
3004 | ++ "If non-zero value, the idle session with transaction which is idle over the value in seconds is killed by InnoDB.", |
3005 | ++#else |
3006 | ++ "No effect for this build.", |
3007 | ++#endif |
3008 | ++ NULL, NULL, 0, 0, LONG_MAX, 0); |
3009 | ++ |
3010 | + static MYSQL_SYSVAR_LONG(file_io_threads, innobase_file_io_threads, |
3011 | + PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR, |
3012 | + "Number of file I/O threads in InnoDB.", |
3013 | +@@ -12162,6 +12217,7 @@ |
3014 | + MYSQL_SYSVAR(fast_checksum), |
3015 | + MYSQL_SYSVAR(commit_concurrency), |
3016 | + MYSQL_SYSVAR(concurrency_tickets), |
3017 | ++ MYSQL_SYSVAR(kill_idle_transaction), |
3018 | + MYSQL_SYSVAR(data_file_path), |
3019 | + MYSQL_SYSVAR(doublewrite_file), |
3020 | + MYSQL_SYSVAR(data_home_dir), |
3021 | +diff -ruN a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h |
3022 | +--- a/storage/innobase/include/srv0srv.h 2011-07-12 17:10:37.000000000 +0900 |
3023 | ++++ b/storage/innobase/include/srv0srv.h 2011-07-12 22:33:57.000000000 +0900 |
3024 | +@@ -291,6 +291,7 @@ |
3025 | + extern ulint srv_activity_count; |
3026 | + extern ulint srv_fatal_semaphore_wait_threshold; |
3027 | + extern ulint srv_dml_needed_delay; |
3028 | ++extern lint srv_kill_idle_transaction; |
3029 | + |
3030 | + extern mutex_t* kernel_mutex_temp;/* mutex protecting the server, trx structs, |
3031 | + query threads, and lock table: we allocate |
3032 | +diff -ruN a/storage/innobase/include/trx0trx.h b/storage/innobase/include/trx0trx.h |
3033 | +--- a/storage/innobase/include/trx0trx.h 2011-07-12 16:47:24.000000000 +0900 |
3034 | ++++ b/storage/innobase/include/trx0trx.h 2011-07-12 22:35:39.000000000 +0900 |
3035 | +@@ -594,6 +594,8 @@ |
3036 | + replication has processed */ |
3037 | + const char* mysql_relay_log_file_name; |
3038 | + ib_int64_t mysql_relay_log_pos; |
3039 | ++ time_t idle_start; |
3040 | ++ ib_int64_t last_stmt_start; |
3041 | + /*------------------------------*/ |
3042 | + ulint n_mysql_tables_in_use; /* number of Innobase tables |
3043 | + used in the processing of the current |
3044 | +diff -ruN a/storage/innobase/srv/srv0srv.c b/storage/innobase/srv/srv0srv.c |
3045 | +--- a/storage/innobase/srv/srv0srv.c 2011-07-12 17:10:37.000000000 +0900 |
3046 | ++++ b/storage/innobase/srv/srv0srv.c 2011-07-12 22:43:22.000000000 +0900 |
3047 | +@@ -87,6 +87,11 @@ |
3048 | + #include "mysql/plugin.h" |
3049 | + #include "mysql/service_thd_wait.h" |
3050 | + |
3051 | ++/* prototypes of new functions added to ha_innodb.cc for kill_idle_transaction */ |
3052 | ++ibool innobase_thd_is_idle(const void* thd); |
3053 | ++ib_int64_t innobase_thd_get_start_time(const void* thd); |
3054 | ++void innobase_thd_kill(void* thd); |
3055 | ++ |
3056 | + /* prototypes for new functions added to ha_innodb.cc */ |
3057 | + ibool innobase_get_slow_log(); |
3058 | + |
3059 | +@@ -97,6 +102,9 @@ |
3060 | + /* The following is the maximum allowed duration of a lock wait. */ |
3061 | + UNIV_INTERN ulint srv_fatal_semaphore_wait_threshold = 600; |
3062 | + |
3063 | ++/**/ |
3064 | ++UNIV_INTERN lint srv_kill_idle_transaction = 0; |
3065 | ++ |
3066 | + /* How much data manipulation language (DML) statements need to be delayed, |
3067 | + in microseconds, in order to reduce the lagging of the purge thread. */ |
3068 | + UNIV_INTERN ulint srv_dml_needed_delay = 0; |
3069 | +@@ -2826,6 +2834,36 @@ |
3070 | + old_sema = sema; |
3071 | + } |
3072 | + |
3073 | ++ if (srv_kill_idle_transaction && trx_sys) { |
3074 | ++ trx_t* trx; |
3075 | ++ time_t now; |
3076 | ++rescan_idle: |
3077 | ++ now = time(NULL); |
3078 | ++ mutex_enter(&kernel_mutex); |
3079 | ++ trx = UT_LIST_GET_FIRST(trx_sys->mysql_trx_list); |
3080 | ++ while (trx) { |
3081 | ++ if (trx->conc_state == TRX_ACTIVE |
3082 | ++ && trx->mysql_thd |
3083 | ++ && innobase_thd_is_idle(trx->mysql_thd)) { |
3084 | ++ ib_int64_t start_time; /* as stmt ID */ |
3085 | ++ |
3086 | ++ start_time = innobase_thd_get_start_time(trx->mysql_thd); |
3087 | ++ if (trx->last_stmt_start != start_time) { |
3088 | ++ trx->idle_start = now; |
3089 | ++ trx->last_stmt_start = start_time; |
3090 | ++ } else if (difftime(now, trx->idle_start) |
3091 | ++ > srv_kill_idle_transaction) { |
3092 | ++ /* kill the session */ |
3093 | ++ mutex_exit(&kernel_mutex); |
3094 | ++ innobase_thd_kill(trx->mysql_thd); |
3095 | ++ goto rescan_idle; |
3096 | ++ } |
3097 | ++ } |
3098 | ++ trx = UT_LIST_GET_NEXT(mysql_trx_list, trx); |
3099 | ++ } |
3100 | ++ mutex_exit(&kernel_mutex); |
3101 | ++ } |
3102 | ++ |
3103 | + /* Flush stderr so that a database user gets the output |
3104 | + to possible MySQL error file */ |
3105 | + |
3106 | +diff -ruN a/storage/innobase/trx/trx0trx.c b/storage/innobase/trx/trx0trx.c |
3107 | +--- a/storage/innobase/trx/trx0trx.c 2011-07-12 17:05:25.000000000 +0900 |
3108 | ++++ b/storage/innobase/trx/trx0trx.c 2011-07-12 22:44:08.000000000 +0900 |
3109 | +@@ -143,6 +143,9 @@ |
3110 | + trx->mysql_relay_log_file_name = ""; |
3111 | + trx->mysql_relay_log_pos = 0; |
3112 | + |
3113 | ++ trx->idle_start = 0; |
3114 | ++ trx->last_stmt_start = 0; |
3115 | ++ |
3116 | + mutex_create(trx_undo_mutex_key, &trx->undo_mutex, SYNC_TRX_UNDO); |
3117 | + |
3118 | + trx->rseg = NULL; |
3119 | |
3120 | === modified file 'innodb_lru_dump_restore.patch' |
3121 | --- innodb_lru_dump_restore.patch 2011-06-10 10:07:06 +0000 |
3122 | +++ innodb_lru_dump_restore.patch 2011-08-01 03:32:34 +0000 |
3123 | @@ -308,7 +308,7 @@ |
3124 | diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c |
3125 | --- a/storage/innobase/fil/fil0fil.c 2010-12-03 17:49:11.581025127 +0900 |
3126 | +++ b/storage/innobase/fil/fil0fil.c 2010-12-04 15:33:37.632482885 +0900 |
3127 | -@@ -5289,6 +5289,70 @@ |
3128 | +@@ -5290,6 +5290,70 @@ |
3129 | return(DB_SUCCESS); |
3130 | } |
3131 | |
3132 | @@ -382,7 +382,7 @@ |
3133 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
3134 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:49:11.589956135 +0900 |
3135 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:33:37.645555490 +0900 |
3136 | -@@ -11793,6 +11793,12 @@ |
3137 | +@@ -11810,6 +11810,12 @@ |
3138 | "Limit the allocated memory for dictionary cache. (0: unlimited)", |
3139 | NULL, NULL, 0, 0, LONG_MAX, 0); |
3140 | |
3141 | @@ -395,7 +395,7 @@ |
3142 | static struct st_mysql_sys_var* innobase_system_variables[]= { |
3143 | MYSQL_SYSVAR(additional_mem_pool_size), |
3144 | MYSQL_SYSVAR(autoextend_increment), |
3145 | -@@ -11874,6 +11880,7 @@ |
3146 | +@@ -11892,6 +11898,7 @@ |
3147 | #endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */ |
3148 | MYSQL_SYSVAR(read_ahead_threshold), |
3149 | MYSQL_SYSVAR(io_capacity), |
3150 | |
3151 | === modified file 'innodb_opt_lru_count.patch' |
3152 | --- innodb_opt_lru_count.patch 2011-05-10 11:57:42 +0000 |
3153 | +++ innodb_opt_lru_count.patch 2011-08-01 03:32:34 +0000 |
3154 | @@ -277,7 +277,7 @@ |
3155 | diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h |
3156 | --- a/storage/innobase/include/buf0buf.h 2010-11-03 07:01:13.000000000 +0900 |
3157 | +++ b/storage/innobase/include/buf0buf.h 2010-12-03 15:20:49.608986590 +0900 |
3158 | -@@ -1387,11 +1387,11 @@ |
3159 | +@@ -1390,11 +1390,11 @@ |
3160 | |
3161 | UT_LIST_NODE_T(buf_page_t) LRU; |
3162 | /*!< node of the LRU list */ |
3163 | |
3164 | === modified file 'innodb_overwrite_relay_log_info.patch' |
3165 | --- innodb_overwrite_relay_log_info.patch 2011-06-10 10:07:06 +0000 |
3166 | +++ innodb_overwrite_relay_log_info.patch 2011-08-01 03:32:34 +0000 |
3167 | @@ -56,7 +56,7 @@ |
3168 | static my_bool innobase_rollback_on_timeout = FALSE; |
3169 | static my_bool innobase_create_status_file = FALSE; |
3170 | static my_bool innobase_stats_on_metadata = TRUE; |
3171 | -@@ -2248,6 +2268,89 @@ |
3172 | +@@ -2254,6 +2274,89 @@ |
3173 | } |
3174 | #endif /* DBUG_OFF */ |
3175 | |
3176 | @@ -146,7 +146,7 @@ |
3177 | /* Check that values don't overflow on 32-bit systems. */ |
3178 | if (sizeof(ulint) == 4) { |
3179 | if (innobase_buffer_pool_size > UINT_MAX32) { |
3180 | -@@ -2546,6 +2649,76 @@ |
3181 | +@@ -2552,6 +2655,76 @@ |
3182 | goto mem_free_and_error; |
3183 | } |
3184 | |
3185 | @@ -223,7 +223,7 @@ |
3186 | innobase_old_blocks_pct = buf_LRU_old_ratio_update( |
3187 | innobase_old_blocks_pct, TRUE); |
3188 | |
3189 | -@@ -2658,6 +2831,25 @@ |
3190 | +@@ -2666,6 +2839,25 @@ |
3191 | trx_t* trx) /*!< in: transaction handle */ |
3192 | { |
3193 | if (trx_is_started(trx)) { |
3194 | @@ -249,7 +249,7 @@ |
3195 | |
3196 | trx_commit_for_mysql(trx); |
3197 | } |
3198 | -@@ -11014,6 +11206,12 @@ |
3199 | +@@ -11026,6 +11218,12 @@ |
3200 | "The common part for InnoDB table spaces.", |
3201 | NULL, NULL, NULL); |
3202 | |
3203 | @@ -262,7 +262,7 @@ |
3204 | static MYSQL_SYSVAR_BOOL(doublewrite, innobase_use_doublewrite, |
3205 | PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY, |
3206 | "Enable InnoDB doublewrite buffer (enabled by default). " |
3207 | -@@ -11474,6 +11672,7 @@ |
3208 | +@@ -11492,6 +11690,7 @@ |
3209 | MYSQL_SYSVAR(old_blocks_pct), |
3210 | MYSQL_SYSVAR(old_blocks_time), |
3211 | MYSQL_SYSVAR(open_files), |
3212 | |
3213 | === modified file 'innodb_pass_corrupt_table.patch' |
3214 | --- innodb_pass_corrupt_table.patch 2011-06-29 09:32:51 +0000 |
3215 | +++ innodb_pass_corrupt_table.patch 2011-08-01 03:32:34 +0000 |
3216 | @@ -243,7 +243,7 @@ |
3217 | ut_ad(page_is_leaf(buf_block_get_frame(block))); |
3218 | |
3219 | rec = btr_cur_get_rec(cursor); |
3220 | -@@ -3628,6 +3711,11 @@ |
3221 | +@@ -3640,6 +3723,11 @@ |
3222 | |
3223 | page = btr_cur_get_page(&cursor); |
3224 | |
3225 | @@ -357,7 +357,7 @@ |
3226 | block_mutex = buf_page_get_mutex_enter(bpage); |
3227 | |
3228 | rw_lock_s_unlock(&buf_pool->page_hash_latch); |
3229 | -@@ -3059,6 +3072,13 @@ |
3230 | +@@ -3060,6 +3073,13 @@ |
3231 | return(NULL); |
3232 | } |
3233 | |
3234 | @@ -478,7 +478,7 @@ |
3235 | goto next_loop; |
3236 | |
3237 | cached_foreign_tables = 0; |
3238 | -@@ -4332,6 +4333,12 @@ |
3239 | +@@ -4366,6 +4367,12 @@ |
3240 | heap = mem_heap_create(1000); |
3241 | |
3242 | while (index) { |
3243 | @@ -491,7 +491,7 @@ |
3244 | size = btr_get_size(index, BTR_TOTAL_SIZE); |
3245 | |
3246 | index->stat_index_size = size; |
3247 | -@@ -4479,6 +4486,12 @@ |
3248 | +@@ -4513,6 +4520,12 @@ |
3249 | heap = mem_heap_create(1000); |
3250 | |
3251 | while (index) { |
3252 | @@ -504,7 +504,7 @@ |
3253 | /*===========================================*/ |
3254 | { |
3255 | dict_table_t* sys_stats; |
3256 | -@@ -4671,6 +4684,13 @@ |
3257 | +@@ -4705,6 +4718,13 @@ |
3258 | || (srv_force_recovery < SRV_FORCE_NO_LOG_REDO |
3259 | && dict_index_is_clust(index)))) { |
3260 | ulint size; |
3261 | @@ -518,7 +518,7 @@ |
3262 | size = btr_get_size(index, BTR_TOTAL_SIZE); |
3263 | |
3264 | index->stat_index_size = size; |
3265 | -@@ -5467,4 +5487,42 @@ |
3266 | +@@ -5501,4 +5521,42 @@ |
3267 | rw_lock_free(&dict_table_stats_latches[i]); |
3268 | } |
3269 | } |
3270 | @@ -584,7 +584,7 @@ |
3271 | UT_LIST_NODE_T(fil_space_t) space_list; |
3272 | /*!< list of all spaces */ |
3273 | ulint magic_n;/*!< FIL_SPACE_MAGIC_N */ |
3274 | -@@ -1293,6 +1294,8 @@ |
3275 | +@@ -1294,6 +1295,8 @@ |
3276 | ut_fold_string(name), space); |
3277 | space->is_in_unflushed_spaces = FALSE; |
3278 | |
3279 | @@ -593,7 +593,7 @@ |
3280 | UT_LIST_ADD_LAST(space_list, fil_system->space_list, space); |
3281 | |
3282 | mutex_exit(&fil_system->mutex); |
3283 | -@@ -5267,6 +5270,34 @@ |
3284 | +@@ -5268,6 +5271,34 @@ |
3285 | ut_a(byte_offset % OS_FILE_LOG_BLOCK_SIZE == 0); |
3286 | ut_a((len % OS_FILE_LOG_BLOCK_SIZE) == 0); |
3287 | |
3288 | @@ -628,7 +628,7 @@ |
3289 | #ifdef UNIV_HOTBACKUP |
3290 | /* In ibbackup do normal i/o, not aio */ |
3291 | if (type == OS_FILE_READ) { |
3292 | -@@ -5281,6 +5312,8 @@ |
3293 | +@@ -5282,6 +5313,8 @@ |
3294 | ret = os_aio(type, mode | wake_later, node->name, node->handle, buf, |
3295 | offset_low, offset_high, len, node, message, trx); |
3296 | #endif |
3297 | @@ -637,7 +637,7 @@ |
3298 | ut_a(ret); |
3299 | |
3300 | if (mode == OS_AIO_SYNC) { |
3301 | -@@ -5781,3 +5814,46 @@ |
3302 | +@@ -5782,3 +5815,46 @@ |
3303 | return 0; |
3304 | } |
3305 | } |
3306 | @@ -798,7 +798,7 @@ |
3307 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
3308 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:37:50.578486593 +0900 |
3309 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:38:18.137549396 +0900 |
3310 | -@@ -3972,6 +3972,12 @@ |
3311 | +@@ -3980,6 +3980,12 @@ |
3312 | DBUG_RETURN(1); |
3313 | } |
3314 | |
3315 | @@ -811,7 +811,7 @@ |
3316 | /* Create buffers for packing the fields of a record. Why |
3317 | table->reclength did not work here? Obviously, because char |
3318 | fields when packed actually became 1 byte longer, when we also |
3319 | -@@ -3999,6 +4005,19 @@ |
3320 | +@@ -4007,6 +4013,19 @@ |
3321 | /* Get pointer to a table object in InnoDB dictionary cache */ |
3322 | ib_table = dict_table_get(norm_name, TRUE); |
3323 | |
3324 | @@ -831,7 +831,7 @@ |
3325 | if (NULL == ib_table) { |
3326 | if (is_part && retries < 10) { |
3327 | ++retries; |
3328 | -@@ -5163,6 +5182,10 @@ |
3329 | +@@ -5175,6 +5194,10 @@ |
3330 | |
3331 | ha_statistic_increment(&SSV::ha_write_count); |
3332 | |
3333 | @@ -842,7 +842,7 @@ |
3334 | if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_INSERT) |
3335 | table->timestamp_field->set_time(); |
3336 | |
3337 | -@@ -5380,6 +5403,10 @@ |
3338 | +@@ -5392,6 +5415,10 @@ |
3339 | func_exit: |
3340 | innobase_active_small(); |
3341 | |
3342 | @@ -853,7 +853,7 @@ |
3343 | DBUG_RETURN(error_result); |
3344 | } |
3345 | |
3346 | -@@ -5556,6 +5583,10 @@ |
3347 | +@@ -5568,6 +5595,10 @@ |
3348 | |
3349 | ha_statistic_increment(&SSV::ha_update_count); |
3350 | |
3351 | @@ -864,7 +864,7 @@ |
3352 | if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE) |
3353 | table->timestamp_field->set_time(); |
3354 | |
3355 | -@@ -5645,6 +5676,10 @@ |
3356 | +@@ -5657,6 +5688,10 @@ |
3357 | |
3358 | innobase_active_small(); |
3359 | |
3360 | @@ -875,7 +875,7 @@ |
3361 | DBUG_RETURN(error); |
3362 | } |
3363 | |
3364 | -@@ -5666,6 +5701,10 @@ |
3365 | +@@ -5678,6 +5713,10 @@ |
3366 | |
3367 | ha_statistic_increment(&SSV::ha_delete_count); |
3368 | |
3369 | @@ -886,7 +886,7 @@ |
3370 | if (!prebuilt->upd_node) { |
3371 | row_get_prebuilt_update_vector(prebuilt); |
3372 | } |
3373 | -@@ -5692,6 +5731,10 @@ |
3374 | +@@ -5704,6 +5743,10 @@ |
3375 | |
3376 | innobase_active_small(); |
3377 | |
3378 | @@ -897,7 +897,7 @@ |
3379 | DBUG_RETURN(error); |
3380 | } |
3381 | |
3382 | -@@ -5931,6 +5974,10 @@ |
3383 | +@@ -5943,6 +5986,10 @@ |
3384 | |
3385 | ha_statistic_increment(&SSV::ha_read_key_count); |
3386 | |
3387 | @@ -908,7 +908,7 @@ |
3388 | index = prebuilt->index; |
3389 | |
3390 | if (UNIV_UNLIKELY(index == NULL)) { |
3391 | -@@ -5996,6 +6043,10 @@ |
3392 | +@@ -6008,6 +6055,10 @@ |
3393 | ret = DB_UNSUPPORTED; |
3394 | } |
3395 | |
3396 | @@ -919,7 +919,7 @@ |
3397 | switch (ret) { |
3398 | case DB_SUCCESS: |
3399 | error = 0; |
3400 | -@@ -6111,6 +6162,10 @@ |
3401 | +@@ -6123,6 +6174,10 @@ |
3402 | { |
3403 | DBUG_ENTER("change_active_index"); |
3404 | |
3405 | @@ -930,7 +930,7 @@ |
3406 | ut_ad(user_thd == ha_thd()); |
3407 | ut_a(prebuilt->trx == thd_to_trx(user_thd)); |
3408 | |
3409 | -@@ -6201,6 +6256,10 @@ |
3410 | +@@ -6213,6 +6268,10 @@ |
3411 | |
3412 | DBUG_ENTER("general_fetch"); |
3413 | |
3414 | @@ -941,7 +941,7 @@ |
3415 | ut_a(prebuilt->trx == thd_to_trx(user_thd)); |
3416 | |
3417 | innodb_srv_conc_enter_innodb(prebuilt->trx); |
3418 | -@@ -6210,6 +6269,10 @@ |
3419 | +@@ -6222,6 +6281,10 @@ |
3420 | |
3421 | innodb_srv_conc_exit_innodb(prebuilt->trx); |
3422 | |
3423 | @@ -952,7 +952,7 @@ |
3424 | switch (ret) { |
3425 | case DB_SUCCESS: |
3426 | error = 0; |
3427 | -@@ -7476,10 +7539,18 @@ |
3428 | +@@ -7488,10 +7551,18 @@ |
3429 | |
3430 | update_thd(ha_thd()); |
3431 | |
3432 | @@ -971,7 +971,7 @@ |
3433 | error = convert_error_code_to_mysql(error, prebuilt->table->flags, |
3434 | NULL); |
3435 | |
3436 | -@@ -7980,6 +8051,16 @@ |
3437 | +@@ -7992,6 +8063,16 @@ |
3438 | return(ranges + (double) rows / (double) total_rows * time_for_scan); |
3439 | } |
3440 | |
3441 | @@ -988,7 +988,7 @@ |
3442 | /*********************************************************************//** |
3443 | Calculates the key number used inside MySQL for an Innobase index. We will |
3444 | first check the "index translation table" for a match of the index to get |
3445 | -@@ -8157,7 +8238,7 @@ |
3446 | +@@ -8169,7 +8250,7 @@ |
3447 | ib_table = prebuilt->table; |
3448 | |
3449 | if (flag & HA_STATUS_TIME) { |
3450 | @@ -997,7 +997,7 @@ |
3451 | /* In sql_show we call with this flag: update |
3452 | then statistics so that they are up-to-date */ |
3453 | |
3454 | -@@ -8450,10 +8531,18 @@ |
3455 | +@@ -8462,10 +8543,18 @@ |
3456 | THD* thd, /*!< in: connection thread handle */ |
3457 | HA_CHECK_OPT* check_opt) /*!< in: currently ignored */ |
3458 | { |
3459 | @@ -1016,7 +1016,7 @@ |
3460 | return(0); |
3461 | } |
3462 | |
3463 | -@@ -8635,6 +8724,10 @@ |
3464 | +@@ -8647,6 +8736,10 @@ |
3465 | my_error(ER_QUERY_INTERRUPTED, MYF(0)); |
3466 | } |
3467 | |
3468 | @@ -1027,7 +1027,7 @@ |
3469 | DBUG_RETURN(is_ok ? HA_ADMIN_OK : HA_ADMIN_CORRUPT); |
3470 | } |
3471 | |
3472 | -@@ -9405,6 +9498,10 @@ |
3473 | +@@ -9417,6 +9510,10 @@ |
3474 | |
3475 | update_thd(thd); |
3476 | |
3477 | @@ -1038,7 +1038,7 @@ |
3478 | if (prebuilt->table->ibd_file_missing && !thd_tablespace_op(thd)) { |
3479 | ut_print_timestamp(stderr); |
3480 | fprintf(stderr, |
3481 | -@@ -11807,6 +11904,26 @@ |
3482 | +@@ -11824,6 +11921,26 @@ |
3483 | "0 (the default) disables automatic dumps.", |
3484 | NULL, NULL, 0, 0, UINT_MAX32, 0); |
3485 | |
3486 | @@ -1065,7 +1065,7 @@ |
3487 | static struct st_mysql_sys_var* innobase_system_variables[]= { |
3488 | MYSQL_SYSVAR(additional_mem_pool_size), |
3489 | MYSQL_SYSVAR(autoextend_increment), |
3490 | -@@ -11893,6 +12010,7 @@ |
3491 | +@@ -11911,6 +12028,7 @@ |
3492 | MYSQL_SYSVAR(purge_threads), |
3493 | MYSQL_SYSVAR(purge_batch_size), |
3494 | MYSQL_SYSVAR(rollback_segments), |
3495 | @@ -1118,7 +1118,7 @@ |
3496 | diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h |
3497 | --- a/storage/innobase/include/buf0buf.h 2010-12-03 15:49:59.218956083 +0900 |
3498 | +++ b/storage/innobase/include/buf0buf.h 2010-12-04 15:38:18.164513667 +0900 |
3499 | -@@ -986,7 +986,7 @@ |
3500 | +@@ -989,7 +989,7 @@ |
3501 | const buf_block_t* block) /*!< in: pointer to the control block */ |
3502 | __attribute__((pure)); |
3503 | #else /* UNIV_DEBUG */ |
3504 | @@ -1127,7 +1127,7 @@ |
3505 | #endif /* UNIV_DEBUG */ |
3506 | /*********************************************************************//** |
3507 | Gets the space id of a block. |
3508 | -@@ -1433,6 +1433,7 @@ |
3509 | +@@ -1436,6 +1436,7 @@ |
3510 | 0 if the block was never accessed |
3511 | in the buffer pool */ |
3512 | /* @} */ |
3513 | @@ -1163,7 +1163,7 @@ |
3514 | diff -ruN a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h |
3515 | --- a/storage/innobase/include/dict0dict.h 2010-12-03 17:30:16.306955940 +0900 |
3516 | +++ b/storage/innobase/include/dict0dict.h 2010-12-04 15:38:18.169513750 +0900 |
3517 | -@@ -1245,6 +1245,15 @@ |
3518 | +@@ -1258,6 +1258,15 @@ |
3519 | dict_close(void); |
3520 | /*============*/ |
3521 | |
3522 | @@ -1182,7 +1182,7 @@ |
3523 | diff -ruN a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h |
3524 | --- a/storage/innobase/include/dict0mem.h 2010-11-03 07:01:13.000000000 +0900 |
3525 | +++ b/storage/innobase/include/dict0mem.h 2010-12-04 15:38:18.171513956 +0900 |
3526 | -@@ -640,6 +640,7 @@ |
3527 | +@@ -666,6 +666,7 @@ |
3528 | the AUTOINC lock on this table. */ |
3529 | /* @} */ |
3530 | /*----------------------*/ |
3531 | @@ -1335,7 +1335,7 @@ |
3532 | diff -ruN a/storage/innobase/row/row0sel.c b/storage/innobase/row/row0sel.c |
3533 | --- a/storage/innobase/row/row0sel.c 2010-11-03 07:01:13.000000000 +0900 |
3534 | +++ b/storage/innobase/row/row0sel.c 2010-12-04 15:38:18.205551115 +0900 |
3535 | -@@ -3853,6 +3853,13 @@ |
3536 | +@@ -3854,6 +3854,13 @@ |
3537 | /* PHASE 4: Look for matching records in a loop */ |
3538 | |
3539 | rec = btr_pcur_get_rec(pcur); |
3540 | @@ -1349,7 +1349,7 @@ |
3541 | ut_ad(!!page_rec_is_comp(rec) == comp); |
3542 | #ifdef UNIV_SEARCH_DEBUG |
3543 | /* |
3544 | -@@ -3930,7 +3937,13 @@ |
3545 | +@@ -3931,7 +3938,13 @@ |
3546 | if (UNIV_UNLIKELY(next_offs >= UNIV_PAGE_SIZE - PAGE_DIR)) { |
3547 | |
3548 | wrong_offs: |
3549 | @@ -1364,7 +1364,7 @@ |
3550 | ut_print_timestamp(stderr); |
3551 | buf_page_print(page_align(rec), 0); |
3552 | fprintf(stderr, |
3553 | -@@ -3981,7 +3994,8 @@ |
3554 | +@@ -3982,7 +3995,8 @@ |
3555 | |
3556 | offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap); |
3557 | |
3558 | |
3559 | === modified file 'innodb_recovery_patches.patch' |
3560 | --- innodb_recovery_patches.patch 2011-06-29 09:32:51 +0000 |
3561 | +++ innodb_recovery_patches.patch 2011-08-01 03:32:34 +0000 |
3562 | @@ -117,7 +117,7 @@ |
3563 | static my_bool innobase_locks_unsafe_for_binlog = FALSE; |
3564 | static my_bool innobase_overwrite_relay_log_info = FALSE; |
3565 | static my_bool innobase_rollback_on_timeout = FALSE; |
3566 | -@@ -2576,6 +2577,8 @@ |
3567 | +@@ -2582,6 +2583,8 @@ |
3568 | |
3569 | srv_force_recovery = (ulint) innobase_force_recovery; |
3570 | |
3571 | @@ -126,7 +126,7 @@ |
3572 | srv_use_doublewrite_buf = (ibool) innobase_use_doublewrite; |
3573 | srv_use_checksums = (ibool) innobase_use_checksums; |
3574 | |
3575 | -@@ -11274,6 +11277,11 @@ |
3576 | +@@ -11286,6 +11289,11 @@ |
3577 | "The common part for InnoDB table spaces.", |
3578 | NULL, NULL, NULL); |
3579 | |
3580 | @@ -138,7 +138,7 @@ |
3581 | static MYSQL_SYSVAR_BOOL(recovery_update_relay_log, innobase_overwrite_relay_log_info, |
3582 | PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY, |
3583 | "During InnoDB crash recovery on slave overwrite relay-log.info " |
3584 | -@@ -11747,6 +11755,7 @@ |
3585 | +@@ -11764,6 +11772,7 @@ |
3586 | MYSQL_SYSVAR(data_file_path), |
3587 | MYSQL_SYSVAR(data_home_dir), |
3588 | MYSQL_SYSVAR(doublewrite), |
3589 | @@ -441,7 +441,7 @@ |
3590 | #ifndef UNIV_HOTBACKUP |
3591 | # include "os0sync.h" |
3592 | # include "os0thread.h" |
3593 | -@@ -4270,6 +4271,18 @@ |
3594 | +@@ -4278,6 +4279,18 @@ |
3595 | INFINITE); |
3596 | } |
3597 | |
3598 | |
3599 | === modified file 'innodb_separate_doublewrite.patch' |
3600 | --- innodb_separate_doublewrite.patch 2011-06-29 09:32:51 +0000 |
3601 | +++ innodb_separate_doublewrite.patch 2011-08-01 03:32:34 +0000 |
3602 | @@ -84,7 +84,7 @@ |
3603 | /* The system tablespace always exists. */ |
3604 | } else if (in_crash_recovery) { |
3605 | /* Check that the tablespace (the .ibd file) really |
3606 | -@@ -1623,7 +1624,7 @@ |
3607 | +@@ -1682,7 +1683,7 @@ |
3608 | space = mach_read_from_4(field); |
3609 | |
3610 | /* Check if the tablespace exists and has the right name */ |
3611 | @@ -93,7 +93,7 @@ |
3612 | flags = dict_sys_tables_get_flags(rec); |
3613 | |
3614 | if (UNIV_UNLIKELY(flags == ULINT_UNDEFINED)) { |
3615 | -@@ -1776,7 +1777,7 @@ |
3616 | +@@ -1835,7 +1836,7 @@ |
3617 | goto err_exit; |
3618 | } |
3619 | |
3620 | @@ -149,7 +149,7 @@ |
3621 | /* Put the node to the LRU list */ |
3622 | UT_LIST_ADD_FIRST(LRU, system->LRU, node); |
3623 | } |
3624 | -@@ -875,7 +875,7 @@ |
3625 | +@@ -876,7 +876,7 @@ |
3626 | ut_a(system->n_open > 0); |
3627 | system->n_open--; |
3628 | |
3629 | @@ -158,7 +158,7 @@ |
3630 | ut_a(UT_LIST_GET_LEN(system->LRU) > 0); |
3631 | |
3632 | /* The node is in the LRU list, remove it */ |
3633 | -@@ -961,7 +961,7 @@ |
3634 | +@@ -962,7 +962,7 @@ |
3635 | retry: |
3636 | mutex_enter(&fil_system->mutex); |
3637 | |
3638 | @@ -167,7 +167,7 @@ |
3639 | /* We keep log files and system tablespace files always open; |
3640 | this is important in preventing deadlocks in this module, as |
3641 | a page read completion often performs another read from the |
3642 | -@@ -1192,7 +1192,7 @@ |
3643 | +@@ -1193,7 +1193,7 @@ |
3644 | " tablespace memory cache!\n", |
3645 | (ulong) space->id); |
3646 | |
3647 | @@ -176,7 +176,7 @@ |
3648 | |
3649 | mutex_exit(&fil_system->mutex); |
3650 | |
3651 | -@@ -1254,6 +1254,7 @@ |
3652 | +@@ -1255,6 +1255,7 @@ |
3653 | space->mark = FALSE; |
3654 | |
3655 | if (UNIV_LIKELY(purpose == FIL_TABLESPACE && !recv_recovery_on) |
3656 | @@ -184,7 +184,7 @@ |
3657 | && UNIV_UNLIKELY(id > fil_system->max_assigned_id)) { |
3658 | if (!fil_system->space_id_reuse_warned) { |
3659 | fil_system->space_id_reuse_warned = TRUE; |
3660 | -@@ -1337,7 +1338,7 @@ |
3661 | +@@ -1338,7 +1339,7 @@ |
3662 | (ulong) SRV_LOG_SPACE_FIRST_ID); |
3663 | } |
3664 | |
3665 | @@ -193,7 +193,7 @@ |
3666 | |
3667 | if (success) { |
3668 | *space_id = fil_system->max_assigned_id = id; |
3669 | -@@ -1600,6 +1601,8 @@ |
3670 | +@@ -1601,6 +1602,8 @@ |
3671 | UT_LIST_INIT(fil_system->LRU); |
3672 | |
3673 | fil_system->max_n_open = max_n_open; |
3674 | @@ -202,7 +202,7 @@ |
3675 | } |
3676 | |
3677 | /*******************************************************************//** |
3678 | -@@ -1621,7 +1624,7 @@ |
3679 | +@@ -1622,7 +1625,7 @@ |
3680 | space = UT_LIST_GET_FIRST(fil_system->space_list); |
3681 | |
3682 | while (space != NULL) { |
3683 | @@ -211,7 +211,7 @@ |
3684 | node = UT_LIST_GET_FIRST(space->chain); |
3685 | |
3686 | while (node != NULL) { |
3687 | -@@ -1711,6 +1714,10 @@ |
3688 | +@@ -1712,6 +1715,10 @@ |
3689 | ut_error; |
3690 | } |
3691 | |
3692 | @@ -222,7 +222,7 @@ |
3693 | mutex_enter(&fil_system->mutex); |
3694 | |
3695 | if (fil_system->max_assigned_id < max_id) { |
3696 | -@@ -1729,6 +1736,7 @@ |
3697 | +@@ -1730,6 +1737,7 @@ |
3698 | ulint |
3699 | fil_write_lsn_and_arch_no_to_file( |
3700 | /*==============================*/ |
3701 | @@ -230,7 +230,7 @@ |
3702 | ulint sum_of_sizes, /*!< in: combined size of previous files |
3703 | in space, in database pages */ |
3704 | ib_uint64_t lsn, /*!< in: lsn to write */ |
3705 | -@@ -1738,14 +1746,16 @@ |
3706 | +@@ -1739,14 +1747,16 @@ |
3707 | byte* buf1; |
3708 | byte* buf; |
3709 | |
3710 | @@ -249,7 +249,7 @@ |
3711 | |
3712 | mem_free(buf1); |
3713 | |
3714 | -@@ -1781,7 +1791,7 @@ |
3715 | +@@ -1782,7 +1792,7 @@ |
3716 | always open. */ |
3717 | |
3718 | if (space->purpose == FIL_TABLESPACE |
3719 | @@ -258,7 +258,7 @@ |
3720 | sum_of_sizes = 0; |
3721 | |
3722 | node = UT_LIST_GET_FIRST(space->chain); |
3723 | -@@ -1789,7 +1799,7 @@ |
3724 | +@@ -1790,7 +1800,7 @@ |
3725 | mutex_exit(&fil_system->mutex); |
3726 | |
3727 | err = fil_write_lsn_and_arch_no_to_file( |
3728 | @@ -267,7 +267,7 @@ |
3729 | if (err != DB_SUCCESS) { |
3730 | |
3731 | return(err); |
3732 | -@@ -4158,7 +4168,7 @@ |
3733 | +@@ -4159,7 +4169,7 @@ |
3734 | } |
3735 | |
3736 | #ifndef UNIV_HOTBACKUP |
3737 | @@ -276,7 +276,7 @@ |
3738 | fprintf(stderr, |
3739 | "InnoDB: Error: tablespace id %lu in file %s" |
3740 | " is not sensible\n", |
3741 | -@@ -4167,7 +4177,7 @@ |
3742 | +@@ -4168,7 +4178,7 @@ |
3743 | goto func_exit; |
3744 | } |
3745 | #else |
3746 | @@ -285,7 +285,7 @@ |
3747 | char* new_path; |
3748 | |
3749 | fprintf(stderr, |
3750 | -@@ -4988,7 +4998,7 @@ |
3751 | +@@ -4989,7 +4999,7 @@ |
3752 | } |
3753 | |
3754 | if (node->n_pending == 0 && space->purpose == FIL_TABLESPACE |
3755 | @@ -294,7 +294,7 @@ |
3756 | /* The node is in the LRU list, remove it */ |
3757 | |
3758 | ut_a(UT_LIST_GET_LEN(system->LRU) > 0); |
3759 | -@@ -5034,7 +5044,7 @@ |
3760 | +@@ -5035,7 +5045,7 @@ |
3761 | } |
3762 | |
3763 | if (node->n_pending == 0 && node->space->purpose == FIL_TABLESPACE |
3764 | @@ -303,7 +303,7 @@ |
3765 | /* The node must be put back to the LRU list */ |
3766 | UT_LIST_ADD_FIRST(LRU, system->LRU, node); |
3767 | } |
3768 | -@@ -5645,7 +5655,7 @@ |
3769 | +@@ -5646,7 +5656,7 @@ |
3770 | ut_a(fil_node->n_pending == 0); |
3771 | ut_a(fil_node->open); |
3772 | ut_a(fil_node->space->purpose == FIL_TABLESPACE); |
3773 | @@ -348,7 +348,7 @@ |
3774 | |
3775 | /* The highest file format being used in the database. The value can be |
3776 | set by user, however, it will be adjusted to the newer file format if |
3777 | -@@ -2472,6 +2473,8 @@ |
3778 | +@@ -2478,6 +2479,8 @@ |
3779 | goto error; |
3780 | } |
3781 | |
3782 | @@ -357,7 +357,7 @@ |
3783 | srv_use_sys_stats_table = (ibool) innobase_use_sys_stats_table; |
3784 | |
3785 | /* -------------- Log files ---------------------------*/ |
3786 | -@@ -11641,6 +11644,11 @@ |
3787 | +@@ -11658,6 +11661,11 @@ |
3788 | "Path to individual files and their sizes.", |
3789 | NULL, NULL, NULL); |
3790 | |
3791 | @@ -369,7 +369,7 @@ |
3792 | static MYSQL_SYSVAR_LONG(autoinc_lock_mode, innobase_autoinc_lock_mode, |
3793 | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, |
3794 | "The AUTOINC lock modes supported by InnoDB: " |
3795 | -@@ -11808,6 +11816,7 @@ |
3796 | +@@ -11825,6 +11833,7 @@ |
3797 | MYSQL_SYSVAR(commit_concurrency), |
3798 | MYSQL_SYSVAR(concurrency_tickets), |
3799 | MYSQL_SYSVAR(data_file_path), |
3800 | @@ -519,7 +519,7 @@ |
3801 | diff -ruN a/storage/innobase/row/row0mysql.c b/storage/innobase/row/row0mysql.c |
3802 | --- a/storage/innobase/row/row0mysql.c 2010-12-03 17:30:16.334989510 +0900 |
3803 | +++ b/storage/innobase/row/row0mysql.c 2010-12-04 15:35:58.652496484 +0900 |
3804 | -@@ -3447,7 +3447,7 @@ |
3805 | +@@ -3452,7 +3452,7 @@ |
3806 | /* Do not drop possible .ibd tablespace if something went |
3807 | wrong: we do not want to delete valuable data of the user */ |
3808 | |
3809 | |
3810 | === modified file 'innodb_show_lock_name.patch' |
3811 | --- innodb_show_lock_name.patch 2011-06-10 10:07:06 +0000 |
3812 | +++ innodb_show_lock_name.patch 2011-08-01 03:32:34 +0000 |
3813 | @@ -8,7 +8,7 @@ |
3814 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
3815 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:34:35.285040381 +0900 |
3816 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:35:12.974975252 +0900 |
3817 | -@@ -9593,9 +9593,8 @@ |
3818 | +@@ -9605,9 +9605,8 @@ |
3819 | rw_lock_wait_time += mutex->lspent_time; |
3820 | } |
3821 | #else /* UNIV_DEBUG */ |
3822 | @@ -20,7 +20,7 @@ |
3823 | buf2len= (uint) my_snprintf(buf2, sizeof(buf2), "os_waits=%lu", |
3824 | (ulong) mutex->count_os_wait); |
3825 | |
3826 | -@@ -9610,10 +9609,8 @@ |
3827 | +@@ -9622,10 +9621,8 @@ |
3828 | |
3829 | if (block_mutex) { |
3830 | buf1len = (uint) my_snprintf(buf1, sizeof buf1, |
3831 | @@ -33,7 +33,7 @@ |
3832 | buf2len = (uint) my_snprintf(buf2, sizeof buf2, |
3833 | "os_waits=%lu", |
3834 | (ulong) block_mutex_oswait_count); |
3835 | -@@ -9642,9 +9639,8 @@ |
3836 | +@@ -9654,9 +9651,8 @@ |
3837 | continue; |
3838 | } |
3839 | |
3840 | @@ -45,7 +45,7 @@ |
3841 | buf2len = my_snprintf(buf2, sizeof buf2, "os_waits=%lu", |
3842 | (ulong) lock->count_os_wait); |
3843 | |
3844 | -@@ -9658,10 +9654,8 @@ |
3845 | +@@ -9670,10 +9666,8 @@ |
3846 | |
3847 | if (block_lock) { |
3848 | buf1len = (uint) my_snprintf(buf1, sizeof buf1, |
3849 | |
3850 | === modified file 'innodb_show_status.patch' |
3851 | --- innodb_show_status.patch 2011-06-10 10:07:06 +0000 |
3852 | +++ innodb_show_status.patch 2011-08-01 03:32:34 +0000 |
3853 | @@ -62,7 +62,7 @@ |
3854 | diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c |
3855 | --- a/storage/innobase/fil/fil0fil.c 2010-11-03 07:01:13.000000000 +0900 |
3856 | +++ b/storage/innobase/fil/fil0fil.c 2010-12-03 15:07:31.790357112 +0900 |
3857 | -@@ -4888,3 +4888,30 @@ |
3858 | +@@ -4889,3 +4889,30 @@ |
3859 | |
3860 | fil_system = NULL; |
3861 | } |
3862 | @@ -96,7 +96,7 @@ |
3863 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
3864 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:06:58.727955654 +0900 |
3865 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:07:31.799376984 +0900 |
3866 | -@@ -603,6 +603,8 @@ |
3867 | +@@ -604,6 +604,8 @@ |
3868 | (char*) &export_vars.innodb_buffer_pool_pages_dirty, SHOW_LONG}, |
3869 | {"buffer_pool_pages_flushed", |
3870 | (char*) &export_vars.innodb_buffer_pool_pages_flushed, SHOW_LONG}, |
3871 | @@ -105,7 +105,7 @@ |
3872 | {"buffer_pool_pages_free", |
3873 | (char*) &export_vars.innodb_buffer_pool_pages_free, SHOW_LONG}, |
3874 | #ifdef UNIV_DEBUG |
3875 | -@@ -11081,6 +11083,16 @@ |
3876 | +@@ -11098,6 +11100,16 @@ |
3877 | "Force InnoDB to not use next-key locking, to use only row-level locking.", |
3878 | NULL, NULL, FALSE); |
3879 | |
3880 | @@ -122,7 +122,7 @@ |
3881 | #ifdef UNIV_LOG_ARCHIVE |
3882 | static MYSQL_SYSVAR_STR(log_arch_dir, innobase_log_arch_dir, |
3883 | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, |
3884 | -@@ -11268,7 +11280,7 @@ |
3885 | +@@ -11285,7 +11297,7 @@ |
3886 | |
3887 | static MYSQL_SYSVAR_STR(version, innodb_version_str, |
3888 | PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_READONLY, |
3889 | @@ -131,7 +131,7 @@ |
3890 | |
3891 | static MYSQL_SYSVAR_BOOL(use_sys_malloc, srv_use_sys_malloc, |
3892 | PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY, |
3893 | -@@ -11361,6 +11373,8 @@ |
3894 | +@@ -11379,6 +11391,8 @@ |
3895 | MYSQL_SYSVAR(thread_concurrency), |
3896 | MYSQL_SYSVAR(thread_sleep_delay), |
3897 | MYSQL_SYSVAR(autoinc_lock_mode), |
3898 | @@ -143,7 +143,7 @@ |
3899 | diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h |
3900 | --- a/storage/innobase/include/buf0buf.h 2011-01-20 07:37:08.000000000 +0900 |
3901 | +++ b/storage/innobase/include/buf0buf.h 2011-02-14 15:25:20.859126532 +0900 |
3902 | -@@ -125,6 +125,7 @@ |
3903 | +@@ -128,6 +128,7 @@ |
3904 | /* General buffer pool info */ |
3905 | ulint pool_unique_id; /*!< Buffer Pool ID */ |
3906 | ulint pool_size; /*!< Buffer Pool size in pages */ |
3907 | @@ -216,7 +216,7 @@ |
3908 | diff -ruN a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c |
3909 | --- a/storage/innobase/lock/lock0lock.c 2010-11-03 07:01:13.000000000 +0900 |
3910 | +++ b/storage/innobase/lock/lock0lock.c 2010-12-03 15:07:31.819023998 +0900 |
3911 | -@@ -4374,6 +4374,7 @@ |
3912 | +@@ -4377,6 +4377,7 @@ |
3913 | |
3914 | putc('\n', file); |
3915 | |
3916 | @@ -224,7 +224,7 @@ |
3917 | block = buf_page_try_get(space, page_no, &mtr); |
3918 | |
3919 | for (i = 0; i < lock_rec_get_n_bits(lock); ++i) { |
3920 | -@@ -4400,6 +4401,7 @@ |
3921 | +@@ -4403,6 +4404,7 @@ |
3922 | |
3923 | putc('\n', file); |
3924 | } |
3925 | @@ -232,7 +232,7 @@ |
3926 | |
3927 | mtr_commit(&mtr); |
3928 | if (UNIV_LIKELY_NULL(heap)) { |
3929 | -@@ -4583,7 +4585,7 @@ |
3930 | +@@ -4586,7 +4588,7 @@ |
3931 | } |
3932 | } |
3933 | |
3934 | @@ -241,7 +241,7 @@ |
3935 | nth_trx++; |
3936 | goto loop; |
3937 | } |
3938 | -@@ -4655,8 +4657,8 @@ |
3939 | +@@ -4658,8 +4660,8 @@ |
3940 | |
3941 | nth_lock++; |
3942 | |
3943 | |
3944 | === modified file 'innodb_show_status_extend.patch' |
3945 | --- innodb_show_status_extend.patch 2011-06-21 06:10:10 +0000 |
3946 | +++ innodb_show_status_extend.patch 2011-08-01 03:32:34 +0000 |
3947 | @@ -8,7 +8,7 @@ |
3948 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
3949 | --- a/storage/innobase/handler/ha_innodb.cc 2011-01-21 19:53:42.369599743 +0900 |
3950 | +++ b/storage/innobase/handler/ha_innodb.cc 2011-01-21 19:54:44.659599699 +0900 |
3951 | -@@ -638,6 +638,16 @@ |
3952 | +@@ -639,6 +639,16 @@ |
3953 | trx_t* trx); /*!< in: transaction handle */ |
3954 | |
3955 | static SHOW_VAR innodb_status_variables[]= { |
3956 | @@ -25,7 +25,7 @@ |
3957 | {"buffer_pool_pages_data", |
3958 | (char*) &export_vars.innodb_buffer_pool_pages_data, SHOW_LONG}, |
3959 | {"buffer_pool_pages_dirty", |
3960 | -@@ -652,8 +662,14 @@ |
3961 | +@@ -653,8 +663,14 @@ |
3962 | {"buffer_pool_pages_latched", |
3963 | (char*) &export_vars.innodb_buffer_pool_pages_latched, SHOW_LONG}, |
3964 | #endif /* UNIV_DEBUG */ |
3965 | @@ -40,7 +40,7 @@ |
3966 | {"buffer_pool_pages_total", |
3967 | (char*) &export_vars.innodb_buffer_pool_pages_total, SHOW_LONG}, |
3968 | {"buffer_pool_read_ahead", |
3969 | -@@ -668,6 +684,12 @@ |
3970 | +@@ -669,6 +685,12 @@ |
3971 | (char*) &export_vars.innodb_buffer_pool_wait_free, SHOW_LONG}, |
3972 | {"buffer_pool_write_requests", |
3973 | (char*) &export_vars.innodb_buffer_pool_write_requests, SHOW_LONG}, |
3974 | @@ -53,7 +53,7 @@ |
3975 | {"data_fsyncs", |
3976 | (char*) &export_vars.innodb_data_fsyncs, SHOW_LONG}, |
3977 | {"data_pending_fsyncs", |
3978 | -@@ -694,12 +716,66 @@ |
3979 | +@@ -695,12 +717,66 @@ |
3980 | (char*) &export_vars.innodb_dict_tables, SHOW_LONG}, |
3981 | {"have_atomic_builtins", |
3982 | (char*) &export_vars.innodb_have_atomic_builtins, SHOW_BOOL}, |
3983 | @@ -120,7 +120,7 @@ |
3984 | {"os_log_fsyncs", |
3985 | (char*) &export_vars.innodb_os_log_fsyncs, SHOW_LONG}, |
3986 | {"os_log_pending_fsyncs", |
3987 | -@@ -716,8 +792,14 @@ |
3988 | +@@ -717,8 +793,14 @@ |
3989 | (char*) &export_vars.innodb_pages_read, SHOW_LONG}, |
3990 | {"pages_written", |
3991 | (char*) &export_vars.innodb_pages_written, SHOW_LONG}, |
3992 | @@ -135,7 +135,7 @@ |
3993 | {"row_lock_time", |
3994 | (char*) &export_vars.innodb_row_lock_time, SHOW_LONGLONG}, |
3995 | {"row_lock_time_avg", |
3996 | -@@ -734,8 +816,20 @@ |
3997 | +@@ -735,8 +817,20 @@ |
3998 | (char*) &export_vars.innodb_rows_read, SHOW_LONG}, |
3999 | {"rows_updated", |
4000 | (char*) &export_vars.innodb_rows_updated, SHOW_LONG}, |
4001 | @@ -234,7 +234,7 @@ |
4002 | diff -ruN a/storage/innobase/include/lock0lock.h b/storage/innobase/include/lock0lock.h |
4003 | --- a/storage/innobase/include/lock0lock.h 2011-01-21 19:52:38.967683738 +0900 |
4004 | +++ b/storage/innobase/include/lock0lock.h 2011-01-21 19:54:44.660599140 +0900 |
4005 | -@@ -816,6 +816,7 @@ |
4006 | +@@ -817,6 +817,7 @@ |
4007 | /** The lock system struct */ |
4008 | struct lock_sys_struct{ |
4009 | hash_table_t* rec_hash; /*!< hash table of the record locks */ |
4010 | @@ -356,7 +356,7 @@ |
4011 | diff -ruN a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c |
4012 | --- a/storage/innobase/lock/lock0lock.c 2011-01-21 19:52:38.998600121 +0900 |
4013 | +++ b/storage/innobase/lock/lock0lock.c 2011-01-21 19:54:44.668637536 +0900 |
4014 | -@@ -571,6 +571,7 @@ |
4015 | +@@ -569,6 +569,7 @@ |
4016 | lock_sys = mem_alloc(sizeof(lock_sys_t)); |
4017 | |
4018 | lock_sys->rec_hash = hash_create(n_cells); |
4019 | @@ -364,7 +364,7 @@ |
4020 | |
4021 | /* hash_create_mutexes(lock_sys->rec_hash, 2, SYNC_REC_LOCK); */ |
4022 | |
4023 | -@@ -1719,6 +1720,7 @@ |
4024 | +@@ -1729,6 +1730,7 @@ |
4025 | |
4026 | HASH_INSERT(lock_t, hash, lock_sys->rec_hash, |
4027 | lock_rec_fold(space, page_no), lock); |
4028 | @@ -372,7 +372,7 @@ |
4029 | if (UNIV_UNLIKELY(type_mode & LOCK_WAIT)) { |
4030 | |
4031 | lock_set_lock_and_trx_wait(lock, trx); |
4032 | -@@ -2265,6 +2267,7 @@ |
4033 | +@@ -2275,6 +2277,7 @@ |
4034 | |
4035 | HASH_DELETE(lock_t, hash, lock_sys->rec_hash, |
4036 | lock_rec_fold(space, page_no), in_lock); |
4037 | @@ -380,7 +380,7 @@ |
4038 | |
4039 | UT_LIST_REMOVE(trx_locks, trx->trx_locks, in_lock); |
4040 | |
4041 | -@@ -2308,6 +2311,7 @@ |
4042 | +@@ -2318,6 +2321,7 @@ |
4043 | |
4044 | HASH_DELETE(lock_t, hash, lock_sys->rec_hash, |
4045 | lock_rec_fold(space, page_no), in_lock); |
4046 | |
4047 | === modified file 'innodb_show_sys_tables.patch' |
4048 | --- innodb_show_sys_tables.patch 2011-06-10 10:07:06 +0000 |
4049 | +++ innodb_show_sys_tables.patch 2011-08-01 03:32:34 +0000 |
4050 | @@ -41,7 +41,7 @@ |
4051 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
4052 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:53:54.615040167 +0900 |
4053 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 16:07:26.851357007 +0900 |
4054 | -@@ -11772,7 +11772,14 @@ |
4055 | +@@ -11790,7 +11790,14 @@ |
4056 | i_s_innodb_cmp, |
4057 | i_s_innodb_cmp_reset, |
4058 | i_s_innodb_cmpmem, |
4059 | |
4060 | === modified file 'innodb_split_buf_pool_mutex.patch' |
4061 | --- innodb_split_buf_pool_mutex.patch 2011-06-27 07:12:14 +0000 |
4062 | +++ innodb_split_buf_pool_mutex.patch 2011-08-01 03:32:34 +0000 |
4063 | @@ -8,7 +8,7 @@ |
4064 | diff -ruN a/storage/innobase/btr/btr0cur.c b/storage/innobase/btr/btr0cur.c |
4065 | --- a/storage/innobase/btr/btr0cur.c 2010-11-03 07:01:13.000000000 +0900 |
4066 | +++ b/storage/innobase/btr/btr0cur.c 2010-12-03 15:48:29.268957148 +0900 |
4067 | -@@ -4069,7 +4069,8 @@ |
4068 | +@@ -4081,7 +4081,8 @@ |
4069 | |
4070 | mtr_commit(mtr); |
4071 | |
4072 | @@ -18,7 +18,7 @@ |
4073 | mutex_enter(&block->mutex); |
4074 | |
4075 | /* Only free the block if it is still allocated to |
4076 | -@@ -4080,16 +4081,21 @@ |
4077 | +@@ -4092,16 +4093,21 @@ |
4078 | && buf_block_get_space(block) == space |
4079 | && buf_block_get_page_no(block) == page_no) { |
4080 | |
4081 | @@ -1168,7 +1168,7 @@ |
4082 | buf_pool_t* buf_pool = buf_pool_get(space, offset); |
4083 | |
4084 | ut_ad(mtr); |
4085 | -@@ -2765,9 +2879,11 @@ |
4086 | +@@ -2766,9 +2880,11 @@ |
4087 | fold = buf_page_address_fold(space, offset); |
4088 | loop: |
4089 | block = guess; |
4090 | @@ -1181,7 +1181,7 @@ |
4091 | /* If the guess is a compressed page descriptor that |
4092 | has been allocated by buf_buddy_alloc(), it may have |
4093 | been invalidated by buf_buddy_relocate(). In that |
4094 | -@@ -2776,11 +2892,15 @@ |
4095 | +@@ -2777,11 +2893,15 @@ |
4096 | the guess may be pointing to a buffer pool chunk that |
4097 | has been released when resizing the buffer pool. */ |
4098 | |
4099 | @@ -1198,7 +1198,7 @@ |
4100 | block = guess = NULL; |
4101 | } else { |
4102 | ut_ad(!block->page.in_zip_hash); |
4103 | -@@ -2789,12 +2909,19 @@ |
4104 | +@@ -2790,12 +2910,19 @@ |
4105 | } |
4106 | |
4107 | if (block == NULL) { |
4108 | @@ -1218,7 +1218,7 @@ |
4109 | block = NULL; |
4110 | } |
4111 | |
4112 | -@@ -2806,12 +2933,14 @@ |
4113 | +@@ -2807,12 +2934,14 @@ |
4114 | space, offset, fold); |
4115 | |
4116 | if (UNIV_LIKELY_NULL(block)) { |
4117 | @@ -1235,7 +1235,7 @@ |
4118 | |
4119 | if (mode == BUF_GET_IF_IN_POOL |
4120 | || mode == BUF_PEEK_IF_IN_POOL |
4121 | -@@ -2861,7 +2990,8 @@ |
4122 | +@@ -2862,7 +2991,8 @@ |
4123 | /* The page is being read to buffer pool, |
4124 | but we cannot wait around for the read to |
4125 | complete. */ |
4126 | @@ -1245,7 +1245,7 @@ |
4127 | |
4128 | return(NULL); |
4129 | } |
4130 | -@@ -2871,38 +3001,49 @@ |
4131 | +@@ -2872,38 +3002,49 @@ |
4132 | ibool success; |
4133 | |
4134 | case BUF_BLOCK_FILE_PAGE: |
4135 | @@ -1302,7 +1302,7 @@ |
4136 | |
4137 | { |
4138 | buf_page_t* hash_bpage; |
4139 | -@@ -2915,35 +3056,47 @@ |
4140 | +@@ -2916,35 +3057,47 @@ |
4141 | while buf_pool->mutex was released. |
4142 | Free the block that was allocated. */ |
4143 | |
4144 | @@ -1356,7 +1356,7 @@ |
4145 | buf_block_init_low(block); |
4146 | block->lock_hash_val = lock_rec_hash(space, offset); |
4147 | |
4148 | -@@ -2952,7 +3105,7 @@ |
4149 | +@@ -2953,7 +3106,7 @@ |
4150 | |
4151 | if (buf_page_get_state(&block->page) |
4152 | == BUF_BLOCK_ZIP_PAGE) { |
4153 | @@ -1365,7 +1365,7 @@ |
4154 | &block->page); |
4155 | ut_ad(!block->page.in_flush_list); |
4156 | } else { |
4157 | -@@ -2969,20 +3122,25 @@ |
4158 | +@@ -2970,20 +3123,25 @@ |
4159 | /* Insert at the front of unzip_LRU list */ |
4160 | buf_unzip_LRU_add_block(block, FALSE); |
4161 | |
4162 | @@ -1394,7 +1394,7 @@ |
4163 | |
4164 | /* Decompress the page and apply buffered operations |
4165 | while not holding buf_pool->mutex or block->mutex. */ |
4166 | -@@ -2995,12 +3153,15 @@ |
4167 | +@@ -2996,12 +3154,15 @@ |
4168 | } |
4169 | |
4170 | /* Unfix and unlatch the block. */ |
4171 | @@ -1413,7 +1413,7 @@ |
4172 | rw_lock_x_unlock(&block->lock); |
4173 | |
4174 | break; |
4175 | -@@ -3016,7 +3177,7 @@ |
4176 | +@@ -3017,7 +3178,7 @@ |
4177 | |
4178 | ut_ad(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE); |
4179 | |
4180 | @@ -1422,7 +1422,7 @@ |
4181 | #if UNIV_WORD_SIZE == 4 |
4182 | /* On 32-bit systems, there is no padding in buf_page_t. On |
4183 | other systems, Valgrind could complain about uninitialized pad |
4184 | -@@ -3029,8 +3190,8 @@ |
4185 | +@@ -3030,8 +3191,8 @@ |
4186 | /* Try to evict the block from the buffer pool, to use the |
4187 | insert buffer (change buffer) as much as possible. */ |
4188 | |
4189 | @@ -1433,7 +1433,7 @@ |
4190 | if (mode == BUF_GET_IF_IN_POOL_OR_WATCH) { |
4191 | /* Set the watch, as it would have |
4192 | been set if the page were not in the |
4193 | -@@ -3039,6 +3200,9 @@ |
4194 | +@@ -3040,6 +3201,9 @@ |
4195 | space, offset, fold); |
4196 | |
4197 | if (UNIV_LIKELY_NULL(block)) { |
4198 | @@ -1443,7 +1443,7 @@ |
4199 | |
4200 | /* The page entered the buffer |
4201 | pool for some reason. Try to |
4202 | -@@ -3046,7 +3210,7 @@ |
4203 | +@@ -3047,7 +3211,7 @@ |
4204 | goto got_block; |
4205 | } |
4206 | } |
4207 | @@ -1452,10 +1452,10 @@ |
4208 | fprintf(stderr, |
4209 | "innodb_change_buffering_debug evict %u %u\n", |
4210 | (unsigned) space, (unsigned) offset); |
4211 | -@@ -3065,13 +3229,14 @@ |
4212 | - |
4213 | - buf_block_buf_fix_inc(block, file, line); |
4214 | - |
4215 | +@@ -3069,13 +3233,14 @@ |
4216 | + ut_a(mode == BUF_GET_POSSIBLY_FREED |
4217 | + || !block->page.file_page_was_freed); |
4218 | + #endif |
4219 | - mutex_exit(&block->mutex); |
4220 | + //mutex_exit(&block->mutex); |
4221 | |
4222 | @@ -3382,7 +3382,7 @@ |
4223 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
4224 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:48:03.048955897 +0900 |
4225 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:48:29.304024564 +0900 |
4226 | -@@ -264,6 +264,10 @@ |
4227 | +@@ -265,6 +265,10 @@ |
4228 | # endif /* !PFS_SKIP_BUFFER_MUTEX_RWLOCK */ |
4229 | {&buf_pool_mutex_key, "buf_pool_mutex", 0}, |
4230 | {&buf_pool_zip_mutex_key, "buf_pool_zip_mutex", 0}, |
4231 | @@ -3393,7 +3393,7 @@ |
4232 | {&cache_last_read_mutex_key, "cache_last_read_mutex", 0}, |
4233 | {&dict_foreign_err_mutex_key, "dict_foreign_err_mutex", 0}, |
4234 | {&dict_sys_mutex_key, "dict_sys_mutex", 0}, |
4235 | -@@ -313,6 +317,7 @@ |
4236 | +@@ -314,6 +318,7 @@ |
4237 | {&archive_lock_key, "archive_lock", 0}, |
4238 | # endif /* UNIV_LOG_ARCHIVE */ |
4239 | {&btr_search_latch_key, "btr_search_latch", 0}, |
4240 | @@ -3547,7 +3547,7 @@ |
4241 | diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h |
4242 | --- a/storage/innobase/include/buf0buf.h 2010-12-03 15:22:36.327954660 +0900 |
4243 | +++ b/storage/innobase/include/buf0buf.h 2010-12-03 15:48:29.343024683 +0900 |
4244 | -@@ -205,6 +205,20 @@ |
4245 | +@@ -208,6 +208,20 @@ |
4246 | /*==========================*/ |
4247 | |
4248 | /********************************************************************//** |
4249 | @@ -3568,7 +3568,7 @@ |
4250 | Creates the buffer pool. |
4251 | @return own: buf_pool object, NULL if not enough memory or error */ |
4252 | UNIV_INTERN |
4253 | -@@ -834,6 +848,15 @@ |
4254 | +@@ -837,6 +851,15 @@ |
4255 | const buf_page_t* bpage) /*!< in: pointer to control block */ |
4256 | __attribute__((pure)); |
4257 | |
4258 | @@ -3584,7 +3584,7 @@ |
4259 | /*********************************************************************//** |
4260 | Get the flush type of a page. |
4261 | @return flush type */ |
4262 | -@@ -1315,7 +1338,7 @@ |
4263 | +@@ -1318,7 +1341,7 @@ |
4264 | All these are protected by buf_pool->mutex. */ |
4265 | /* @{ */ |
4266 | |
4267 | @@ -3593,7 +3593,7 @@ |
4268 | /*!< based on state, this is a |
4269 | list node, protected either by |
4270 | buf_pool->mutex or by |
4271 | -@@ -1343,6 +1366,10 @@ |
4272 | +@@ -1346,6 +1369,10 @@ |
4273 | BUF_BLOCK_REMOVE_HASH or |
4274 | BUF_BLOCK_READY_IN_USE. */ |
4275 | |
4276 | @@ -3604,7 +3604,7 @@ |
4277 | #ifdef UNIV_DEBUG |
4278 | ibool in_flush_list; /*!< TRUE if in buf_pool->flush_list; |
4279 | when buf_pool->flush_list_mutex is |
4280 | -@@ -1435,11 +1462,11 @@ |
4281 | +@@ -1438,11 +1465,11 @@ |
4282 | a block is in the unzip_LRU list |
4283 | if page.state == BUF_BLOCK_FILE_PAGE |
4284 | and page.zip.data != NULL */ |
4285 | @@ -3618,7 +3618,7 @@ |
4286 | mutex_t mutex; /*!< mutex protecting this block: |
4287 | state (also protected by the buffer |
4288 | pool mutex), io_fix, buf_fix_count, |
4289 | -@@ -1614,6 +1641,11 @@ |
4290 | +@@ -1617,6 +1644,11 @@ |
4291 | pool instance, protects compressed |
4292 | only pages (of type buf_page_t, not |
4293 | buf_block_t */ |
4294 | @@ -3630,7 +3630,7 @@ |
4295 | ulint instance_no; /*!< Array index of this buffer |
4296 | pool instance */ |
4297 | ulint old_pool_size; /*!< Old pool size in bytes */ |
4298 | -@@ -1765,8 +1797,8 @@ |
4299 | +@@ -1768,8 +1800,8 @@ |
4300 | /** Test if a buffer pool mutex is owned. */ |
4301 | #define buf_pool_mutex_own(b) mutex_own(&b->mutex) |
4302 | /** Acquire a buffer pool mutex. */ |
4303 | |
4304 | === modified file 'innodb_stats.patch' |
4305 | --- innodb_stats.patch 2011-06-10 10:07:06 +0000 |
4306 | +++ innodb_stats.patch 2011-08-01 03:32:34 +0000 |
4307 | @@ -189,7 +189,7 @@ |
4308 | Creates an index tree for the index if it is not a member of a cluster. |
4309 | @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ |
4310 | static |
4311 | -@@ -937,6 +1008,49 @@ |
4312 | +@@ -936,6 +1007,49 @@ |
4313 | dict_sys->sys_fields, heap); |
4314 | node->field_def->common.parent = node; |
4315 | |
4316 | @@ -239,7 +239,7 @@ |
4317 | node->commit_node = commit_node_create(heap); |
4318 | node->commit_node->common.parent = node; |
4319 | |
4320 | -@@ -1087,6 +1201,7 @@ |
4321 | +@@ -1086,6 +1200,7 @@ |
4322 | |
4323 | node->state = INDEX_BUILD_FIELD_DEF; |
4324 | node->field_no = 0; |
4325 | @@ -247,7 +247,7 @@ |
4326 | |
4327 | thr->run_node = node->ind_def; |
4328 | |
4329 | -@@ -1132,7 +1247,31 @@ |
4330 | +@@ -1131,7 +1246,31 @@ |
4331 | goto function_exit; |
4332 | } |
4333 | |
4334 | @@ -280,7 +280,7 @@ |
4335 | } |
4336 | |
4337 | if (node->state == INDEX_CREATE_INDEX_TREE) { |
4338 | -@@ -1178,6 +1317,66 @@ |
4339 | +@@ -1177,6 +1316,66 @@ |
4340 | return(NULL); |
4341 | } |
4342 | |
4343 | @@ -359,7 +359,7 @@ |
4344 | } |
4345 | |
4346 | return(table); |
4347 | -@@ -4309,6 +4309,295 @@ |
4348 | +@@ -4343,6 +4343,295 @@ |
4349 | } |
4350 | |
4351 | /*********************************************************************//** |
4352 | @@ -655,7 +655,7 @@ |
4353 | Calculates new estimates for table and index statistics. The statistics |
4354 | are used in query optimization. */ |
4355 | UNIV_INTERN |
4356 | -@@ -4316,10 +4605,11 @@ |
4357 | +@@ -4350,10 +4639,11 @@ |
4358 | dict_update_statistics( |
4359 | /*===================*/ |
4360 | dict_table_t* table, /*!< in/out: table */ |
4361 | @@ -668,7 +668,7 @@ |
4362 | { |
4363 | dict_index_t* index; |
4364 | ulint sum_of_index_sizes = 0; |
4365 | -@@ -4336,6 +4626,27 @@ |
4366 | +@@ -4370,6 +4660,27 @@ |
4367 | return; |
4368 | } |
4369 | |
4370 | @@ -696,7 +696,7 @@ |
4371 | /* Find out the sizes of the indexes and how many different values |
4372 | for the key they approximately have */ |
4373 | |
4374 | -@@ -4400,6 +4711,11 @@ |
4375 | +@@ -4434,6 +4745,11 @@ |
4376 | index = dict_table_get_next_index(index); |
4377 | } while (index); |
4378 | |
4379 | @@ -708,7 +708,7 @@ |
4380 | index = dict_table_get_first_index(table); |
4381 | |
4382 | table->stat_n_rows = index->stat_n_diff_key_vals[ |
4383 | -@@ -4417,6 +4733,78 @@ |
4384 | +@@ -4451,6 +4767,78 @@ |
4385 | dict_table_stats_unlock(table, RW_X_LATCH); |
4386 | } |
4387 | |
4388 | @@ -787,7 +787,7 @@ |
4389 | /**********************************************************************//** |
4390 | Prints info of a foreign key constraint. */ |
4391 | static |
4392 | -@@ -4494,7 +4882,8 @@ |
4393 | +@@ -4528,7 +4916,8 @@ |
4394 | |
4395 | ut_ad(mutex_own(&(dict_sys->mutex))); |
4396 | |
4397 | @@ -904,15 +904,15 @@ |
4398 | diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc |
4399 | --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:17:03.665960357 +0900 |
4400 | +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:22:21.586939783 +0900 |
4401 | -@@ -187,6 +187,7 @@ |
4402 | - static my_bool innobase_rollback_on_timeout = FALSE; |
4403 | +@@ -188,6 +188,7 @@ |
4404 | static my_bool innobase_create_status_file = FALSE; |
4405 | static my_bool innobase_stats_on_metadata = TRUE; |
4406 | + static my_bool innobase_large_prefix = FALSE; |
4407 | +static my_bool innobase_use_sys_stats_table = FALSE; |
4408 | |
4409 | |
4410 | static char* internal_innobase_data_file_path = NULL; |
4411 | -@@ -2434,6 +2435,8 @@ |
4412 | +@@ -2440,6 +2441,8 @@ |
4413 | goto error; |
4414 | } |
4415 | |
4416 | @@ -921,7 +921,7 @@ |
4417 | /* -------------- Log files ---------------------------*/ |
4418 | |
4419 | /* The default dir for log files is the datadir of MySQL */ |
4420 | -@@ -5236,6 +5239,10 @@ |
4421 | +@@ -5248,6 +5251,10 @@ |
4422 | |
4423 | error = row_insert_for_mysql((byte*) record, prebuilt); |
4424 | |
4425 | @@ -932,7 +932,7 @@ |
4426 | /* Handle duplicate key errors */ |
4427 | if (auto_inc_used) { |
4428 | ulint err; |
4429 | -@@ -5572,6 +5579,10 @@ |
4430 | +@@ -5584,6 +5591,10 @@ |
4431 | } |
4432 | } |
4433 | |
4434 | @@ -943,7 +943,7 @@ |
4435 | innodb_srv_conc_exit_innodb(trx); |
4436 | |
4437 | error = convert_error_code_to_mysql(error, |
4438 | -@@ -5625,6 +5636,10 @@ |
4439 | +@@ -5637,6 +5648,10 @@ |
4440 | |
4441 | error = row_update_for_mysql((byte*) record, prebuilt); |
4442 | |
4443 | @@ -954,7 +954,7 @@ |
4444 | innodb_srv_conc_exit_innodb(trx); |
4445 | |
4446 | error = convert_error_code_to_mysql( |
4447 | -@@ -5943,6 +5958,11 @@ |
4448 | +@@ -5955,6 +5970,11 @@ |
4449 | case DB_SUCCESS: |
4450 | error = 0; |
4451 | table->status = 0; |
4452 | @@ -966,7 +966,7 @@ |
4453 | break; |
4454 | case DB_RECORD_NOT_FOUND: |
4455 | error = HA_ERR_KEY_NOT_FOUND; |
4456 | -@@ -6152,6 +6172,11 @@ |
4457 | +@@ -6164,6 +6184,11 @@ |
4458 | case DB_SUCCESS: |
4459 | error = 0; |
4460 | table->status = 0; |
4461 | @@ -978,7 +978,7 @@ |
4462 | break; |
4463 | case DB_RECORD_NOT_FOUND: |
4464 | error = HA_ERR_END_OF_FILE; |
4465 | -@@ -8094,11 +8119,35 @@ |
4466 | +@@ -8106,11 +8131,35 @@ |
4467 | /* In sql_show we call with this flag: update |
4468 | then statistics so that they are up-to-date */ |
4469 | |
4470 | @@ -1015,7 +1015,7 @@ |
4471 | |
4472 | prebuilt->trx->op_info = "returning various info to MySQL"; |
4473 | } |
4474 | -@@ -8176,7 +8225,7 @@ |
4475 | +@@ -8188,7 +8237,7 @@ |
4476 | are asked by MySQL to avoid locking. Another reason to |
4477 | avoid the call is that it uses quite a lot of CPU. |
4478 | See Bug#38185. */ |
4479 | @@ -1024,7 +1024,7 @@ |
4480 | || !(flag & HA_STATUS_VARIABLE_EXTRA)) { |
4481 | /* We do not update delete_length if no |
4482 | locking is requested so the "old" value can |
4483 | -@@ -11385,6 +11434,26 @@ |
4484 | +@@ -11402,6 +11451,26 @@ |
4485 | "The number of index pages to sample when calculating statistics (default 8)", |
4486 | NULL, NULL, 8, 1, ~0ULL, 0); |
4487 | |
4488 | @@ -1051,7 +1051,7 @@ |
4489 | static MYSQL_SYSVAR_BOOL(adaptive_hash_index, btr_search_enabled, |
4490 | PLUGIN_VAR_OPCMDARG, |
4491 | "Enable InnoDB adaptive hash index (enabled by default). " |
4492 | -@@ -11710,6 +11779,9 @@ |
4493 | +@@ -11728,6 +11797,9 @@ |
4494 | MYSQL_SYSVAR(recovery_update_relay_log), |
4495 | MYSQL_SYSVAR(rollback_on_timeout), |
4496 | MYSQL_SYSVAR(stats_on_metadata), |
4497 | @@ -1061,7 +1061,7 @@ |
4498 | MYSQL_SYSVAR(stats_sample_pages), |
4499 | MYSQL_SYSVAR(adaptive_hash_index), |
4500 | MYSQL_SYSVAR(stats_method), |
4501 | -@@ -11779,7 +11851,10 @@ |
4502 | +@@ -11797,7 +11869,10 @@ |
4503 | i_s_innodb_sys_columns, |
4504 | i_s_innodb_sys_fields, |
4505 | i_s_innodb_sys_foreign, |
4506 | @@ -1767,7 +1767,7 @@ |
4507 | diff -ruN a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h |
4508 | --- a/storage/innobase/include/dict0dict.h 2010-12-03 15:48:03.073024387 +0900 |
4509 | +++ b/storage/innobase/include/dict0dict.h 2010-12-03 17:19:24.888965622 +0900 |
4510 | -@@ -1096,10 +1096,18 @@ |
4511 | +@@ -1109,10 +1109,18 @@ |
4512 | dict_update_statistics( |
4513 | /*===================*/ |
4514 | dict_table_t* table, /*!< in/out: table */ |
4515 | @@ -1787,7 +1787,7 @@ |
4516 | /********************************************************************//** |
4517 | Reserves the dictionary system mutex for MySQL. */ |
4518 | UNIV_INTERN |
4519 | -@@ -1214,6 +1222,7 @@ |
4520 | +@@ -1227,6 +1235,7 @@ |
4521 | dict_table_t* sys_columns; /*!< SYS_COLUMNS table */ |
4522 | dict_table_t* sys_indexes; /*!< SYS_INDEXES table */ |
4523 | dict_table_t* sys_fields; /*!< SYS_FIELDS table */ |
4524 | @@ -1806,7 +1806,7 @@ |
4525 | |
4526 | /* This must be last item. Defines the number of system tables. */ |
4527 | SYS_NUM_SYSTEM_TABLES |
4528 | -@@ -322,6 +323,20 @@ |
4529 | +@@ -327,6 +328,20 @@ |
4530 | const char** ref_col_name, /*!< out: referenced column name |
4531 | in referenced table */ |
4532 | ulint* pos); /*!< out: column position */ |
4533 | @@ -1967,7 +1967,7 @@ |
4534 | } |
4535 | } |
4536 | |
4537 | -@@ -2098,6 +2101,71 @@ |
4538 | +@@ -2103,6 +2106,71 @@ |
4539 | } |
4540 | |
4541 | /*********************************************************************//** |
4542 | @@ -2039,7 +2039,7 @@ |
4543 | Scans a table create SQL string and adds to the data dictionary |
4544 | the foreign key constraints declared in the string. This function |
4545 | should be called after the indexes for a table have been created. |
4546 | -@@ -3022,7 +3090,7 @@ |
4547 | +@@ -3027,7 +3095,7 @@ |
4548 | dict_table_autoinc_initialize(table, 1); |
4549 | dict_table_autoinc_unlock(table); |
4550 | dict_update_statistics(table, FALSE /* update even if stats are |
4551 | @@ -2048,7 +2048,7 @@ |
4552 | |
4553 | trx_commit_for_mysql(trx); |
4554 | |
4555 | -@@ -3324,6 +3392,8 @@ |
4556 | +@@ -3329,6 +3397,8 @@ |
4557 | " IF (SQL % NOTFOUND) THEN\n" |
4558 | " found := 0;\n" |
4559 | " ELSE\n" |
4560 | @@ -2060,7 +2060,7 @@ |
4561 | diff -ruN a/storage/innobase/row/row0row.c b/storage/innobase/row/row0row.c |
4562 | --- a/storage/innobase/row/row0row.c 2011-03-10 00:11:38.000000000 +0900 |
4563 | +++ b/storage/innobase/row/row0row.c 2011-03-30 11:44:58.000000000 +0900 |
4564 | -@@ -347,6 +347,14 @@ |
4565 | +@@ -315,6 +315,14 @@ |
4566 | |
4567 | rec_len = rec_offs_n_fields(offsets); |
4568 | |
4569 | @@ -2075,7 +2075,7 @@ |
4570 | entry = dtuple_create(heap, rec_len); |
4571 | |
4572 | dtuple_set_n_fields_cmp(entry, |
4573 | -@@ -358,6 +366,14 @@ |
4574 | +@@ -326,6 +334,14 @@ |
4575 | for (i = 0; i < rec_len; i++) { |
4576 | |
4577 | dfield = dtuple_get_nth_field(entry, i); |
4578 | @@ -2141,12 +2141,12 @@ |
4579 | diff -ruN a/storage/innobase/trx/trx0rec.c b/storage/innobase/trx/trx0rec.c |
4580 | --- a/storage/innobase/trx/trx0rec.c 2011-03-10 00:11:38.000000000 +0900 |
4581 | +++ b/storage/innobase/trx/trx0rec.c 2011-03-30 11:44:58.000000000 +0900 |
4582 | -@@ -665,14 +665,27 @@ |
4583 | +@@ -669,15 +669,27 @@ |
4584 | /* Save to the undo log the old values of the columns to be updated. */ |
4585 | |
4586 | if (update) { |
4587 | + ulint extended = 0; |
4588 | -+ |
4589 | + |
4590 | if (trx_undo_left(undo_page, ptr) < 5) { |
4591 | |
4592 | return(0); |
4593 | |
4594 | === modified file 'innodb_thread_concurrency_timer_based.patch' |
4595 | --- innodb_thread_concurrency_timer_based.patch 2011-06-10 10:07:06 +0000 |
4596 | +++ innodb_thread_concurrency_timer_based.patch 2011-08-01 03:32:34 +0000 |
4597 | @@ -16,7 +16,7 @@ |
4598 | static long long innobase_buffer_pool_size, innobase_log_file_size; |
4599 | |
4600 | /** Percentage of the buffer pool to reserve for 'old' blocks. |
4601 | -@@ -2543,6 +2544,9 @@ |
4602 | +@@ -2549,6 +2550,9 @@ |
4603 | srv_n_log_files = (ulint) innobase_log_files_in_group; |
4604 | srv_log_file_size = (ulint) innobase_log_file_size; |
4605 | |
4606 | @@ -26,7 +26,7 @@ |
4607 | #ifdef UNIV_LOG_ARCHIVE |
4608 | srv_log_archive_on = (ulint) innobase_log_archive; |
4609 | #endif /* UNIV_LOG_ARCHIVE */ |
4610 | -@@ -11475,6 +11479,12 @@ |
4611 | +@@ -11492,6 +11496,12 @@ |
4612 | "Maximum delay between polling for a spin lock (6 by default)", |
4613 | NULL, NULL, 6L, 0L, ~0L, 0); |
4614 | |
4615 | @@ -39,7 +39,7 @@ |
4616 | static MYSQL_SYSVAR_ULONG(thread_concurrency, srv_thread_concurrency, |
4617 | PLUGIN_VAR_RQCMDARG, |
4618 | "Helps in performance tuning in heavily concurrent environments. Sets the maximum number of threads allowed inside InnoDB. Value 0 will disable the thread throttling.", |
4619 | -@@ -11686,6 +11696,7 @@ |
4620 | +@@ -11704,6 +11714,7 @@ |
4621 | MYSQL_SYSVAR(spin_wait_delay), |
4622 | MYSQL_SYSVAR(table_locks), |
4623 | MYSQL_SYSVAR(thread_concurrency), |
4624 | |
4625 | === modified file 'log_connection_error.patch' |
4626 | --- log_connection_error.patch 2011-06-16 01:19:11 +0000 |
4627 | +++ log_connection_error.patch 2011-08-01 03:32:34 +0000 |
4628 | @@ -18,7 +18,7 @@ |
4629 | diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc |
4630 | --- a/sql/mysqld.cc 2011-04-09 18:48:53.000000000 +0400 |
4631 | +++ b/sql/mysqld.cc 2011-04-09 18:48:54.000000000 +0400 |
4632 | -@@ -5040,6 +5040,10 @@ |
4633 | +@@ -5098,6 +5098,10 @@ |
4634 | |
4635 | DBUG_PRINT("error",("Too many connections")); |
4636 | close_connection(thd, ER_CON_COUNT_ERROR); |
4637 | @@ -29,7 +29,7 @@ |
4638 | delete thd; |
4639 | DBUG_VOID_RETURN; |
4640 | } |
4641 | -@@ -5420,6 +5424,10 @@ |
4642 | +@@ -5478,6 +5482,10 @@ |
4643 | if (!(thd->net.vio= vio_new_win32pipe(hConnectedPipe)) || |
4644 | my_net_init(&thd->net, thd->net.vio)) |
4645 | { |
4646 | @@ -40,7 +40,7 @@ |
4647 | close_connection(thd, ER_OUT_OF_RESOURCES); |
4648 | delete thd; |
4649 | continue; |
4650 | -@@ -5615,6 +5623,10 @@ |
4651 | +@@ -5673,6 +5681,10 @@ |
4652 | event_conn_closed)) || |
4653 | my_net_init(&thd->net, thd->net.vio)) |
4654 | { |
4655 | |
4656 | === modified file 'log_warnings_suppress.patch' |
4657 | --- log_warnings_suppress.patch 2011-06-16 01:19:11 +0000 |
4658 | +++ log_warnings_suppress.patch 2011-08-01 03:32:34 +0000 |
4659 | @@ -21,7 +21,7 @@ |
4660 | diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc |
4661 | --- a/sql/mysqld.cc 2011-04-09 18:48:59.000000000 +0400 |
4662 | +++ b/sql/mysqld.cc 2011-04-09 18:48:59.000000000 +0400 |
4663 | -@@ -623,6 +623,8 @@ |
4664 | +@@ -628,6 +628,8 @@ |
4665 | SHOW_COMP_OPTION have_crypt, have_compress; |
4666 | SHOW_COMP_OPTION have_profiling; |
4667 | |
4668 | @@ -39,13 +39,13 @@ |
4669 | |
4670 | +extern ulonglong opt_log_warnings_suppress; |
4671 | + |
4672 | - extern pthread_key(MEM_ROOT**,THR_MALLOC); |
4673 | - |
4674 | - #ifdef HAVE_PSI_INTERFACE |
4675 | + /* |
4676 | + THR_MALLOC is a key which will be used to set/get MEM_ROOT** for a thread, |
4677 | + using my_pthread_setspecific_ptr()/my_thread_getspecific_ptr(). |
4678 | diff -ruN a/sql/sql_class.cc b/sql/sql_class.cc |
4679 | --- a/sql/sql_class.cc 2011-04-09 18:48:50.000000000 +0400 |
4680 | +++ b/sql/sql_class.cc 2011-04-09 18:48:59.000000000 +0400 |
4681 | -@@ -4575,7 +4575,7 @@ |
4682 | +@@ -4864,7 +4864,7 @@ |
4683 | ER_BINLOG_UNSAFE_STATEMENT, |
4684 | ER(ER_BINLOG_UNSAFE_STATEMENT), |
4685 | ER(LEX::binlog_stmt_unsafe_errcode[unsafe_type])); |
4686 | |
4687 | === modified file 'microsec_process.patch' |
4688 | --- microsec_process.patch 2011-06-10 10:07:06 +0000 |
4689 | +++ microsec_process.patch 2011-08-01 03:32:34 +0000 |
4690 | @@ -41,7 +41,7 @@ |
4691 | if (schema_table_store_record(thd, table)) |
4692 | { |
4693 | mysql_mutex_unlock(&LOCK_thread_count); |
4694 | -@@ -7409,6 +7414,8 @@ |
4695 | +@@ -7441,6 +7446,8 @@ |
4696 | {"STATE", 64, MYSQL_TYPE_STRING, 0, 1, "State", SKIP_OPEN_TABLE}, |
4697 | {"INFO", PROCESS_LIST_INFO_WIDTH, MYSQL_TYPE_STRING, 0, 1, "Info", |
4698 | SKIP_OPEN_TABLE}, |
4699 | |
4700 | === modified file 'mysql-test.diff' |
4701 | --- mysql-test.diff 2011-05-18 00:03:53 +0000 |
4702 | +++ mysql-test.diff 2011-08-01 03:32:34 +0000 |
4703 | @@ -1342,3 +1342,22 @@ |
4704 | +++ b/mysql-test/suite/sys_vars/t/userstat_basic.test 2011-04-09 18:49:05.000000000 +0400 |
4705 | @@ -0,0 +1 @@ |
4706 | +SELECT @@global.userstat; |
4707 | +diff -ruN a/mysql-test/suite/sys_vars/r/all_vars.result b/mysql-test/suite/sys_vars/r/all_vars.result |
4708 | +--- a/mysql-test/suite/sys_vars/r/all_vars.result 2011-06-21 19:42:40.000000000 +0300 |
4709 | ++++ b/mysql-test/suite/sys_vars/r/all_vars.result 2011-07-27 23:04:47.504793666 +0300 |
4710 | +@@ -12,11 +12,15 @@ |
4711 | + left join t1 on variable_name=test_name where test_name is null; |
4712 | + There should be *no* variables listed below: |
4713 | + INNODB_ROLLBACK_SEGMENTS |
4714 | ++INNODB_KILL_IDLE_TRANSACTION |
4715 | + INNODB_STATS_METHOD |
4716 | ++INNODB_FAKE_CHANGES |
4717 | + INNODB_FILE_FORMAT_MAX |
4718 | + INNODB_LARGE_PREFIX |
4719 | + INNODB_ROLLBACK_SEGMENTS |
4720 | ++INNODB_KILL_IDLE_TRANSACTION |
4721 | + INNODB_STATS_METHOD |
4722 | ++INNODB_FAKE_CHANGES |
4723 | + INNODB_FILE_FORMAT_MAX |
4724 | + INNODB_LARGE_PREFIX |
4725 | + drop table t1; |
4726 | |
4727 | === modified file 'mysql_syslog.patch' |
4728 | --- mysql_syslog.patch 2011-05-11 13:27:33 +0000 |
4729 | +++ mysql_syslog.patch 2011-08-01 03:32:34 +0000 |
4730 | @@ -59,7 +59,7 @@ |
4731 | + NO_ARG, 0, 0, 0, 0, 0, 0}, |
4732 | +#endif |
4733 | {"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.", |
4734 | - (uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0, |
4735 | + &opt_plugin_dir, &opt_plugin_dir, 0, |
4736 | GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, |
4737 | @@ -1667,6 +1677,11 @@ |
4738 | opt->name); |
4739 | |
4740 | === modified file 'optimizer_fix.patch' |
4741 | --- optimizer_fix.patch 2011-06-10 10:07:06 +0000 |
4742 | +++ optimizer_fix.patch 2011-08-01 03:32:34 +0000 |
4743 | @@ -20,8 +20,8 @@ |
4744 | diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc |
4745 | --- a/sql/mysqld.cc 2010-12-02 19:22:40.027024953 +0900 |
4746 | +++ b/sql/mysqld.cc 2010-12-02 20:51:50.811356434 +0900 |
4747 | -@@ -425,6 +425,7 @@ |
4748 | - uint opt_debug_sync_timeout= 0; |
4749 | +@@ -430,6 +430,7 @@ |
4750 | + MYSQL_PLUGIN_IMPORT uint opt_debug_sync_timeout= 0; |
4751 | #endif /* defined(ENABLED_DEBUG_SYNC) */ |
4752 | my_bool opt_old_style_user_limits= 0, trust_function_creators= 0; |
4753 | +my_bool opt_optimizer_fix= 0; |
4754 | |
4755 | === modified file 'processlist_row_stats.patch' |
4756 | --- processlist_row_stats.patch 2011-06-16 01:19:11 +0000 |
4757 | +++ processlist_row_stats.patch 2011-08-01 03:32:34 +0000 |
4758 | @@ -8,7 +8,7 @@ |
4759 | diff -ruN a/sql/sql_class.cc b/sql/sql_class.cc |
4760 | --- a/sql/sql_class.cc 2011-03-09 17:07:26.221709282 +0200 |
4761 | +++ b/sql/sql_class.cc 2011-03-09 17:07:44.900164285 +0200 |
4762 | -@@ -2017,6 +2017,7 @@ |
4763 | +@@ -2306,6 +2306,7 @@ |
4764 | |
4765 | thd->sent_row_count++; |
4766 | thd->sent_row_count_2++; |
4767 | @@ -89,7 +89,7 @@ |
4768 | if (schema_table_store_record(thd, table)) |
4769 | { |
4770 | mysql_mutex_unlock(&LOCK_thread_count); |
4771 | -@@ -8082,6 +8108,12 @@ |
4772 | +@@ -8117,6 +8143,12 @@ |
4773 | SKIP_OPEN_TABLE}, |
4774 | {"TIME_MS", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, |
4775 | 0, 0, "Time_ms", SKIP_OPEN_TABLE}, |
4776 | |
4777 | === modified file 'query_cache_enhance.patch' |
4778 | --- query_cache_enhance.patch 2011-06-16 01:19:11 +0000 |
4779 | +++ query_cache_enhance.patch 2011-08-01 03:32:34 +0000 |
4780 | @@ -27,7 +27,7 @@ |
4781 | diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc |
4782 | --- a/sql/mysqld.cc 2011-04-09 18:48:50.000000000 +0400 |
4783 | +++ b/sql/mysqld.cc 2011-04-09 18:48:53.000000000 +0400 |
4784 | -@@ -899,6 +899,7 @@ |
4785 | +@@ -904,6 +904,7 @@ |
4786 | #endif |
4787 | #ifdef HAVE_QUERY_CACHE |
4788 | ulong query_cache_min_res_unit= QUERY_CACHE_MIN_RESULT_DATA_SIZE; |
4789 | |
4790 | === modified file 'response_time_distribution.patch' |
4791 | --- response_time_distribution.patch 2011-06-21 02:36:36 +0000 |
4792 | +++ response_time_distribution.patch 2011-08-01 03:32:34 +0000 |
4793 | @@ -109,7 +109,7 @@ |
4794 | #ifdef WITH_PERFSCHEMA_STORAGE_ENGINE |
4795 | #include "../storage/perfschema/pfs_server.h" |
4796 | #endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */ |
4797 | -@@ -606,7 +608,7 @@ |
4798 | +@@ -611,7 +613,7 @@ |
4799 | MY_LOCALE *my_default_lc_messages; |
4800 | MY_LOCALE *my_default_lc_time_names; |
4801 | |
4802 | @@ -118,7 +118,7 @@ |
4803 | SHOW_COMP_OPTION have_geometry, have_rtree_keys; |
4804 | SHOW_COMP_OPTION have_crypt, have_compress; |
4805 | SHOW_COMP_OPTION have_profiling; |
4806 | -@@ -907,6 +909,10 @@ |
4807 | +@@ -912,6 +914,10 @@ |
4808 | my_bool opt_enable_shared_memory; |
4809 | HANDLE smem_event_connect_request= 0; |
4810 | #endif |
4811 | @@ -129,7 +129,7 @@ |
4812 | |
4813 | my_bool opt_use_ssl = 0; |
4814 | char *opt_ssl_ca= NULL, *opt_ssl_capath= NULL, *opt_ssl_cert= NULL, |
4815 | -@@ -1478,6 +1484,9 @@ |
4816 | +@@ -1483,6 +1489,9 @@ |
4817 | my_free(opt_bin_logname); |
4818 | bitmap_free(&temp_pool); |
4819 | free_max_user_conn(); |
4820 | @@ -139,7 +139,7 @@ |
4821 | #ifdef HAVE_REPLICATION |
4822 | end_slave_list(); |
4823 | #endif |
4824 | -@@ -3960,6 +3969,9 @@ |
4825 | +@@ -4010,6 +4019,9 @@ |
4826 | if (!DEFAULT_ERRMSGS[0][0]) |
4827 | unireg_abort(1); |
4828 | |
4829 | @@ -149,7 +149,7 @@ |
4830 | /* We have to initialize the storage engines before CSV logging */ |
4831 | if (ha_init()) |
4832 | { |
4833 | -@@ -6848,6 +6860,11 @@ |
4834 | +@@ -6906,6 +6918,11 @@ |
4835 | #else |
4836 | have_query_cache=SHOW_OPTION_NO; |
4837 | #endif |
4838 | @@ -716,7 +716,7 @@ |
4839 | #include "lock.h" // MYSQL_OPEN_IGNORE_FLUSH |
4840 | #include "debug_sync.h" |
4841 | #include "datadict.h" // dd_frm_type() |
4842 | -@@ -7830,6 +7831,14 @@ |
4843 | +@@ -7865,6 +7866,14 @@ |
4844 | |
4845 | */ |
4846 | |
4847 | @@ -731,7 +731,7 @@ |
4848 | ST_SCHEMA_TABLE schema_tables[]= |
4849 | { |
4850 | {"CHARACTER_SETS", charsets_fields_info, create_schema_table, |
4851 | -@@ -7883,6 +7892,13 @@ |
4852 | +@@ -7918,6 +7927,13 @@ |
4853 | 1, 9, 0, OPTIMIZE_I_S_TABLE|OPEN_TABLE_ONLY}, |
4854 | {"ROUTINES", proc_fields_info, create_schema_table, |
4855 | fill_schema_proc, make_proc_old_format, 0, -1, -1, 0, 0}, |
4856 | @@ -785,7 +785,7 @@ |
4857 | | MASTER_SYM |
4858 | { Lex->type|= REFRESH_MASTER; } |
4859 | | DES_KEY_FILE |
4860 | -@@ -12597,6 +12613,7 @@ |
4861 | +@@ -12613,6 +12629,7 @@ |
4862 | | PROXY_SYM {} |
4863 | | QUARTER_SYM {} |
4864 | | QUERY_SYM {} |
4865 | |
4866 | === modified file 'series' |
4867 | --- series 2011-07-21 09:14:03 +0000 |
4868 | +++ series 2011-08-01 03:32:34 +0000 |
4869 | @@ -29,6 +29,8 @@ |
4870 | innodb_buffer_pool_pages_i_s.patch |
4871 | innodb_buffer_pool_shm.patch |
4872 | innodb_show_status_extend.patch |
4873 | +innodb_kill_idle_transaction.patch |
4874 | +innodb_fake_changes.patch |
4875 | slow_extended.patch |
4876 | percona_support.patch |
4877 | query_cache_enhance.patch |
4878 | |
4879 | === modified file 'show_slave_status_nolock.patch' |
4880 | --- show_slave_status_nolock.patch 2011-06-16 01:19:11 +0000 |
4881 | +++ show_slave_status_nolock.patch 2011-08-01 03:32:34 +0000 |
4882 | @@ -29,7 +29,7 @@ |
4883 | diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc |
4884 | --- a/sql/mysqld.cc 2011-04-10 11:29:05.000000000 +0400 |
4885 | +++ b/sql/mysqld.cc 2011-04-10 11:29:06.000000000 +0400 |
4886 | -@@ -3071,6 +3071,7 @@ |
4887 | +@@ -3121,6 +3121,7 @@ |
4888 | {"show_relaylog_events", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_RELAYLOG_EVENTS]), SHOW_LONG_STATUS}, |
4889 | {"show_slave_hosts", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_HOSTS]), SHOW_LONG_STATUS}, |
4890 | {"show_slave_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_STAT]), SHOW_LONG_STATUS}, |
4891 | @@ -60,7 +60,7 @@ |
4892 | sql_command_flags[SQLCOM_SHOW_CREATE_PROC]= CF_STATUS_COMMAND; |
4893 | sql_command_flags[SQLCOM_SHOW_CREATE_FUNC]= CF_STATUS_COMMAND; |
4894 | sql_command_flags[SQLCOM_SHOW_CREATE_TRIGGER]= CF_STATUS_COMMAND; |
4895 | -@@ -2293,12 +2294,16 @@ |
4896 | +@@ -2354,12 +2355,16 @@ |
4897 | mysql_mutex_unlock(&LOCK_active_mi); |
4898 | break; |
4899 | } |
4900 | @@ -78,7 +78,7 @@ |
4901 | if (active_mi != NULL) |
4902 | { |
4903 | res = show_master_info(thd, active_mi); |
4904 | -@@ -2309,7 +2314,10 @@ |
4905 | +@@ -2370,7 +2375,10 @@ |
4906 | WARN_NO_MASTER_INFO, ER(WARN_NO_MASTER_INFO)); |
4907 | my_ok(thd); |
4908 | } |
4909 | |
4910 | === modified file 'show_temp.patch' |
4911 | --- show_temp.patch 2011-07-06 08:42:49 +0000 |
4912 | +++ show_temp.patch 2011-08-01 03:32:34 +0000 |
4913 | @@ -27,7 +27,7 @@ |
4914 | diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc |
4915 | --- a/sql/mysqld.cc 2011-07-05 22:30:05.000000000 +0400 |
4916 | +++ b/sql/mysqld.cc 2011-07-06 12:04:47.000000000 +0400 |
4917 | -@@ -3051,6 +3051,7 @@ |
4918 | +@@ -3101,6 +3101,7 @@ |
4919 | {"show_storage_engines", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STORAGE_ENGINES]), SHOW_LONG_STATUS}, |
4920 | {"show_table_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TABLE_STATUS]), SHOW_LONG_STATUS}, |
4921 | {"show_tables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TABLES]), SHOW_LONG_STATUS}, |
4922 | @@ -35,7 +35,7 @@ |
4923 | {"show_triggers", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TRIGGERS]), SHOW_LONG_STATUS}, |
4924 | {"show_variables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_VARIABLES]), SHOW_LONG_STATUS}, |
4925 | {"show_warnings", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_WARNS]), SHOW_LONG_STATUS}, |
4926 | -@@ -7724,6 +7725,7 @@ |
4927 | +@@ -7798,6 +7799,7 @@ |
4928 | PSI_mutex_key key_LOCK_des_key_file; |
4929 | #endif /* HAVE_OPENSSL */ |
4930 | |
4931 | @@ -43,7 +43,7 @@ |
4932 | PSI_mutex_key key_BINLOG_LOCK_index, key_BINLOG_LOCK_prep_xids, |
4933 | key_delayed_insert_mutex, key_hash_filo_lock, key_LOCK_active_mi, |
4934 | key_LOCK_connection_count, key_LOCK_crypt, key_LOCK_delayed_create, |
4935 | -@@ -7777,6 +7779,7 @@ |
4936 | +@@ -7851,6 +7853,7 @@ |
4937 | { &key_LOCK_system_variables_hash, "LOCK_system_variables_hash", PSI_FLAG_GLOBAL}, |
4938 | { &key_LOCK_table_share, "LOCK_table_share", PSI_FLAG_GLOBAL}, |
4939 | { &key_LOCK_thd_data, "THD::LOCK_thd_data", 0}, |
4940 | @@ -84,7 +84,7 @@ |
4941 | case SCH_VIEWS: |
4942 | case SCH_TRIGGERS: |
4943 | case SCH_EVENTS: |
4944 | -@@ -2017,6 +2022,7 @@ |
4945 | +@@ -2078,6 +2083,7 @@ |
4946 | } |
4947 | case SQLCOM_SHOW_DATABASES: |
4948 | case SQLCOM_SHOW_TABLES: |
4949 | @@ -92,7 +92,7 @@ |
4950 | case SQLCOM_SHOW_TRIGGERS: |
4951 | case SQLCOM_SHOW_TABLE_STATUS: |
4952 | case SQLCOM_SHOW_OPEN_TABLES: |
4953 | -@@ -4801,6 +4807,8 @@ |
4954 | +@@ -4841,6 +4847,8 @@ |
4955 | |
4956 | case SCH_TABLE_NAMES: |
4957 | case SCH_TABLES: |
4958 | @@ -104,7 +104,7 @@ |
4959 | diff -ruN a/sql/sql_show.cc b/sql/sql_show.cc |
4960 | --- a/sql/sql_show.cc 2011-07-05 22:30:04.000000000 +0400 |
4961 | +++ b/sql/sql_show.cc 2011-07-06 12:09:05.000000000 +0400 |
4962 | -@@ -2693,6 +2693,7 @@ |
4963 | +@@ -2692,6 +2692,7 @@ |
4964 | break; |
4965 | case SQLCOM_SHOW_TABLES: |
4966 | case SQLCOM_SHOW_TABLE_STATUS: |
4967 | @@ -112,7 +112,7 @@ |
4968 | case SQLCOM_SHOW_TRIGGERS: |
4969 | case SQLCOM_SHOW_EVENTS: |
4970 | thd->make_lex_string(&lookup_field_values->db_value, |
4971 | -@@ -3181,6 +3182,231 @@ |
4972 | +@@ -3279,6 +3280,231 @@ |
4973 | return (uint) OPEN_FULL_TABLE; |
4974 | } |
4975 | |
4976 | @@ -344,7 +344,7 @@ |
4977 | |
4978 | /** |
4979 | Try acquire high priority share metadata lock on a table (with |
4980 | -@@ -6991,6 +7217,25 @@ |
4981 | +@@ -7023,6 +7249,25 @@ |
4982 | {0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE} |
4983 | }; |
4984 | |
4985 | @@ -370,7 +370,7 @@ |
4986 | |
4987 | ST_FIELD_INFO columns_fields_info[]= |
4988 | { |
4989 | -@@ -7605,6 +7850,9 @@ |
4990 | +@@ -7637,6 +7882,9 @@ |
4991 | hton_fill_schema_table, 0, 0, -1, -1, 0, 0}, |
4992 | {"GLOBAL_STATUS", variables_fields_info, create_schema_table, |
4993 | fill_status, make_old_format, 0, 0, -1, 0, 0}, |
4994 | @@ -380,7 +380,7 @@ |
4995 | {"GLOBAL_VARIABLES", variables_fields_info, create_schema_table, |
4996 | fill_variables, make_old_format, 0, 0, -1, 0, 0}, |
4997 | {"KEY_COLUMN_USAGE", key_column_usage_fields_info, create_schema_table, |
4998 | -@@ -7654,6 +7902,9 @@ |
4999 | +@@ -7686,6 +7934,9 @@ |
5000 | get_all_tables, make_table_names_old_format, 0, 1, 2, 1, 0}, |
The diff has been truncated for viewing.