summaryrefslogtreecommitdiff
path: root/storage/innobase/buf
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-07-03 14:54:46 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2021-07-03 14:54:46 +0300
commitb797f217a3c908c180bbfda9c22b2c7b2815947c (patch)
treee9d7adad5afe11511b5fbe47aa653aeea19a7a1a /storage/innobase/buf
parent9ec3cd9af0d0667c7751be7779452214a4e4ce0c (diff)
parentf0f47cbca18232e279ec27c6fe843f475626cfec (diff)
downloadmariadb-git-b797f217a3c908c180bbfda9c22b2c7b2815947c.tar.gz
Merge 10.5 into 10.6
Diffstat (limited to 'storage/innobase/buf')
-rw-r--r--storage/innobase/buf/buf0buf.cc90
-rw-r--r--storage/innobase/buf/buf0flu.cc4
2 files changed, 4 insertions, 90 deletions
diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc
index 7198efd923f..dcd45a9fdca 100644
--- a/storage/innobase/buf/buf0buf.cc
+++ b/storage/innobase/buf/buf0buf.cc
@@ -1296,13 +1296,6 @@ void buf_pool_t::close()
ut_free(chunks);
chunks= nullptr;
page_hash.free();
- while (page_hash_table *old_page_hash= freed_page_hash)
- {
- freed_page_hash= static_cast<page_hash_table*>
- (old_page_hash->array[1].node);
- old_page_hash->free();
- UT_DELETE(old_page_hash);
- }
zip_hash.free();
io_buf.close();
@@ -1581,57 +1574,6 @@ inline bool buf_pool_t::withdraw_blocks()
return(false);
}
-/** resize page_hash and zip_hash */
-inline void buf_pool_t::resize_hash()
-{
- page_hash_table *new_page_hash= UT_NEW_NOKEY(page_hash_table());
- new_page_hash->create(2 * buf_pool.curr_size);
- new_page_hash->write_lock_all();
-
- for (auto i= page_hash.pad(page_hash.n_cells); i--; )
- {
- static_assert(!((page_hash_table::ELEMENTS_PER_LATCH + 1) &
- page_hash_table::ELEMENTS_PER_LATCH),
- "must be one less than a power of 2");
- if (!(i & page_hash_table::ELEMENTS_PER_LATCH))
- {
- ut_ad(reinterpret_cast<page_hash_latch*>
- (&page_hash.array[i])->is_write_locked());
- continue;
- }
- while (buf_page_t *bpage= static_cast<buf_page_t*>
- (page_hash.array[i].node))
- {
- ut_ad(bpage->in_page_hash);
- const ulint fold= bpage->id().fold();
- HASH_DELETE(buf_page_t, hash, &buf_pool.page_hash, fold, bpage);
- HASH_INSERT(buf_page_t, hash, new_page_hash, fold, bpage);
- }
- }
-
- buf_pool.page_hash.array[1].node= freed_page_hash;
- std::swap(buf_pool.page_hash, *new_page_hash);
- freed_page_hash= new_page_hash;
-
- /* recreate zip_hash */
- hash_table_t new_hash;
- new_hash.create(2 * buf_pool.curr_size);
-
- for (ulint i= 0; i < buf_pool.zip_hash.n_cells; i++)
- {
- while (buf_page_t *bpage= static_cast<buf_page_t*>
- (HASH_GET_FIRST(&buf_pool.zip_hash, i)))
- {
- const ulint fold= BUF_POOL_ZIP_FOLD_BPAGE(bpage);
- HASH_DELETE(buf_page_t, hash, &buf_pool.zip_hash, fold, bpage);
- HASH_INSERT(buf_page_t, hash, &new_hash, fold, bpage);
- }
- }
-
- std::swap(buf_pool.zip_hash.array, new_hash.array);
- buf_pool.zip_hash.n_cells= new_hash.n_cells;
- new_hash.free();
-}
inline void buf_pool_t::page_hash_table::write_lock_all()
@@ -1656,26 +1598,6 @@ inline void buf_pool_t::page_hash_table::write_unlock_all()
}
-inline void buf_pool_t::write_lock_all_page_hash()
-{
- mysql_mutex_assert_owner(&mutex);
- page_hash.write_lock_all();
- for (page_hash_table *old_page_hash= freed_page_hash; old_page_hash;
- old_page_hash= static_cast<page_hash_table*>
- (old_page_hash->array[1].node))
- old_page_hash->write_lock_all();
-}
-
-
-inline void buf_pool_t::write_unlock_all_page_hash()
-{
- page_hash.write_unlock_all();
- for (page_hash_table *old_page_hash= freed_page_hash; old_page_hash;
- old_page_hash= static_cast<page_hash_table*>
- (old_page_hash->array[1].node))
- old_page_hash->write_unlock_all();
-}
-
namespace
{
@@ -1848,7 +1770,7 @@ withdraw_retry:
resizing.store(true, std::memory_order_relaxed);
mysql_mutex_lock(&mutex);
- write_lock_all_page_hash();
+ page_hash.write_lock_all();
chunk_t::map_reg = UT_NEW_NOKEY(chunk_t::map());
@@ -2004,16 +1926,8 @@ calc_buf_pool_size:
= srv_buf_pool_base_size > srv_buf_pool_size * 2
|| srv_buf_pool_base_size * 2 < srv_buf_pool_size;
- /* Normalize page_hash and zip_hash,
- if the new size is too different */
- if (!warning && new_size_too_diff) {
- buf_resize_status("Resizing hash table");
- resize_hash();
- ib::info() << "hash tables were resized";
- }
-
mysql_mutex_unlock(&mutex);
- write_unlock_all_page_hash();
+ page_hash.write_unlock_all();
UT_DELETE(chunk_map_old);
diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc
index 0717558eba6..94c62a304f9 100644
--- a/storage/innobase/buf/buf0flu.cc
+++ b/storage/innobase/buf/buf0flu.cc
@@ -305,7 +305,7 @@ buf_flush_relocate_on_flush_list(
/* FIXME: Can we avoid holding buf_pool.mutex here? */
ut_ad(dpage->oldest_modification() == lsn);
- if (const lsn_t o_lsn = bpage->oldest_modification()) {
+ if (ut_d(const lsn_t o_lsn =) bpage->oldest_modification()) {
ut_ad(o_lsn == lsn);
/* Important that we adjust the hazard pointer before removing
@@ -324,7 +324,7 @@ buf_flush_relocate_on_flush_list(
}
if (lsn == 1) {
- buf_pool.stat.flush_list_bytes -= bpage->physical_size();
+ buf_pool.stat.flush_list_bytes -= dpage->physical_size();
was_clean:
dpage->list.prev = nullptr;
dpage->list.next = nullptr;