diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-07-03 14:54:46 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-07-03 14:54:46 +0300 |
commit | b797f217a3c908c180bbfda9c22b2c7b2815947c (patch) | |
tree | e9d7adad5afe11511b5fbe47aa653aeea19a7a1a /storage/innobase/buf | |
parent | 9ec3cd9af0d0667c7751be7779452214a4e4ce0c (diff) | |
parent | f0f47cbca18232e279ec27c6fe843f475626cfec (diff) | |
download | mariadb-git-b797f217a3c908c180bbfda9c22b2c7b2815947c.tar.gz |
Merge 10.5 into 10.6
Diffstat (limited to 'storage/innobase/buf')
-rw-r--r-- | storage/innobase/buf/buf0buf.cc | 90 | ||||
-rw-r--r-- | storage/innobase/buf/buf0flu.cc | 4 |
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; |