diff options
Diffstat (limited to 'storage/innobase/include/page0types.h')
-rw-r--r-- | storage/innobase/include/page0types.h | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/storage/innobase/include/page0types.h b/storage/innobase/include/page0types.h index da2ac1c7de2..533b0d3cf98 100644 --- a/storage/innobase/include/page0types.h +++ b/storage/innobase/include/page0types.h @@ -26,6 +26,10 @@ Created 2/2/1994 Heikki Tuuri #ifndef page0types_h #define page0types_h +using namespace std; + +#include <map> + #include "univ.i" #include "dict0types.h" #include "mtr0types.h" @@ -35,12 +39,12 @@ Created 2/2/1994 Heikki Tuuri /** Type of the index page */ typedef byte page_t; /** Index page cursor */ -typedef struct page_cur_struct page_cur_t; +struct page_cur_t; /** Compressed index page */ typedef byte page_zip_t; /** Compressed page descriptor */ -typedef struct page_zip_des_struct page_zip_des_t; +struct page_zip_des_t; /* The following definitions would better belong to page0zip.h, but we cannot include page0zip.h from rem0rec.ic, because @@ -60,12 +64,14 @@ ssize, which is the number of shifts from 512. */ #endif /** Compressed page descriptor */ -struct page_zip_des_struct +struct page_zip_des_t { page_zip_t* data; /*!< compressed page data */ #ifdef UNIV_DEBUG unsigned m_start:16; /*!< start offset of modification log */ + bool m_external; /*!< Allocated externally, not from the + buffer pool */ #endif /* UNIV_DEBUG */ unsigned m_end:16; /*!< end offset of modification log */ unsigned m_nonempty:1; /*!< TRUE if the modification log @@ -80,7 +86,7 @@ struct page_zip_des_struct }; /** Compression statistics for a given page size */ -struct page_zip_stat_struct { +struct page_zip_stat_t { /** Number of page compressions */ ulint compressed; /** Number of successful page compressions */ @@ -91,13 +97,29 @@ struct page_zip_stat_struct { ib_uint64_t compressed_usec; /** Duration of page decompressions in microseconds */ ib_uint64_t decompressed_usec; + page_zip_stat_t() : + /* Initialize members to 0 so that when we do + stlmap[key].compressed++ and element with "key" does not + exist it gets inserted with zeroed members. */ + compressed(0), + compressed_ok(0), + decompressed(0), + compressed_usec(0), + decompressed_usec(0) + { } }; -/** Compression statistics */ -typedef struct page_zip_stat_struct page_zip_stat_t; - -/** Statistics on compression, indexed by page_zip_des_struct::ssize - 1 */ -extern page_zip_stat_t page_zip_stat[PAGE_ZIP_SSIZE_MAX]; +/** Compression statistics types */ +typedef map<index_id_t, page_zip_stat_t> page_zip_stat_per_index_t; + +/** Statistics on compression, indexed by page_zip_des_t::ssize - 1 */ +extern page_zip_stat_t page_zip_stat[PAGE_ZIP_SSIZE_MAX]; +/** Statistics on compression, indexed by dict_index_t::id */ +extern page_zip_stat_per_index_t page_zip_stat_per_index; +extern ib_mutex_t page_zip_stat_per_index_mutex; +#ifdef HAVE_PSI_INTERFACE +extern mysql_pfs_key_t page_zip_stat_per_index_mutex_key; +#endif /* HAVE_PSI_INTERFACE */ /**********************************************************************//** Write the "deleted" flag of a record on a compressed page. The flag must |