Merge lp:~laurynas-biveinis/percona-server/xtradb-af-lsn-age-tuning-5.6 into lp:percona-server/5.6

Proposed by Laurynas Biveinis
Status: Merged
Merged at revision: 452
Proposed branch: lp:~laurynas-biveinis/percona-server/xtradb-af-lsn-age-tuning-5.6
Merge into: lp:percona-server/5.6
Diff against target: 195 lines (+113/-4)
7 files modified
Percona-Server/mysql-test/suite/sys_vars/r/innodb_cleaner_lsn_age_factor_basic.result (+21/-0)
Percona-Server/mysql-test/suite/sys_vars/t/innodb_cleaner_lsn_age_factor_basic.test (+28/-0)
Percona-Server/storage/innobase/buf/buf0flu.cc (+16/-4)
Percona-Server/storage/innobase/handler/ha_innodb.cc (+25/-0)
Percona-Server/storage/innobase/include/buf0types.h (+15/-0)
Percona-Server/storage/innobase/include/srv0srv.h (+4/-0)
Percona-Server/storage/innobase/srv/srv0srv.cc (+4/-0)
To merge this branch: bzr merge lp:~laurynas-biveinis/percona-server/xtradb-af-lsn-age-tuning-5.6
Reviewer Review Type Date Requested Status
Sergei Glushchenko (community) g2 Approve
Vadim Tkachenko Pending
Laurynas Biveinis Pending
Review via email: mp+189020@code.launchpad.net

This proposal supersedes a proposal from 2013-10-03.

Description of the change

2nd MP:

Replaced the option with an enum with descriptive value names.
http://jenkins.percona.com/job/percona-server-5.6-param/340/

1st MP:

Add new LSN age factor formula for page cleaner adaptive flushing,
implementing
https://blueprints.launchpad.net/percona-server/+spec/af-lsn-age-tuning-5.6.

The formula choice is provided through a new ulong variable
innodb_cleaner_new_lsn_age_factor, defaulting to 1, which chooses the
new formula. The old formula is available through value 0. Other
values might be added in the future.

Add a sys_vars test for the new variable.

http://jenkins.percona.com/job/percona-server-5.6-param/335/

To post a comment you must log in.
Revision history for this message
Vadim Tkachenko (vadim-tk) wrote : Posted in a previous version of this proposal

for variable like innodb_cleaner_new_lsn_age_factor
I really prefer innodb_cleaner_lsn_age_factor = 'legacy' | 'advanced' or like that...

But if this is too hard to change at this moment, we can go with current implementation.

review: Needs Information
Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote : Posted in a previous version of this proposal

It was discussed on IRC and decided to go with 'legacy' | 'high_checkkpoint'

review: Needs Fixing
Revision history for this message
Sergei Glushchenko (sergei.glushchenko) wrote :

Approve

review: Approve (g2)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'Percona-Server/mysql-test/suite/sys_vars/r/innodb_cleaner_lsn_age_factor_basic.result'
2--- Percona-Server/mysql-test/suite/sys_vars/r/innodb_cleaner_lsn_age_factor_basic.result 1970-01-01 00:00:00 +0000
3+++ Percona-Server/mysql-test/suite/sys_vars/r/innodb_cleaner_lsn_age_factor_basic.result 2013-10-03 09:43:17 +0000
4@@ -0,0 +1,21 @@
5+SET @start_value = @@GLOBAL.innodb_cleaner_lsn_age_factor;
6+SELECT @@GLOBAL.innodb_cleaner_lsn_age_factor;
7+@@GLOBAL.innodb_cleaner_lsn_age_factor
8+high_checkpoint
9+SELECT @@SESSION.innodb_cleaner_lsn_age_factor;
10+ERROR HY000: Variable 'innodb_cleaner_lsn_age_factor' is a GLOBAL variable
11+SET GLOBAL innodb_cleaner_lsn_age_factor='legacy';
12+SELECT @@GLOBAL.innodb_cleaner_lsn_age_factor;
13+@@GLOBAL.innodb_cleaner_lsn_age_factor
14+legacy
15+SET GLOBAL innodb_cleaner_lsn_age_factor='high_checkpoint';
16+SELECT @@GLOBAL.innodb_cleaner_lsn_age_factor;
17+@@GLOBAL.innodb_cleaner_lsn_age_factor
18+high_checkpoint
19+SET GLOBAL innodb_cleaner_lsn_age_factor=1.1;
20+ERROR 42000: Incorrect argument type to variable 'innodb_cleaner_lsn_age_factor'
21+SET GLOBAL innodb_cleaner_lsn_age_factor=1e1;
22+ERROR 42000: Incorrect argument type to variable 'innodb_cleaner_lsn_age_factor'
23+SET GLOBAL innodb_cleaner_lsn_age_factor='foo';
24+ERROR 42000: Variable 'innodb_cleaner_lsn_age_factor' can't be set to the value of 'foo'
25+SET GLOBAL innodb_cleaner_lsn_age_factor = @start_value;
26
27=== added file 'Percona-Server/mysql-test/suite/sys_vars/t/innodb_cleaner_lsn_age_factor_basic.test'
28--- Percona-Server/mysql-test/suite/sys_vars/t/innodb_cleaner_lsn_age_factor_basic.test 1970-01-01 00:00:00 +0000
29+++ Percona-Server/mysql-test/suite/sys_vars/t/innodb_cleaner_lsn_age_factor_basic.test 2013-10-03 09:43:17 +0000
30@@ -0,0 +1,28 @@
31+--source include/have_innodb.inc
32+
33+# A dynamic, global variable
34+
35+SET @start_value = @@GLOBAL.innodb_cleaner_lsn_age_factor;
36+
37+# Default value
38+SELECT @@GLOBAL.innodb_cleaner_lsn_age_factor;
39+
40+# Global only
41+--error ER_INCORRECT_GLOBAL_LOCAL_VAR
42+SELECT @@SESSION.innodb_cleaner_lsn_age_factor;
43+
44+# Correct values
45+SET GLOBAL innodb_cleaner_lsn_age_factor='legacy';
46+SELECT @@GLOBAL.innodb_cleaner_lsn_age_factor;
47+SET GLOBAL innodb_cleaner_lsn_age_factor='high_checkpoint';
48+SELECT @@GLOBAL.innodb_cleaner_lsn_age_factor;
49+
50+# Incorrect values
51+--error ER_WRONG_TYPE_FOR_VAR
52+SET GLOBAL innodb_cleaner_lsn_age_factor=1.1;
53+--error ER_WRONG_TYPE_FOR_VAR
54+SET GLOBAL innodb_cleaner_lsn_age_factor=1e1;
55+--error ER_WRONG_VALUE_FOR_VAR
56+SET GLOBAL innodb_cleaner_lsn_age_factor='foo';
57+
58+SET GLOBAL innodb_cleaner_lsn_age_factor = @start_value;
59
60=== modified file 'Percona-Server/storage/innobase/buf/buf0flu.cc'
61--- Percona-Server/storage/innobase/buf/buf0flu.cc 2013-10-03 05:38:15 +0000
62+++ Percona-Server/storage/innobase/buf/buf0flu.cc 2013-10-03 09:43:17 +0000
63@@ -2398,10 +2398,22 @@
64 lsn_age_factor = (age * 100) / max_async_age;
65
66 ut_ad(srv_max_io_capacity >= srv_io_capacity);
67- return(static_cast<ulint>(
68- ((srv_max_io_capacity / srv_io_capacity)
69- * (lsn_age_factor * sqrt((double)lsn_age_factor)))
70- / 7.5));
71+ switch ((srv_cleaner_lsn_age_factor_t)srv_cleaner_lsn_age_factor) {
72+ case SRV_CLEANER_LSN_AGE_FACTOR_LEGACY:
73+ return(static_cast<ulint>(
74+ ((srv_max_io_capacity / srv_io_capacity)
75+ * (lsn_age_factor
76+ * sqrt((double)lsn_age_factor)))
77+ / 7.5));
78+ case SRV_CLEANER_LSN_AGE_FACTOR_HIGH_CHECKPOINT:
79+ return(static_cast<ulint>(
80+ ((srv_max_io_capacity / srv_io_capacity)
81+ * (lsn_age_factor * lsn_age_factor
82+ * sqrt((double)lsn_age_factor)))
83+ / 700.5));
84+ default:
85+ ut_error;
86+ }
87 }
88
89 /*********************************************************************//**
90
91=== modified file 'Percona-Server/storage/innobase/handler/ha_innodb.cc'
92--- Percona-Server/storage/innobase/handler/ha_innodb.cc 2013-09-30 12:13:10 +0000
93+++ Percona-Server/storage/innobase/handler/ha_innodb.cc 2013-10-03 09:43:17 +0000
94@@ -235,6 +235,21 @@
95 NULL
96 };
97
98+/** Possible values for system variable "innodb_cleaner_lsn_age_factor". */
99+static const char* innodb_cleaner_lsn_age_factor_names[] = {
100+ "legacy",
101+ "high_checkpoint",
102+ NullS
103+};
104+
105+/** Enumeration for innodb_cleaner_lsn_age_factor. */
106+static TYPELIB innodb_cleaner_lsn_age_factor_typelib = {
107+ array_elements(innodb_cleaner_lsn_age_factor_names) - 1,
108+ "innodb_cleaner_lsn_age_factor_typelib",
109+ innodb_cleaner_lsn_age_factor_names,
110+ NULL
111+};
112+
113 /* The following counter is used to convey information to InnoDB
114 about server activity: in selects it is not sensible to call
115 srv_active_wake_master_thread after each fetch or search, we only do
116@@ -16612,6 +16627,15 @@
117
118 #endif /* defined UNIV_DEBUG || defined UNIV_PERF_DEBUG */
119
120+static MYSQL_SYSVAR_ENUM(cleaner_lsn_age_factor,
121+ srv_cleaner_lsn_age_factor,
122+ PLUGIN_VAR_OPCMDARG,
123+ "The formula for LSN age factor for page cleaner adaptive flushing. "
124+ "LEGACY: Original Oracle MySQL 5.6 formula. "
125+ "HIGH_CHECKPOINT: (the default) Percona Server 5.6 formula.",
126+ NULL, NULL, SRV_CLEANER_LSN_AGE_FACTOR_HIGH_CHECKPOINT,
127+ &innodb_cleaner_lsn_age_factor_typelib);
128+
129 static MYSQL_SYSVAR_LONG(buffer_pool_instances, innobase_buffer_pool_instances,
130 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
131 "Number of buffer pool instances, set to higher value on high-end machines to increase scalability",
132@@ -17284,6 +17308,7 @@
133 MYSQL_SYSVAR(cleaner_free_list_lwm),
134 MYSQL_SYSVAR(cleaner_eviction_factor),
135 #endif /* defined UNIV_DEBUG || defined UNIV_PERF_DEBUG */
136+ MYSQL_SYSVAR(cleaner_lsn_age_factor),
137 MYSQL_SYSVAR(print_all_deadlocks),
138 MYSQL_SYSVAR(cmp_per_index_enabled),
139 MYSQL_SYSVAR(undo_logs),
140
141=== modified file 'Percona-Server/storage/innobase/include/buf0types.h'
142--- Percona-Server/storage/innobase/include/buf0types.h 2013-08-06 15:16:34 +0000
143+++ Percona-Server/storage/innobase/include/buf0types.h 2013-10-03 09:43:17 +0000
144@@ -92,6 +92,21 @@
145 when reading */
146 };
147
148+/** Alternatives for srv_cleaner_lsn_age_factor, set through
149+innodb_cleaner_lsn_age_factor variable */
150+enum srv_cleaner_lsn_age_factor_t {
151+ SRV_CLEANER_LSN_AGE_FACTOR_LEGACY, /*!< Original Oracle MySQL 5.6
152+ formula */
153+ SRV_CLEANER_LSN_AGE_FACTOR_HIGH_CHECKPOINT
154+ /*!< Percona Server 5.6 formula
155+ that returns lower values than
156+ legacy option for low
157+ checkpoint ages, and higher
158+ values for high ages. This has
159+ the effect of stabilizing the
160+ checkpoint age higher. */
161+};
162+
163 /** Parameters of binary buddy system for compressed pages (buf0buddy.h) */
164 /* @{ */
165 /** Zip shift value for the smallest page size */
166
167=== modified file 'Percona-Server/storage/innobase/include/srv0srv.h'
168--- Percona-Server/storage/innobase/include/srv0srv.h 2013-09-30 12:13:10 +0000
169+++ Percona-Server/storage/innobase/include/srv0srv.h 2013-10-03 09:43:17 +0000
170@@ -338,6 +338,10 @@
171 use evicted instead of flushed page
172 counts for its heuristics */
173
174+extern ulong srv_cleaner_lsn_age_factor;
175+ /*!< page cleaner LSN age factor
176+ formula option */
177+
178 extern ulint srv_n_file_io_threads;
179 extern my_bool srv_random_read_ahead;
180 extern ulong srv_read_ahead_threshold;
181
182=== modified file 'Percona-Server/storage/innobase/srv/srv0srv.cc'
183--- Percona-Server/storage/innobase/srv/srv0srv.cc 2013-09-30 12:13:10 +0000
184+++ Percona-Server/storage/innobase/srv/srv0srv.cc 2013-10-03 09:43:17 +0000
185@@ -286,6 +286,10 @@
186 for its heuristics */
187 UNIV_INTERN my_bool srv_cleaner_eviction_factor = FALSE;
188
189+/** Page cleaner LSN age factor formula option */
190+UNIV_INTERN ulong srv_cleaner_lsn_age_factor
191+ = SRV_CLEANER_LSN_AGE_FACTOR_HIGH_CHECKPOINT;
192+
193 /* This parameter is deprecated. Use srv_n_io_[read|write]_threads
194 instead. */
195 UNIV_INTERN ulint srv_n_file_io_threads = ULINT_MAX;

Subscribers

People subscribed via source and target branches