summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2023-03-23 12:38:46 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2023-03-23 12:38:46 +0200
commit9aa098c46b422149b0459e817a76aa058a7be08c (patch)
tree963fad9d5107982e6f4492eb6832134f83d2b3a3
parent22392b36ee84f1c08495eb59ece87d8d1df337ef (diff)
parent92772485b75045501fef4f26d0e6514e9042116b (diff)
downloadmariadb-git-9aa098c46b422149b0459e817a76aa058a7be08c.tar.gz
Merge 11.0 into 11.1
-rw-r--r--mysql-test/main/selectivity_innodb.result2
-rw-r--r--mysql-test/main/selectivity_innodb.test2
-rw-r--r--storage/innobase/buf/buf0rea.cc51
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;
}
}