Merge lp:~percona-dev/percona-server/release-5.1.47-11-control-global-flow into lp:percona-server/release-5.1.47-11

Proposed by Oleg Tsarev
Status: Merged
Approved by: Vadim Tkachenko
Approved revision: no longer in the source branch.
Merged at revision: 19
Proposed branch: lp:~percona-dev/percona-server/release-5.1.47-11-control-global-flow
Merge into: lp:percona-server/release-5.1.47-11
Diff against target: 247 lines (+216/-1)
5 files modified
control-global-slow.patch (+191/-0)
mysql-test/percona_slow_query_log-control_global_slow-master.opt (+1/-0)
mysql-test/percona_slow_query_log-control_global_slow.result (+12/-0)
mysql-test/percona_slow_query_log-control_global_slow.test (+10/-0)
series (+2/-1)
To merge this branch: bzr merge lp:~percona-dev/percona-server/release-5.1.47-11-control-global-flow
Reviewer Review Type Date Requested Status
Vadim Tkachenko Approve
Review via email: mp+26253@code.launchpad.net

Description of the change

To post a comment you must log in.
Revision history for this message
Vadim Tkachenko (vadim-tk) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'control-global-slow.patch'
2--- control-global-slow.patch 1970-01-01 00:00:00 +0000
3+++ control-global-slow.patch 2010-05-27 23:15:42 +0000
4@@ -0,0 +1,191 @@
5+diff -Nur Percona-Server.orig/sql/mysqld.cc Percona-Server/sql/mysqld.cc
6+--- Percona-Server.orig/sql/mysqld.cc 2010-05-28 01:47:26.000000000 +0400
7++++ Percona-Server/sql/mysqld.cc 2010-05-28 01:58:52.000000000 +0400
8+@@ -5785,6 +5785,7 @@
9+ OPT_OPTIMIZER_FIX,
10+ OPT_SUPPRESS_LOG_WARNING_1592,
11+ OPT_USE_GLOBAL_LONG_QUERY_TIME,
12++ OPT_USE_GLOBAL_LOG_SLOW_CONTROL,
13+ OPT_IGNORE_BUILTIN_INNODB,
14+ OPT_BINLOG_DIRECT_NON_TRANS_UPDATE,
15+ OPT_DEFAULT_CHARACTER_SET_OLD
16+@@ -6790,6 +6791,9 @@
17+ "Timestamp is printed for all records of the slow log even if they are same time.",
18+ (uchar**) &opt_log_slow_timestamp_every, (uchar**) &opt_log_slow_timestamp_every,
19+ 0, GET_BOOL, NO_ARG, 0, 0, 1, 0, 1, 0},
20++ {"use_global_log_slow_control", OPT_USE_GLOBAL_LOG_SLOW_CONTROL,
21++ "Choose flags, wich always use the global variables. Multiple flags allowed in a comma-separated string. [none, log_slow_filter, log_slow_rate_limit, log_slow_verbosity, long_query_time, min_examined_row_limit]",
22++ 0, 0, 0, GET_STR, NO_ARG, 0, 0, 0, SLOG_UG_NONE, 0, 0},
23+ {"use_global_long_query_time", OPT_USE_GLOBAL_LONG_QUERY_TIME,
24+ "Control always use global long_query_time or local long_query_time.",
25+ (uchar**) &opt_use_global_long_query_time, (uchar**) &opt_use_global_long_query_time,
26+@@ -7938,6 +7942,7 @@
27+ global_system_variables.binlog_format= BINLOG_FORMAT_UNSPEC;
28+
29+ global_system_variables.log_slow_verbosity= SLOG_V_MICROTIME;
30++ global_system_variables.use_global_log_slow_control = SLOG_UG_NONE;
31+ global_system_variables.log_slow_filter= SLOG_F_NONE;
32+ /*
33+ Default behavior for 4.1 and 5.0 is to treat NULL values as unequal
34+@@ -8457,6 +8462,23 @@
35+ exit(1);
36+ }
37+ break;
38++ case OPT_USE_GLOBAL_LOG_SLOW_CONTROL:
39++ {
40++ ulong &v = global_system_variables.use_global_log_slow_control;
41++ v = msl_flag_resolve_by_name(slog_use_global, argument, SLOG_UG_NONE, SLOG_UG_INVALID);
42++ if (v != SLOG_UG_NONE)
43++ {
44++ ulong mask = SLOG_UG_NONE;
45++ mask = ~mask;
46++ v = v & mask;
47++ }
48++ if (v == SLOG_UG_INVALID)
49++ {
50++ fprintf(stderr,"Invalid argument in use_global_log_slow_control: %s\n", argument);
51++ exit(1);
52++ }
53++ break;
54++ }
55+ case OPT_SERVER_ID:
56+ server_id_supplied = 1;
57+ break;
58+diff -Nur Percona-Server.orig/sql/mysql_priv.h Percona-Server/sql/mysql_priv.h
59+--- Percona-Server.orig/sql/mysql_priv.h 2010-05-28 01:47:26.000000000 +0400
60++++ Percona-Server/sql/mysql_priv.h 2010-05-28 01:52:43.000000000 +0400
61+@@ -621,6 +621,28 @@
62+ const char *name;
63+ };
64+
65++/* use global log slow control */
66++#define SLOG_UG_NONE 1 << 0
67++#define SLOG_UG_LOG_SLOW_FILTER 1 << 1
68++#define SLOG_UG_LOG_SLOW_RATE_LIMIT 1 << 2
69++#define SLOG_UG_LOG_SLOW_VERBOSITY 1 << 3
70++#define SLOG_UG_LONG_QUERY_TIME 1 << 4
71++#define SLOG_UG_MIN_EXAMINED_ROW_LIMIT 1 << 6
72++/* ... */
73++#define SLOG_UG_INVALID 1 << 31
74++
75++static const struct msl_opts slog_use_global[]=
76++ {
77++ { SLOG_UG_NONE , "none" },
78++ { SLOG_UG_LOG_SLOW_FILTER , "log_slow_filter" },
79++ { SLOG_UG_LOG_SLOW_RATE_LIMIT , "log_slow_rate_limit" },
80++ { SLOG_UG_LOG_SLOW_VERBOSITY , "log_slow_verbosity" },
81++ { SLOG_UG_LONG_QUERY_TIME , "long_query_time" },
82++ { SLOG_UG_MIN_EXAMINED_ROW_LIMIT , "min_examined_row_limit" },
83++ /* ... */
84++ { SLOG_UG_INVALID , (char*)0 }
85++ };
86++
87+ #define SLOG_V_MICROTIME 1 << 0
88+ #define SLOG_V_QUERY_PLAN 1 << 1
89+ #define SLOG_V_INNODB 1 << 2
90+diff -Nur Percona-Server.orig/sql/set_var.cc Percona-Server/sql/set_var.cc
91+--- Percona-Server.orig/sql/set_var.cc 2010-05-28 01:47:26.000000000 +0400
92++++ Percona-Server/sql/set_var.cc 2010-05-28 02:02:45.000000000 +0400
93+@@ -918,6 +918,12 @@
94+ SLOG_V_MICROTIME,
95+ SLOG_V_INVALID,
96+ slog_verb);
97++static sys_var_thd_msl_flag_correct_none sys_use_global_log_slow_control(&vars, "use_global_log_slow_control",
98++ &SV::use_global_log_slow_control,
99++ SLOG_UG_NONE,
100++ SLOG_UG_NONE,
101++ SLOG_UG_INVALID,
102++ slog_use_global);
103+ static sys_var_bool_ptr sys_log_slow_slave_statements(&vars, "log_slow_slave_statements",
104+ &opt_log_slow_slave_statements);
105+ static sys_var_bool_ptr sys_log_slow_sp_statements(&vars, "log_slow_sp_statements",
106+@@ -3924,6 +3930,17 @@
107+ thd->variables.*offset= var->save_result.ulong_value;
108+ return 0;
109+ }
110++bool sys_var_thd_msl_flag_correct_none::update(THD *thd, set_var *var)
111++{
112++ ulong result = var->save_result.ulong_value;
113++ if (result != none_val)
114++ result = result & (~none_val);
115++ if (var->type == OPT_GLOBAL)
116++ global_system_variables.*offset = result;
117++ else
118++ thd->variables.*offset = result;
119++ return 0;
120++}
121+
122+
123+ /****************************************************************************
124+diff -Nur Percona-Server.orig/sql/sql_class.h Percona-Server/sql/sql_class.h
125+--- Percona-Server.orig/sql/sql_class.h 2010-05-28 01:47:26.000000000 +0400
126++++ Percona-Server/sql/sql_class.h 2010-05-28 02:05:05.000000000 +0400
127+@@ -407,6 +407,7 @@
128+ ulong log_slow_rate_limit;
129+ ulong log_slow_filter;
130+ ulong log_slow_verbosity;
131++ ulong use_global_log_slow_control;
132+
133+ ulong innodb_io_reads;
134+ ulonglong innodb_io_read;
135+diff -Nur Percona-Server.orig/sql/sql_parse.cc Percona-Server/sql/sql_parse.cc
136+--- Percona-Server.orig/sql/sql_parse.cc 2010-05-28 01:47:26.000000000 +0400
137++++ Percona-Server/sql/sql_parse.cc 2010-05-28 02:04:04.000000000 +0400
138+@@ -1665,7 +1665,10 @@
139+ free_root(thd->mem_root,MYF(MY_KEEP_PREALLOC));
140+ DBUG_RETURN(error);
141+ }
142+-
143++#define SLOG_UG_SETUP(session,value,flag,global) do { \
144++ if(value & flag == flag) \
145++ session = global; \
146++ } while(false);
147+
148+ void log_slow_statement(THD *thd)
149+ {
150+@@ -1698,6 +1701,21 @@
151+ if (opt_use_global_long_query_time)
152+ thd->variables.long_query_time = global_system_variables.long_query_time;
153+
154++ if (opt_use_global_long_query_time)
155++ thd->variables.long_query_time = global_system_variables.long_query_time;
156++
157++ /* use_global_log_slow_control */
158++ {
159++ system_variables const &g = global_system_variables; // global
160++ system_variables &s = thd->variables; // session
161++ ulong const &value = g.use_global_log_slow_control;
162++ SLOG_UG_SETUP(s.log_slow_filter, value, SLOG_UG_LOG_SLOW_FILTER, g.log_slow_filter);
163++ SLOG_UG_SETUP(s.log_slow_rate_limit, value, SLOG_UG_LOG_SLOW_RATE_LIMIT, g.log_slow_rate_limit);
164++ SLOG_UG_SETUP(s.log_slow_verbosity, value, SLOG_UG_LOG_SLOW_VERBOSITY, g.log_slow_verbosity);
165++ SLOG_UG_SETUP(s.long_query_time, value, SLOG_UG_LONG_QUERY_TIME, g.long_query_time);
166++ SLOG_UG_SETUP(s.min_examined_row_limit, value, SLOG_UG_MIN_EXAMINED_ROW_LIMIT, g.min_examined_row_limit);
167++ }
168++
169+ /* Do not log this thread's queries due to rate limiting. */
170+ if (thd->write_to_slow_log != TRUE
171+ && (thd->variables.long_query_time >= 1000000
172+diff -Nur Percona-Server.orig/sql/set_var.h Percona-Server/sql/set_var.h
173+--- Percona-Server.orig/sql/set_var.h 2010-05-28 01:47:26.000000000 +0400
174++++ Percona-Server/sql/set_var.h 2010-05-28 02:58:15.000000000 +0400
175+@@ -627,6 +627,20 @@
176+ uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
177+ };
178+
179++class sys_var_thd_msl_flag_correct_none : public sys_var_thd_msl_flag
180++{
181++ public:
182++ sys_var_thd_msl_flag_correct_none(sys_var_chain *chain, const char *name_arg, ulong SV::*offset_arg,
183++ const ulong none_val_arg,
184++ const ulong default_val_arg,
185++ const ulong invalid_val_arg,
186++ const struct msl_opts *flags_arg)
187++ : sys_var_thd_msl_flag(chain,name_arg,offset_arg,none_val_arg,default_val_arg,invalid_val_arg,flags_arg)
188++ {
189++ }
190++ virtual bool update(THD *thd, set_var *var);
191++};
192++
193+ class sys_var_thd_storage_engine :public sys_var_thd
194+ {
195+ protected:
196
197=== added file 'mysql-test/percona_slow_query_log-control_global_slow-master.opt'
198--- mysql-test/percona_slow_query_log-control_global_slow-master.opt 1970-01-01 00:00:00 +0000
199+++ mysql-test/percona_slow_query_log-control_global_slow-master.opt 2010-05-27 23:15:42 +0000
200@@ -0,0 +1,1 @@
201+--slow-query-log-file=percona_slow_query_log.log --long-query-time=1
202\ No newline at end of file
203
204=== added file 'mysql-test/percona_slow_query_log-control_global_slow.result'
205--- mysql-test/percona_slow_query_log-control_global_slow.result 1970-01-01 00:00:00 +0000
206+++ mysql-test/percona_slow_query_log-control_global_slow.result 2010-05-27 23:15:42 +0000
207@@ -0,0 +1,12 @@
208+SELECT sleep(2);
209+sleep(2)
210+0
211+set global log_slow_verbosity=innodb;
212+set global use_global_log_slow_control="log_slow_verbosity,long_query_time";
213+SELECT sleep(2);
214+sleep(2)
215+0
216+set global use_global_log_slow_control=none;
217+set global log_slow_verbosity=microtime;
218+cat var/mysqld.1/data/percona_slow_query_log.log | grep "No InnoDB statistics available for this query" | wc -l
219+1
220
221=== added file 'mysql-test/percona_slow_query_log-control_global_slow.test'
222--- mysql-test/percona_slow_query_log-control_global_slow.test 1970-01-01 00:00:00 +0000
223+++ mysql-test/percona_slow_query_log-control_global_slow.test 2010-05-27 23:15:42 +0000
224@@ -0,0 +1,10 @@
225+source include/have_innodb.inc;
226+SELECT sleep(2);
227+set global log_slow_verbosity=innodb;
228+set global use_global_log_slow_control="log_slow_verbosity,long_query_time";
229+SELECT sleep(2);
230+set global use_global_log_slow_control=none;
231+set global log_slow_verbosity=microtime;
232+let $cmd = cat var/mysqld.1/data/percona_slow_query_log.log | grep "No InnoDB statistics available for this query" | wc -l;
233+echo $cmd;
234+exec $cmd;
235
236=== modified file 'series'
237--- series 2010-05-27 16:51:00 +0000
238+++ series 2010-05-27 23:15:42 +0000
239@@ -37,4 +37,5 @@
240 mysql-test.diff
241 percona-support.patch
242 innodb_deadlock_count.patch
243-bug580324.patch
244\ No newline at end of file
245+bug580324.patch
246+control-global-slow.patch
247\ No newline at end of file

Subscribers

People subscribed via source and target branches

to all changes: