Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
f3eea3fd
Commit
f3eea3fd
authored
Dec 17, 2012
by
Bill Qu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Approved by Jimmy and Inaam. rb#1576
parent
7e6e5e5a
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
138 additions
and
15 deletions
+138
-15
storage/innobase/buf/buf0buf.c
storage/innobase/buf/buf0buf.c
+35
-7
storage/innobase/buf/buf0flu.c
storage/innobase/buf/buf0flu.c
+24
-0
storage/innobase/buf/buf0lru.c
storage/innobase/buf/buf0lru.c
+39
-3
storage/innobase/handler/ha_innodb.cc
storage/innobase/handler/ha_innodb.cc
+4
-0
storage/innobase/include/buf0buf.h
storage/innobase/include/buf0buf.h
+19
-0
storage/innobase/include/buf0lru.h
storage/innobase/include/buf0lru.h
+4
-1
storage/innobase/include/srv0srv.h
storage/innobase/include/srv0srv.h
+2
-0
storage/innobase/srv/srv0srv.c
storage/innobase/srv/srv0srv.c
+11
-4
No files found.
storage/innobase/buf/buf0buf.c
View file @
f3eea3fd
...
...
@@ -369,6 +369,33 @@ buf_get_total_list_len(
}
}
/********************************************************************//**
Get total list size in bytes from all buffer pools. */
UNIV_INTERN
void
buf_get_total_list_size_in_bytes
(
/*=============================*/
buf_pools_list_size_t
*
buf_pools_list_size
)
/*!< out: list sizes
in all buffer pools */
{
ulint
i
;
ut_ad
(
buf_pools_list_size
);
memset
(
buf_pools_list_size
,
0
,
sizeof
(
*
buf_pools_list_size
));
for
(
i
=
0
;
i
<
srv_buf_pool_instances
;
i
++
)
{
buf_pool_t
*
buf_pool
;
buf_pool
=
buf_pool_from_array
(
i
);
/* We don't need mutex protection since this is
for statistics purpose */
buf_pools_list_size
->
LRU_bytes
+=
buf_pool
->
stat
.
LRU_bytes
;
buf_pools_list_size
->
unzip_LRU_bytes
+=
UT_LIST_GET_LEN
(
buf_pool
->
unzip_LRU
)
*
UNIV_PAGE_SIZE
;
buf_pools_list_size
->
flush_list_bytes
+=
buf_pool
->
stat
.
flush_list_bytes
;
}
}
/********************************************************************//**
Get total buffer pool statistics. */
UNIV_INTERN
...
...
@@ -2951,6 +2978,7 @@ buf_page_init(
ulint
offset
,
/*!< in: offset of the page within space
in units of a page */
ulint
fold
,
/*!< in: buf_page_address_fold(space,offset) */
ulint
zip_size
,
/*!< in: compressed page size, or 0 */
buf_block_t
*
block
)
/*!< in/out: block to init */
{
buf_page_t
*
hash_page
;
...
...
@@ -3013,6 +3041,9 @@ buf_page_init(
ut_d
(
block
->
page
.
in_page_hash
=
TRUE
);
HASH_INSERT
(
buf_page_t
,
hash
,
buf_pool
->
page_hash
,
fold
,
&
block
->
page
);
if
(
zip_size
)
{
page_zip_set_size
(
&
block
->
page
.
zip
,
zip_size
);
}
}
/********************************************************************//**
...
...
@@ -3114,7 +3145,7 @@ err_exit:
ut_ad
(
buf_pool_from_bpage
(
bpage
)
==
buf_pool
);
buf_page_init
(
buf_pool
,
space
,
offset
,
fold
,
block
);
buf_page_init
(
buf_pool
,
space
,
offset
,
fold
,
zip_size
,
block
);
/* The block must be put to the LRU list, to the old blocks */
buf_LRU_add_block
(
bpage
,
TRUE
/* to old blocks */
);
...
...
@@ -3132,8 +3163,6 @@ err_exit:
buf_page_set_io_fix
(
bpage
,
BUF_IO_READ
);
if
(
UNIV_UNLIKELY
(
zip_size
))
{
page_zip_set_size
(
&
block
->
page
.
zip
,
zip_size
);
/* buf_pool->mutex may be released and
reacquired by buf_buddy_alloc(). Thus, we
must release block->mutex in order not to
...
...
@@ -3226,7 +3255,8 @@ err_exit:
HASH_INSERT
(
buf_page_t
,
hash
,
buf_pool
->
page_hash
,
fold
,
bpage
);
/* The block must be put to the LRU list, to the old blocks */
/* The block must be put to the LRU list, to the old blocks
The zip_size is already set into the page zip */
buf_LRU_add_block
(
bpage
,
TRUE
/* to old blocks */
);
#if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
buf_LRU_insert_zip_clean
(
bpage
);
...
...
@@ -3317,7 +3347,7 @@ buf_page_create(
mutex_enter
(
&
block
->
mutex
);
buf_page_init
(
buf_pool
,
space
,
offset
,
fold
,
block
);
buf_page_init
(
buf_pool
,
space
,
offset
,
fold
,
zip_size
,
block
);
/* The block must be put to the LRU list */
buf_LRU_add_block
(
&
block
->
page
,
FALSE
);
...
...
@@ -3335,8 +3365,6 @@ buf_page_create(
buf_page_set_io_fix
(
&
block
->
page
,
BUF_IO_READ
);
rw_lock_x_lock
(
&
block
->
lock
);
page_zip_set_size
(
&
block
->
page
.
zip
,
zip_size
);
mutex_exit
(
&
block
->
mutex
);
/* buf_pool->mutex may be released and reacquired by
buf_buddy_alloc(). Thus, we must release block->mutex
...
...
storage/innobase/buf/buf0flu.c
View file @
f3eea3fd
...
...
@@ -79,6 +79,23 @@ static ulint buf_lru_flush_page_count = 0;
/* @} */
/******************************************************************//**
Increases flush_list size in bytes with zip_size for compressed page,
UNIV_PAGE_SIZE for uncompressed page in inline function */
static
inline
void
incr_flush_list_size_in_bytes
(
/*==========================*/
buf_block_t
*
block
,
/*!< in: control block */
buf_pool_t
*
buf_pool
)
/*!< in: buffer pool instance */
{
ulint
zip_size
;
ut_ad
(
buf_flush_list_mutex_own
(
buf_pool
));
zip_size
=
page_zip_get_size
(
&
block
->
page
.
zip
);
buf_pool
->
stat
.
flush_list_bytes
+=
zip_size
?
zip_size
:
UNIV_PAGE_SIZE
;
ut_ad
(
buf_pool
->
stat
.
flush_list_bytes
<=
buf_pool
->
curr_pool_size
);
}
#if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
/******************************************************************//**
Validates the flush list.
...
...
@@ -308,6 +325,7 @@ buf_flush_insert_into_flush_list(
ut_d
(
block
->
page
.
in_flush_list
=
TRUE
);
block
->
page
.
oldest_modification
=
lsn
;
UT_LIST_ADD_FIRST
(
list
,
buf_pool
->
flush_list
,
&
block
->
page
);
incr_flush_list_size_in_bytes
(
block
,
buf_pool
);
#ifdef UNIV_DEBUG_VALGRIND
{
...
...
@@ -412,6 +430,8 @@ buf_flush_insert_sorted_into_flush_list(
prev_b
,
&
block
->
page
);
}
incr_flush_list_size_in_bytes
(
block
,
buf_pool
);
#if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
ut_a
(
buf_flush_validate_low
(
buf_pool
));
#endif
/* UNIV_DEBUG || UNIV_BUF_DEBUG */
...
...
@@ -504,6 +524,7 @@ buf_flush_remove(
buf_page_t
*
bpage
)
/*!< in: pointer to the block in question */
{
buf_pool_t
*
buf_pool
=
buf_pool_from_bpage
(
bpage
);
ulint
zip_size
;
ut_ad
(
buf_pool_mutex_own
(
buf_pool
));
ut_ad
(
mutex_own
(
buf_page_get_mutex
(
bpage
)));
...
...
@@ -542,6 +563,9 @@ buf_flush_remove(
because we assert on in_flush_list in comparison function. */
ut_d
(
bpage
->
in_flush_list
=
FALSE
);
zip_size
=
page_zip_get_size
(
&
bpage
->
zip
);
buf_pool
->
stat
.
flush_list_bytes
-=
zip_size
?
zip_size
:
UNIV_PAGE_SIZE
;
bpage
->
oldest_modification
=
0
;
#if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
...
...
storage/innobase/buf/buf0lru.c
View file @
f3eea3fd
...
...
@@ -150,6 +150,23 @@ buf_LRU_block_free_hashed_page(
buf_block_t
*
block
);
/*!< in: block, must contain a file page and
be in a state where it can be freed */
/******************************************************************//**
Increases LRU size in bytes with zip_size for compressed page,
UNIV_PAGE_SIZE for uncompressed page in inline function */
static
inline
void
incr_LRU_size_in_bytes
(
/*===================*/
buf_page_t
*
bpage
,
/*!< in: control block */
buf_pool_t
*
buf_pool
)
/*!< in: buffer pool instance */
{
ulint
zip_size
;
ut_ad
(
buf_pool_mutex_own
(
buf_pool
));
zip_size
=
page_zip_get_size
(
&
bpage
->
zip
);
buf_pool
->
stat
.
LRU_bytes
+=
zip_size
?
zip_size
:
UNIV_PAGE_SIZE
;
ut_ad
(
buf_pool
->
stat
.
LRU_bytes
<=
buf_pool
->
curr_pool_size
);
}
/******************************************************************//**
Determines if the unzip_LRU list should be used for evicting a victim
instead of the general LRU list.
...
...
@@ -1356,6 +1373,7 @@ buf_LRU_remove_block(
buf_page_t
*
bpage
)
/*!< in: control block */
{
buf_pool_t
*
buf_pool
=
buf_pool_from_bpage
(
bpage
);
ulint
zip_size
;
ut_ad
(
buf_pool
);
ut_ad
(
bpage
);
...
...
@@ -1391,6 +1409,9 @@ buf_LRU_remove_block(
UT_LIST_REMOVE
(
LRU
,
buf_pool
->
LRU
,
bpage
);
ut_d
(
bpage
->
in_LRU_list
=
FALSE
);
zip_size
=
page_zip_get_size
(
&
bpage
->
zip
);
buf_pool
->
stat
.
LRU_bytes
-=
zip_size
?
zip_size
:
UNIV_PAGE_SIZE
;
buf_unzip_LRU_remove_block_if_needed
(
bpage
);
/* If the LRU list is so short that LRU_old is not defined,
...
...
@@ -1451,7 +1472,10 @@ buf_unzip_LRU_add_block(
}
/******************************************************************//**
Adds a block to the LRU list end. */
Adds a block to the LRU list end. Please make sure that the zip_size is
already set into the page zip when invoking the function, so that we
can get correct zip_size from the buffer page when adding a block
into LRU */
UNIV_INLINE
void
buf_LRU_add_block_to_end_low
(
...
...
@@ -1470,6 +1494,8 @@ buf_LRU_add_block_to_end_low(
UT_LIST_ADD_LAST
(
LRU
,
buf_pool
->
LRU
,
bpage
);
ut_d
(
bpage
->
in_LRU_list
=
TRUE
);
incr_LRU_size_in_bytes
(
bpage
,
buf_pool
);
if
(
UT_LIST_GET_LEN
(
buf_pool
->
LRU
)
>
BUF_LRU_OLD_MIN_LEN
)
{
ut_ad
(
buf_pool
->
LRU_old
);
...
...
@@ -1498,7 +1524,10 @@ buf_LRU_add_block_to_end_low(
}
/******************************************************************//**
Adds a block to the LRU list. */
Adds a block to the LRU list. Please make sure that the zip_size is
already set into the page zip when invoking the function, so that we
can get correct zip_size from the buffer page when adding a block
into LRU */
UNIV_INLINE
void
buf_LRU_add_block_low
(
...
...
@@ -1540,6 +1569,8 @@ buf_LRU_add_block_low(
ut_d
(
bpage
->
in_LRU_list
=
TRUE
);
incr_LRU_size_in_bytes
(
bpage
,
buf_pool
);
if
(
UT_LIST_GET_LEN
(
buf_pool
->
LRU
)
>
BUF_LRU_OLD_MIN_LEN
)
{
ut_ad
(
buf_pool
->
LRU_old
);
...
...
@@ -1567,7 +1598,10 @@ buf_LRU_add_block_low(
}
/******************************************************************//**
Adds a block to the LRU list. */
Adds a block to the LRU list. Please make sure that the zip_size is
already set into the page zip when invoking the function, so that we
can get correct zip_size from the buffer page when adding a block
into LRU */
UNIV_INTERN
void
buf_LRU_add_block
(
...
...
@@ -1753,6 +1787,8 @@ alloc:
UT_LIST_INSERT_AFTER
(
LRU
,
buf_pool
->
LRU
,
prev_b
,
b
);
incr_LRU_size_in_bytes
(
b
,
buf_pool
);
if
(
buf_page_is_old
(
b
))
{
buf_pool
->
LRU_old_len
++
;
if
(
UNIV_UNLIKELY
...
...
storage/innobase/handler/ha_innodb.cc
View file @
f3eea3fd
...
...
@@ -601,8 +601,12 @@ innobase_commit_low(
static
SHOW_VAR
innodb_status_variables
[]
=
{
{
"buffer_pool_pages_data"
,
(
char
*
)
&
export_vars
.
innodb_buffer_pool_pages_data
,
SHOW_LONG
},
{
"buffer_pool_bytes_data"
,
(
char
*
)
&
export_vars
.
innodb_buffer_pool_bytes_data
,
SHOW_LONG
},
{
"buffer_pool_pages_dirty"
,
(
char
*
)
&
export_vars
.
innodb_buffer_pool_pages_dirty
,
SHOW_LONG
},
{
"buffer_pool_bytes_dirty"
,
(
char
*
)
&
export_vars
.
innodb_buffer_pool_bytes_dirty
,
SHOW_LONG
},
{
"buffer_pool_pages_flushed"
,
(
char
*
)
&
export_vars
.
innodb_buffer_pool_pages_flushed
,
SHOW_LONG
},
{
"buffer_pool_pages_free"
,
...
...
storage/innobase/include/buf0buf.h
View file @
f3eea3fd
...
...
@@ -198,6 +198,15 @@ struct buf_pool_info_struct{
typedef
struct
buf_pool_info_struct
buf_pool_info_t
;
/** The occupied bytes of lists in all buffer pools */
struct
buf_pools_list_size_struct
{
ulint
LRU_bytes
;
/*!< LRU size in bytes */
ulint
unzip_LRU_bytes
;
/*!< unzip_LRU size in bytes */
ulint
flush_list_bytes
;
/*!< flush_list size in bytes */
};
typedef
struct
buf_pools_list_size_struct
buf_pools_list_size_t
;
#ifndef UNIV_HOTBACKUP
/********************************************************************//**
Acquire mutex on all buffer pool instances */
...
...
@@ -1333,6 +1342,14 @@ buf_get_total_list_len(
ulint
*
free_len
,
/*!< out: length of all free lists */
ulint
*
flush_list_len
);
/*!< out: length of all flush lists */
/********************************************************************//**
Get total list size in bytes from all buffer pools. */
UNIV_INTERN
void
buf_get_total_list_size_in_bytes
(
/*=============================*/
buf_pools_list_size_t
*
buf_pools_list_size
);
/*!< out: list sizes
in all buffer pools */
/********************************************************************//**
Get total buffer pool statistics. */
UNIV_INTERN
void
...
...
@@ -1685,6 +1702,8 @@ struct buf_pool_stat_struct{
young because the first access
was not long enough ago, in
buf_page_peek_if_too_old() */
ulint
LRU_bytes
;
/*!< LRU size in bytes */
ulint
flush_list_bytes
;
/*!< flush_list size in bytes */
};
/** Statistics of buddy blocks of a given size. */
...
...
storage/innobase/include/buf0lru.h
View file @
f3eea3fd
...
...
@@ -149,7 +149,10 @@ buf_LRU_block_free_non_file_page(
/*=============================*/
buf_block_t
*
block
);
/*!< in: block, must not contain a file page */
/******************************************************************//**
Adds a block to the LRU list. */
Adds a block to the LRU list. Please make sure that the zip_size is
already set into the page zip when invoking the function, so that we
can get correct zip_size from the buffer page when adding a block
into LRU */
UNIV_INTERN
void
buf_LRU_add_block
(
...
...
storage/innobase/include/srv0srv.h
View file @
f3eea3fd
...
...
@@ -707,7 +707,9 @@ struct export_var_struct{
ulint
innodb_data_reads
;
/*!< I/O read requests */
ulint
innodb_buffer_pool_pages_total
;
/*!< Buffer pool size */
ulint
innodb_buffer_pool_pages_data
;
/*!< Data pages */
ulint
innodb_buffer_pool_bytes_data
;
/*!< File bytes used */
ulint
innodb_buffer_pool_pages_dirty
;
/*!< Dirty data pages */
ulint
innodb_buffer_pool_bytes_dirty
;
/*!< File bytes modified */
ulint
innodb_buffer_pool_pages_misc
;
/*!< Miscellanous pages */
ulint
innodb_buffer_pool_pages_free
;
/*!< Free pages */
#ifdef UNIV_DEBUG
...
...
storage/innobase/srv/srv0srv.c
View file @
f3eea3fd
...
...
@@ -2016,13 +2016,15 @@ void
srv_export_innodb_status
(
void
)
/*==========================*/
{
buf_pool_stat_t
stat
;
ulint
LRU_len
;
ulint
free_len
;
ulint
flush_list_len
;
buf_pool_stat_t
stat
;
buf_pools_list_size_t
buf_pools_list_size
;
ulint
LRU_len
;
ulint
free_len
;
ulint
flush_list_len
;
buf_get_total_stat
(
&
stat
);
buf_get_total_list_len
(
&
LRU_len
,
&
free_len
,
&
flush_list_len
);
buf_get_total_list_size_in_bytes
(
&
buf_pools_list_size
);
mutex_enter
(
&
srv_innodb_monitor_mutex
);
...
...
@@ -2051,7 +2053,12 @@ srv_export_innodb_status(void)
export_vars
.
innodb_buffer_pool_read_ahead_evicted
=
stat
.
n_ra_pages_evicted
;
export_vars
.
innodb_buffer_pool_pages_data
=
LRU_len
;
export_vars
.
innodb_buffer_pool_bytes_data
=
buf_pools_list_size
.
LRU_bytes
+
buf_pools_list_size
.
unzip_LRU_bytes
;
export_vars
.
innodb_buffer_pool_pages_dirty
=
flush_list_len
;
export_vars
.
innodb_buffer_pool_bytes_dirty
=
buf_pools_list_size
.
flush_list_bytes
;
export_vars
.
innodb_buffer_pool_pages_free
=
free_len
;
#ifdef UNIV_DEBUG
export_vars
.
innodb_buffer_pool_pages_latched
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment