diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2023-03-23 12:38:46 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2023-03-23 12:38:46 +0200 |
commit | 9aa098c46b422149b0459e817a76aa058a7be08c (patch) | |
tree | 963fad9d5107982e6f4492eb6832134f83d2b3a3 | |
parent | 22392b36ee84f1c08495eb59ece87d8d1df337ef (diff) | |
parent | 92772485b75045501fef4f26d0e6514e9042116b (diff) | |
download | mariadb-git-9aa098c46b422149b0459e817a76aa058a7be08c.tar.gz |
Merge 11.0 into 11.1
-rw-r--r-- | mysql-test/main/selectivity_innodb.result | 2 | ||||
-rw-r--r-- | mysql-test/main/selectivity_innodb.test | 2 | ||||
-rw-r--r-- | storage/innobase/buf/buf0rea.cc | 51 |
3 files changed, 45 insertions, 10 deletions
diff --git a/mysql-test/main/selectivity_innodb.result b/mysql-test/main/selectivity_innodb.result index 9d6ac0b61ba..03e5079eff0 100644 --- a/mysql-test/main/selectivity_innodb.result +++ b/mysql-test/main/selectivity_innodb.result @@ -2329,7 +2329,7 @@ CREATE TABLE t1 (c INT KEY) ENGINE=InnoDB; 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; c c DROP TABLE t1; -SET optimizer_use_condition_selectivity=1; +SET optimizer_use_condition_selectivity=@tmp_oucs; # # End of 11.0 tests # diff --git a/mysql-test/main/selectivity_innodb.test b/mysql-test/main/selectivity_innodb.test index efdb3c1853b..f8ffca7309e 100644 --- a/mysql-test/main/selectivity_innodb.test +++ b/mysql-test/main/selectivity_innodb.test @@ -289,7 +289,7 @@ set @tmp_oucs= @@optimizer_use_condition_selectivity; CREATE TABLE t1 (c INT KEY) ENGINE=InnoDB; 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; DROP TABLE t1; -SET optimizer_use_condition_selectivity=1; +SET optimizer_use_condition_selectivity=@tmp_oucs; --echo # --echo # End of 11.0 tests diff --git a/storage/innobase/buf/buf0rea.cc b/storage/innobase/buf/buf0rea.cc index bbd905365ed..7dab411dabb 100644 --- a/storage/innobase/buf/buf0rea.cc +++ b/storage/innobase/buf/buf0rea.cc @@ -341,8 +341,17 @@ read_ahead: /* Read all the suitable blocks within the area */ buf_block_t *block= nullptr; - if (!zip_size && !(block= buf_read_acquire())) - goto no_read_ahead; + if (UNIV_LIKELY(!zip_size)) + { + allocate_block: + if (UNIV_UNLIKELY(!(block= buf_read_acquire()))) + goto no_read_ahead; + } + else if (recv_recovery_is_on()) + { + zip_size|= 1; + goto allocate_block; + } for (page_id_t i= low; i < high; ++i) { @@ -354,7 +363,8 @@ read_ahead: { count++; ut_ad(!block); - if (!zip_size && !(block= buf_read_acquire())) + if ((UNIV_LIKELY(!zip_size) || (zip_size & 1)) && + UNIV_UNLIKELY(!(block= buf_read_acquire()))) break; } } @@ -406,11 +416,17 @@ dberr_t buf_read_page(const page_id_t page_id, ulint zip_size, buf_block_t *block= nullptr; if (UNIV_LIKELY(!zip_size)) { + allocate_block: mysql_mutex_lock(&buf_pool.mutex); buf_LRU_stat_inc_io(); block= buf_LRU_get_free_block(have_mutex); mysql_mutex_unlock(&buf_pool.mutex); } + else if (recv_recovery_is_on()) + { + zip_size|= 1; + goto allocate_block; + } dberr_t err= buf_read_page_low(page_id, zip_size, chain, space, block, true); buf_read_release(block); @@ -436,8 +452,17 @@ void buf_read_page_background(fil_space_t *space, const page_id_t page_id, } buf_block_t *block= nullptr; - if (!zip_size && !(block= buf_read_acquire())) - goto skip; + if (UNIV_LIKELY(!zip_size)) + { + allocate_block: + if (UNIV_UNLIKELY(!(block= buf_read_acquire()))) + goto skip; + } + else if (recv_recovery_is_on()) + { + zip_size|= 1; + goto allocate_block; + } if (buf_read_page_low(page_id, zip_size, chain, space, block) == DB_SUCCESS) @@ -584,8 +609,17 @@ failed: /* If we got this far, read-ahead can be sensible: do it */ buf_block_t *block= nullptr; - if (!zip_size && !(block= buf_read_acquire())) - goto fail; + if (UNIV_LIKELY(!zip_size)) + { + allocate_block: + if (UNIV_UNLIKELY(!(block= buf_read_acquire()))) + goto fail; + } + else if (recv_recovery_is_on()) + { + zip_size|= 1; + goto allocate_block; + } count= 0; for (; new_low != new_high_1; ++new_low) @@ -599,7 +633,8 @@ failed: { count++; ut_ad(!block); - if (!zip_size && !(block= buf_read_acquire())) + if ((UNIV_LIKELY(!zip_size) || (zip_size & 1)) && + UNIV_UNLIKELY(!(block= buf_read_acquire()))) break; } } |