summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2020-02-07 11:55:33 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2020-02-07 12:07:12 +0200
commit9a999469f7755f4e91e28c0854b62fe0b2a287ca (patch)
treee383830b5cee369959c12adeb87194dfee427a07
parent8b6cfda631253c805687d94f2f1aaa17fd2ef0e2 (diff)
downloadmariadb-git-9a999469f7755f4e91e28c0854b62fe0b2a287ca.tar.gz
Cleanup: Recude sizeof(mtr_t)
Use bit-fields for some mtr_t members to improve locality of reference. Because mtr_t is never shared between threads, there are no considerations regarding concurrent access.
-rw-r--r--storage/innobase/include/mtr0mtr.h100
-rw-r--r--storage/innobase/include/mtr0mtr.ic17
2 files changed, 51 insertions, 66 deletions
diff --git a/storage/innobase/include/mtr0mtr.h b/storage/innobase/include/mtr0mtr.h
index f4e75fff35c..cab919a48ca 100644
--- a/storage/innobase/include/mtr0mtr.h
+++ b/storage/innobase/include/mtr0mtr.h
@@ -161,10 +161,13 @@ struct mtr_t {
/** X-latch a not yet latched block after a savepoint. */
inline void x_latch_at_savepoint(ulint savepoint, buf_block_t* block);
- /** Get the logging mode.
- @return logging mode */
- inline mtr_log_t get_log_mode() const
- MY_ATTRIBUTE((warn_unused_result));
+ /** @return the logging mode */
+ mtr_log_t get_log_mode() const
+ {
+ ut_ad(m_log_mode >= MTR_LOG_ALL);
+ ut_ad(m_log_mode <= MTR_LOG_SHORT_INSERTS);
+ return static_cast<mtr_log_t>(m_log_mode);
+ }
/** Change the logging mode.
@param mode logging mode
@@ -302,31 +305,26 @@ struct mtr_t {
@param[in] type object type: MTR_MEMO_PAGE_X_FIX, ... */
void release_page(const void* ptr, mtr_memo_type_t type);
- /** Note that the mini-transaction has modified data. */
- void set_modified() { m_modifications = true; }
+ /** Note that the mini-transaction has modified data. */
+ void set_modified() { m_modifications = true; }
- /** Set the state to not-modified. This will not log the
- changes. This is only used during redo log apply, to avoid
- logging the changes. */
- void discard_modifications() { m_modifications = false; }
+ /** Set the state to not-modified. This will not log the changes.
+ This is only used during redo log apply, to avoid logging the changes. */
+ void discard_modifications() { m_modifications = false; }
- /** Get the LSN of commit().
- @return the commit LSN
- @retval 0 if the transaction only modified temporary tablespaces */
- lsn_t commit_lsn() const
- {
- ut_ad(has_committed());
- return(m_commit_lsn);
- }
+ /** Get the LSN of commit().
+ @return the commit LSN
+ @retval 0 if the transaction only modified temporary tablespaces */
+ lsn_t commit_lsn() const { ut_ad(has_committed()); return m_commit_lsn; }
- /** Note that we are inside the change buffer code. */
- void enter_ibuf() { m_inside_ibuf = true; }
+ /** Note that we are inside the change buffer code. */
+ void enter_ibuf() { m_inside_ibuf= true; }
- /** Note that we have exited from the change buffer code. */
- void exit_ibuf() { m_inside_ibuf = false; }
+ /** Note that we have exited from the change buffer code. */
+ void exit_ibuf() { m_inside_ibuf= false; }
- /** @return true if we are inside the change buffer code */
- bool is_inside_ibuf() const { return m_inside_ibuf; }
+ /** @return true if we are inside the change buffer code */
+ bool is_inside_ibuf() const { return m_inside_ibuf; }
/** Get flush observer
@return flush observer */
@@ -500,41 +498,41 @@ private:
bool m_commit= false;
#endif
- /** memo stack for locks etc. */
- mtr_buf_t m_memo;
-
- /** mini-transaction log */
- mtr_buf_t m_log;
+ /** specifies which operations should be logged; default MTR_LOG_ALL */
+ uint16_t m_log_mode:2;
- /** true if mtr has made at least one buffer pool page dirty */
- bool m_made_dirty;
+ /** whether at least one buffer pool page was written to */
+ uint16_t m_modifications:1;
- /** true if inside ibuf changes */
- bool m_inside_ibuf;
+ /** whether at least one previously clean buffer pool page was written to */
+ uint16_t m_made_dirty:1;
- /** true if the mini-transaction modified buffer pool pages */
- bool m_modifications;
+ /** whether change buffer is latched; only needed in non-debug builds
+ to suppress some read-ahead operations, @see ibuf_inside() */
+ uint16_t m_inside_ibuf:1;
- /** Count of how many page initial log records have been
- written to the mtr log */
- ib_uint32_t m_n_log_recs;
-
- /** specifies which operations should be logged; default
- value MTR_LOG_ALL */
- mtr_log_t m_log_mode;
+ /** number of m_log records */
+ uint16_t m_n_log_recs:13;
#ifdef UNIV_DEBUG
- /** Persistent user tablespace associated with the
- mini-transaction, or 0 (TRX_SYS_SPACE) if none yet */
- ulint m_user_space_id;
+ /** Persistent user tablespace associated with the
+ mini-transaction, or 0 (TRX_SYS_SPACE) if none yet */
+ uint32_t m_user_space_id;
#endif /* UNIV_DEBUG */
- /** User tablespace that is being modified by the mini-transaction */
- fil_space_t* m_user_space;
- /** Flush Observer */
- FlushObserver* m_flush_observer;
+ /** acquired dict_index_t::lock, fil_space_t::latch, buf_block_t */
+ mtr_buf_t m_memo;
+
+ /** mini-transaction log */
+ mtr_buf_t m_log;
+
+ /** user tablespace that is being modified by the mini-transaction */
+ fil_space_t* m_user_space;
+
+ /** page flush observer for innodb_log_optimize_ddl=ON */
+ FlushObserver *m_flush_observer;
- /** LSN at commit time */
- lsn_t m_commit_lsn;
+ /** LSN at commit time */
+ lsn_t m_commit_lsn;
};
#include "mtr0mtr.ic"
diff --git a/storage/innobase/include/mtr0mtr.ic b/storage/innobase/include/mtr0mtr.ic
index 0fe56f960b7..b656b969e3f 100644
--- a/storage/innobase/include/mtr0mtr.ic
+++ b/storage/innobase/include/mtr0mtr.ic
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1995, 2014, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2017, 2019, MariaDB Corporation.
+Copyright (c) 2017, 2020, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -178,19 +178,6 @@ mtr_t::release_block_at_savepoint(
}
/**
-Gets the logging mode of a mini-transaction.
-@return logging mode: MTR_LOG_NONE, ... */
-
-mtr_log_t
-mtr_t::get_log_mode() const
-{
- ut_ad(m_log_mode >= MTR_LOG_ALL);
- ut_ad(m_log_mode <= MTR_LOG_SHORT_INSERTS);
-
- return m_log_mode;
-}
-
-/**
Changes the logging mode of a mini-transaction.
@return old mode */
@@ -200,7 +187,7 @@ mtr_t::set_log_mode(mtr_log_t mode)
ut_ad(mode >= MTR_LOG_ALL);
ut_ad(mode <= MTR_LOG_SHORT_INSERTS);
- const mtr_log_t old_mode = m_log_mode;
+ const mtr_log_t old_mode = get_log_mode();
switch (old_mode) {
case MTR_LOG_NO_REDO: