Skip to content

Commit 9aa098c

Browse files
committed
Merge 11.0 into 11.1
2 parents 22392b3 + 9277248 commit 9aa098c

File tree

3 files changed

+45
-10
lines changed

3 files changed

+45
-10
lines changed

mysql-test/main/selectivity_innodb.result

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2329,7 +2329,7 @@ CREATE TABLE t1 (c INT KEY) ENGINE=InnoDB;
23292329
SELECT * FROM (SELECT * FROM t1) a JOIN (SELECT * FROM (SELECT * FROM t1 GROUP BY c) d WHERE c>1) b ON a.c=b.c;
23302330
c c
23312331
DROP TABLE t1;
2332-
SET optimizer_use_condition_selectivity=1;
2332+
SET optimizer_use_condition_selectivity=@tmp_oucs;
23332333
#
23342334
# End of 11.0 tests
23352335
#

mysql-test/main/selectivity_innodb.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ set @tmp_oucs= @@optimizer_use_condition_selectivity;
289289
CREATE TABLE t1 (c INT KEY) ENGINE=InnoDB;
290290
SELECT * FROM (SELECT * FROM t1) a JOIN (SELECT * FROM (SELECT * FROM t1 GROUP BY c) d WHERE c>1) b ON a.c=b.c;
291291
DROP TABLE t1;
292-
SET optimizer_use_condition_selectivity=1;
292+
SET optimizer_use_condition_selectivity=@tmp_oucs;
293293

294294
--echo #
295295
--echo # End of 11.0 tests

storage/innobase/buf/buf0rea.cc

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,17 @@ ulint buf_read_ahead_random(const page_id_t page_id, ulint zip_size)
341341

342342
/* Read all the suitable blocks within the area */
343343
buf_block_t *block= nullptr;
344-
if (!zip_size && !(block= buf_read_acquire()))
345-
goto no_read_ahead;
344+
if (UNIV_LIKELY(!zip_size))
345+
{
346+
allocate_block:
347+
if (UNIV_UNLIKELY(!(block= buf_read_acquire())))
348+
goto no_read_ahead;
349+
}
350+
else if (recv_recovery_is_on())
351+
{
352+
zip_size|= 1;
353+
goto allocate_block;
354+
}
346355

347356
for (page_id_t i= low; i < high; ++i)
348357
{
@@ -354,7 +363,8 @@ ulint buf_read_ahead_random(const page_id_t page_id, ulint zip_size)
354363
{
355364
count++;
356365
ut_ad(!block);
357-
if (!zip_size && !(block= buf_read_acquire()))
366+
if ((UNIV_LIKELY(!zip_size) || (zip_size & 1)) &&
367+
UNIV_UNLIKELY(!(block= buf_read_acquire())))
358368
break;
359369
}
360370
}
@@ -406,11 +416,17 @@ dberr_t buf_read_page(const page_id_t page_id, ulint zip_size,
406416
buf_block_t *block= nullptr;
407417
if (UNIV_LIKELY(!zip_size))
408418
{
419+
allocate_block:
409420
mysql_mutex_lock(&buf_pool.mutex);
410421
buf_LRU_stat_inc_io();
411422
block= buf_LRU_get_free_block(have_mutex);
412423
mysql_mutex_unlock(&buf_pool.mutex);
413424
}
425+
else if (recv_recovery_is_on())
426+
{
427+
zip_size|= 1;
428+
goto allocate_block;
429+
}
414430

415431
dberr_t err= buf_read_page_low(page_id, zip_size, chain, space, block, true);
416432
buf_read_release(block);
@@ -436,8 +452,17 @@ void buf_read_page_background(fil_space_t *space, const page_id_t page_id,
436452
}
437453

438454
buf_block_t *block= nullptr;
439-
if (!zip_size && !(block= buf_read_acquire()))
440-
goto skip;
455+
if (UNIV_LIKELY(!zip_size))
456+
{
457+
allocate_block:
458+
if (UNIV_UNLIKELY(!(block= buf_read_acquire())))
459+
goto skip;
460+
}
461+
else if (recv_recovery_is_on())
462+
{
463+
zip_size|= 1;
464+
goto allocate_block;
465+
}
441466

442467
if (buf_read_page_low(page_id, zip_size, chain, space, block) ==
443468
DB_SUCCESS)
@@ -584,8 +609,17 @@ ulint buf_read_ahead_linear(const page_id_t page_id, ulint zip_size)
584609

585610
/* If we got this far, read-ahead can be sensible: do it */
586611
buf_block_t *block= nullptr;
587-
if (!zip_size && !(block= buf_read_acquire()))
588-
goto fail;
612+
if (UNIV_LIKELY(!zip_size))
613+
{
614+
allocate_block:
615+
if (UNIV_UNLIKELY(!(block= buf_read_acquire())))
616+
goto fail;
617+
}
618+
else if (recv_recovery_is_on())
619+
{
620+
zip_size|= 1;
621+
goto allocate_block;
622+
}
589623

590624
count= 0;
591625
for (; new_low != new_high_1; ++new_low)
@@ -599,7 +633,8 @@ ulint buf_read_ahead_linear(const page_id_t page_id, ulint zip_size)
599633
{
600634
count++;
601635
ut_ad(!block);
602-
if (!zip_size && !(block= buf_read_acquire()))
636+
if ((UNIV_LIKELY(!zip_size) || (zip_size & 1)) &&
637+
UNIV_UNLIKELY(!(block= buf_read_acquire())))
603638
break;
604639
}
605640
}

0 commit comments

Comments
 (0)