Skip to content

Commit 0f89cfa

Browse files
philliptvoinikep
authored andcommitted
Log Thrift requests to Perf Schema
Summary: Add instrumentation to log thrift request from bypass rpc workflow to performance schema (specifically the "esms_by_all" table). The changes made include: - adding a sysvar to control pfs logging (this is enabled by default) - adding statement/digest instrumentation to Bypass RPC path - computing the query's digest if the sysvar is enabled (needed to log to performance schema) Differential Revision: D46087826
1 parent f6f4710 commit 0f89cfa

14 files changed

+648
-2
lines changed

mysql-test/r/mysqld--help-notwin.result

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,9 @@ The following options may be given as the first argument:
307307
--bulk-insert-buffer-size=#
308308
Size of tree cache used in bulk insert optimisation. Note
309309
that this is a limit per thread!
310+
--bypass-rpc-pfs-logging
311+
Enables logging in from Bypass RPC path to the
312+
events_statements_summary_by_all table
310313
--bypass-write-throttle-admin-check
311314
Bypass the check to avoid throttling write queries from
312315
admin users to prevent replication lag
@@ -3224,6 +3227,7 @@ binlog-transaction-dependency-tracking COMMIT_ORDER
32243227
binlog-trx-meta-data FALSE
32253228
block-encryption-mode aes-128-ecb
32263229
bulk-insert-buffer-size 8388608
3230+
bypass-rpc-pfs-logging FALSE
32273231
bypass-write-throttle-admin-check FALSE
32283232
caching-sha2-password-digest-rounds 5000
32293233
caching-sha2-password-private-key-path private_key.pem
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
SET @start_value = @@global.bypass_rpc_pfs_logging;
2+
SELECT @start_value;
3+
@start_value
4+
0
5+
SET @@global.bypass_rpc_pfs_logging = DEFAULT;
6+
SELECT @@global.bypass_rpc_pfs_logging = TRUE;
7+
@@global.bypass_rpc_pfs_logging = TRUE
8+
0
9+
SET @@global.bypass_rpc_pfs_logging = ON;
10+
SELECT @@global.bypass_rpc_pfs_logging;
11+
@@global.bypass_rpc_pfs_logging
12+
1
13+
SET @@global.bypass_rpc_pfs_logging = OFF;
14+
SELECT @@global.bypass_rpc_pfs_logging;
15+
@@global.bypass_rpc_pfs_logging
16+
0
17+
SET @@global.bypass_rpc_pfs_logging = 2;
18+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of '2'
19+
SET @@global.bypass_rpc_pfs_logging = -1;
20+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of '-1'
21+
SET @@global.bypass_rpc_pfs_logging = TRUEF;
22+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of 'TRUEF'
23+
SET @@global.bypass_rpc_pfs_logging = TRUE_F;
24+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of 'TRUE_F'
25+
SET @@global.bypass_rpc_pfs_logging = FALSE0;
26+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of 'FALSE0'
27+
SET @@global.bypass_rpc_pfs_logging = OON;
28+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of 'OON'
29+
SET @@global.bypass_rpc_pfs_logging = ONN;
30+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of 'ONN'
31+
SET @@global.bypass_rpc_pfs_logging = OOFF;
32+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of 'OOFF'
33+
SET @@global.bypass_rpc_pfs_logging = 0FF;
34+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of '0FF'
35+
SET @@global.bypass_rpc_pfs_logging = ' ';
36+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of ' '
37+
SET @@global.bypass_rpc_pfs_logging = " ";
38+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of ' '
39+
SET @@global.bypass_rpc_pfs_logging = '';
40+
ERROR 42000: Variable 'bypass_rpc_pfs_logging' can't be set to the value of ''
41+
SET @@session.bypass_rpc_pfs_logging = OFF;
42+
ERROR HY000: Variable 'bypass_rpc_pfs_logging' is a GLOBAL variable and should be set with SET GLOBAL
43+
SELECT @@session.bypass_rpc_pfs_logging;
44+
ERROR HY000: Variable 'bypass_rpc_pfs_logging' is a GLOBAL variable
45+
SELECT IF(@@global.bypass_rpc_pfs_logging, "ON", "OFF") = VARIABLE_VALUE
46+
FROM performance_schema.global_variables
47+
WHERE VARIABLE_NAME='bypass_rpc_pfs_logging';
48+
IF(@@global.bypass_rpc_pfs_logging, "ON", "OFF") = VARIABLE_VALUE
49+
1
50+
SET @@global.bypass_rpc_pfs_logging = 0;
51+
SELECT @@global.bypass_rpc_pfs_logging;
52+
@@global.bypass_rpc_pfs_logging
53+
0
54+
SET @@global.bypass_rpc_pfs_logging = 1;
55+
SELECT @@global.bypass_rpc_pfs_logging;
56+
@@global.bypass_rpc_pfs_logging
57+
1
58+
SET @@global.bypass_rpc_pfs_logging = TRUE;
59+
SELECT @@global.bypass_rpc_pfs_logging;
60+
@@global.bypass_rpc_pfs_logging
61+
1
62+
SET @@global.bypass_rpc_pfs_logging = FALSE;
63+
SELECT @@global.bypass_rpc_pfs_logging;
64+
@@global.bypass_rpc_pfs_logging
65+
0
66+
SET @@global.bypass_rpc_pfs_logging = ON;
67+
SELECT @@bypass_rpc_pfs_logging = @@global.bypass_rpc_pfs_logging;
68+
@@bypass_rpc_pfs_logging = @@global.bypass_rpc_pfs_logging
69+
1
70+
SET bypass_rpc_pfs_logging = ON;
71+
ERROR HY000: Variable 'bypass_rpc_pfs_logging' is a GLOBAL variable and should be set with SET GLOBAL
72+
SET local.bypass_rpc_pfs_logging = OFF;
73+
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'local.bypass_rpc_pfs_logging = OFF' at line 1
74+
SELECT local.bypass_rpc_pfs_logging;
75+
ERROR 42S02: Unknown table 'local' in field list
76+
SET global.bypass_rpc_pfs_logging = ON;
77+
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'global.bypass_rpc_pfs_logging = ON' at line 1
78+
SELECT global.bypass_rpc_pfs_logging;
79+
ERROR 42S02: Unknown table 'global' in field list
80+
SELECT bypass_rpc_pfs_logging = @@session.bypass_rpc_pfs_logging;
81+
ERROR HY000: Variable 'bypass_rpc_pfs_logging' is a GLOBAL variable
82+
SET @@global.bypass_rpc_pfs_logging = @start_value;
83+
SELECT @@global.bypass_rpc_pfs_logging;
84+
@@global.bypass_rpc_pfs_logging
85+
0
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
SET @start_value = @@global.bypass_rpc_pfs_logging;
2+
SELECT @start_value;
3+
4+
5+
SET @@global.bypass_rpc_pfs_logging = DEFAULT;
6+
SELECT @@global.bypass_rpc_pfs_logging = TRUE;
7+
8+
9+
SET @@global.bypass_rpc_pfs_logging = ON;
10+
SELECT @@global.bypass_rpc_pfs_logging;
11+
SET @@global.bypass_rpc_pfs_logging = OFF;
12+
SELECT @@global.bypass_rpc_pfs_logging;
13+
14+
--Error ER_WRONG_VALUE_FOR_VAR
15+
SET @@global.bypass_rpc_pfs_logging = 2;
16+
--Error ER_WRONG_VALUE_FOR_VAR
17+
SET @@global.bypass_rpc_pfs_logging = -1;
18+
--Error ER_WRONG_VALUE_FOR_VAR
19+
SET @@global.bypass_rpc_pfs_logging = TRUEF;
20+
--Error ER_WRONG_VALUE_FOR_VAR
21+
SET @@global.bypass_rpc_pfs_logging = TRUE_F;
22+
--Error ER_WRONG_VALUE_FOR_VAR
23+
SET @@global.bypass_rpc_pfs_logging = FALSE0;
24+
--Error ER_WRONG_VALUE_FOR_VAR
25+
SET @@global.bypass_rpc_pfs_logging = OON;
26+
--Error ER_WRONG_VALUE_FOR_VAR
27+
SET @@global.bypass_rpc_pfs_logging = ONN;
28+
--Error ER_WRONG_VALUE_FOR_VAR
29+
SET @@global.bypass_rpc_pfs_logging = OOFF;
30+
--Error ER_WRONG_VALUE_FOR_VAR
31+
SET @@global.bypass_rpc_pfs_logging = 0FF;
32+
--Error ER_WRONG_VALUE_FOR_VAR
33+
SET @@global.bypass_rpc_pfs_logging = ' ';
34+
--Error ER_WRONG_VALUE_FOR_VAR
35+
SET @@global.bypass_rpc_pfs_logging = " ";
36+
--Error ER_WRONG_VALUE_FOR_VAR
37+
SET @@global.bypass_rpc_pfs_logging = '';
38+
39+
40+
--Error ER_GLOBAL_VARIABLE
41+
SET @@session.bypass_rpc_pfs_logging = OFF;
42+
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR
43+
SELECT @@session.bypass_rpc_pfs_logging;
44+
45+
46+
SELECT IF(@@global.bypass_rpc_pfs_logging, "ON", "OFF") = VARIABLE_VALUE
47+
FROM performance_schema.global_variables
48+
WHERE VARIABLE_NAME='bypass_rpc_pfs_logging';
49+
50+
51+
SET @@global.bypass_rpc_pfs_logging = 0;
52+
SELECT @@global.bypass_rpc_pfs_logging;
53+
SET @@global.bypass_rpc_pfs_logging = 1;
54+
SELECT @@global.bypass_rpc_pfs_logging;
55+
56+
SET @@global.bypass_rpc_pfs_logging = TRUE;
57+
SELECT @@global.bypass_rpc_pfs_logging;
58+
SET @@global.bypass_rpc_pfs_logging = FALSE;
59+
SELECT @@global.bypass_rpc_pfs_logging;
60+
61+
SET @@global.bypass_rpc_pfs_logging = ON;
62+
SELECT @@bypass_rpc_pfs_logging = @@global.bypass_rpc_pfs_logging;
63+
64+
--Error ER_GLOBAL_VARIABLE
65+
SET bypass_rpc_pfs_logging = ON;
66+
--Error ER_PARSE_ERROR
67+
SET local.bypass_rpc_pfs_logging = OFF;
68+
--Error ER_UNKNOWN_TABLE
69+
SELECT local.bypass_rpc_pfs_logging;
70+
--Error ER_PARSE_ERROR
71+
SET global.bypass_rpc_pfs_logging = ON;
72+
--Error ER_UNKNOWN_TABLE
73+
SELECT global.bypass_rpc_pfs_logging;
74+
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR
75+
SELECT bypass_rpc_pfs_logging = @@session.bypass_rpc_pfs_logging;
76+
77+
SET @@global.bypass_rpc_pfs_logging = @start_value;
78+
SELECT @@global.bypass_rpc_pfs_logging;
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
CREATE TABLE t1(c1 BIGINT NOT NULL, c2 VARCHAR(64), c3 int NOT NULL, PRIMARY KEY (c1));
2+
insert into t1 values (1, 'v1', 2), (2, 'v2', 3), (3, null, 4);
3+
TRUNCATE TABLE performance_schema.events_statements_summary_by_all;
4+
5+
TEST CASE performance_schema_esms_by_all=off. bypass_rpc_pfs_logging=off. No data in events_statements_summary_by_all
6+
7+
set global performance_schema_esms_by_all = off;
8+
set global bypass_rpc_pfs_logging = off;
9+
select @@performance_schema_esms_by_all;
10+
@@performance_schema_esms_by_all
11+
0
12+
select @@bypass_rpc_pfs_logging;
13+
@@bypass_rpc_pfs_logging
14+
0
15+
SET GLOBAL THRIFT_SERVER_TESTER_INPUT='bypass: {"db_name":"test","table_name":"t1","columns":["c1", "c2"],"where":[{"column":"c3","op":2,"value":{"signedIntVal":2}}]}';
16+
SELECT SEQ_NUMBER, TYPE, VALUE FROM THRIFT_SERVER_PLUGIN_OUTPUT ORDER BY SEQ_NUMBER;
17+
SEQ_NUMBER TYPE VALUE
18+
0 header [{"type":2,"name":"c1"}, {"type":4,"name":"c2"}]
19+
1 row [{"signedIntVal":2}, {"stringVal":"v2"}]
20+
2 row [{"signedIntVal":3}, {"isNull":true}]
21+
3 hlcTsLowerBound 0
22+
select schema_name, digest, user, client_id, plan_id, count_star, sum_rows_deleted, sum_rows_inserted, sum_rows_updated from performance_schema.events_statements_summary_by_all where query_sample_text like '%bypass rpc%';
23+
schema_name digest user client_id plan_id count_star sum_rows_deleted sum_rows_inserted sum_rows_updated
24+
select schema_name, digest, count_star, sum_rows_deleted, sum_rows_inserted, sum_rows_updated from performance_schema.events_statements_summary_by_digest where query_sample_text like '%bypass rpc%';
25+
schema_name digest count_star sum_rows_deleted sum_rows_inserted sum_rows_updated
26+
test 7ccb84550cd3166e3616468625636da4 1 0 0 0
27+
TRUNCATE TABLE THRIFT_SERVER_PLUGIN_OUTPUT;
28+
29+
TEST CASE performance_schema_esms_by_all=off. bypass_rpc_pfs_logging=on. No data in events_statements_summary_by_all since
30+
primary switch 'performance_schema.esms_by_all' is turned off.
31+
echo
32+
set global performance_schema_esms_by_all = off;
33+
set global bypass_rpc_pfs_logging = on;
34+
select @@performance_schema_esms_by_all;
35+
@@performance_schema_esms_by_all
36+
0
37+
select @@bypass_rpc_pfs_logging;
38+
@@bypass_rpc_pfs_logging
39+
1
40+
SET GLOBAL THRIFT_SERVER_TESTER_INPUT='bypass: {"db_name":"test","table_name":"t1","columns":["c1", "c2"],"where":[{"column":"c3","op":2,"value":{"signedIntVal":2}}]}';
41+
SELECT SEQ_NUMBER, TYPE, VALUE FROM THRIFT_SERVER_PLUGIN_OUTPUT ORDER BY SEQ_NUMBER;
42+
SEQ_NUMBER TYPE VALUE
43+
0 header [{"type":2,"name":"c1"}, {"type":4,"name":"c2"}]
44+
1 row [{"signedIntVal":2}, {"stringVal":"v2"}]
45+
2 row [{"signedIntVal":3}, {"isNull":true}]
46+
3 hlcTsLowerBound 0
47+
select schema_name, digest, client_id, plan_id, count_star, sum_rows_deleted, sum_rows_inserted, sum_rows_updated from performance_schema.events_statements_summary_by_all where query_sample_text like '%bypass rpc%';
48+
schema_name digest client_id plan_id count_star sum_rows_deleted sum_rows_inserted sum_rows_updated
49+
select schema_name, digest, count_star, sum_rows_deleted, sum_rows_inserted, sum_rows_updated from performance_schema.events_statements_summary_by_digest where query_sample_text like '%bypass rpc%';
50+
schema_name digest count_star sum_rows_deleted sum_rows_inserted sum_rows_updated
51+
test e8f3d908aa6ac78634d186bb58579527 1 0 0 0
52+
TRUNCATE TABLE THRIFT_SERVER_PLUGIN_OUTPUT;
53+
54+
TEST CASE performance_schema_esms_by_all=on. bypass_rpc_pfs_logging=off. Data will be stored in sql_statistics, but not bypass_rpc queries
55+
56+
set global performance_schema_esms_by_all = on;
57+
set global bypass_rpc_pfs_logging = off;
58+
select @@performance_schema_esms_by_all;
59+
@@performance_schema_esms_by_all
60+
1
61+
select @@bypass_rpc_pfs_logging;
62+
@@bypass_rpc_pfs_logging
63+
0
64+
SET GLOBAL THRIFT_SERVER_TESTER_INPUT='bypass: {"db_name":"test","table_name":"t1","columns":["c1", "c2"],"where":[{"column":"c3","op":2,"value":{"signedIntVal":2}}]}';
65+
SELECT SEQ_NUMBER, TYPE, VALUE FROM THRIFT_SERVER_PLUGIN_OUTPUT ORDER BY SEQ_NUMBER;
66+
SEQ_NUMBER TYPE VALUE
67+
0 header [{"type":2,"name":"c1"}, {"type":4,"name":"c2"}]
68+
1 row [{"signedIntVal":2}, {"stringVal":"v2"}]
69+
2 row [{"signedIntVal":3}, {"isNull":true}]
70+
3 hlcTsLowerBound 0
71+
select schema_name, digest, client_id, plan_id, count_star, sum_rows_deleted, sum_rows_inserted, sum_rows_updated from performance_schema.events_statements_summary_by_all where query_sample_text like '%bypass rpc%';
72+
schema_name digest client_id plan_id count_star sum_rows_deleted sum_rows_inserted sum_rows_updated
73+
select schema_name, digest, count_star, sum_rows_deleted, sum_rows_inserted, sum_rows_updated from performance_schema.events_statements_summary_by_digest where query_sample_text like '%bypass rpc%';
74+
schema_name digest count_star sum_rows_deleted sum_rows_inserted sum_rows_updated
75+
TRUNCATE TABLE THRIFT_SERVER_PLUGIN_OUTPUT;
76+
77+
TEST CASE performance_schema_esms_by_all=on. bypass_rpc_pfs_logging=on. Data will be stored in sql_statistics
78+
79+
set global performance_schema_esms_by_all = on;
80+
set global bypass_rpc_pfs_logging = on;
81+
select @@performance_schema_esms_by_all;
82+
@@performance_schema_esms_by_all
83+
1
84+
select @@bypass_rpc_pfs_logging;
85+
@@bypass_rpc_pfs_logging
86+
1
87+
SET GLOBAL THRIFT_SERVER_TESTER_INPUT='bypass: {"db_name":"test","table_name":"t1","columns":["c1", "c2"],"where":[{"column":"c3","op":2,"value":{"signedIntVal":2}}]}';
88+
SELECT SEQ_NUMBER, TYPE, VALUE FROM THRIFT_SERVER_PLUGIN_OUTPUT ORDER BY SEQ_NUMBER;
89+
SEQ_NUMBER TYPE VALUE
90+
0 header [{"type":2,"name":"c1"}, {"type":4,"name":"c2"}]
91+
1 row [{"signedIntVal":2}, {"stringVal":"v2"}]
92+
2 row [{"signedIntVal":3}, {"isNull":true}]
93+
3 hlcTsLowerBound 0
94+
TRUNCATE TABLE THRIFT_SERVER_PLUGIN_OUTPUT;
95+
SET GLOBAL THRIFT_SERVER_TESTER_INPUT='bypass: {"db_name":"test","table_name":"t1","columns":["c1", "c2"],"where":[{"column":"c3","op":2,"value":{"signedIntVal":3}}]}';
96+
SELECT SEQ_NUMBER, TYPE, VALUE FROM THRIFT_SERVER_PLUGIN_OUTPUT ORDER BY SEQ_NUMBER;
97+
SEQ_NUMBER TYPE VALUE
98+
0 header [{"type":2,"name":"c1"}, {"type":5,"name":"c2"}]
99+
1 row [{"signedIntVal":3}, {"isNull":true}]
100+
2 hlcTsLowerBound 0
101+
TRUNCATE TABLE THRIFT_SERVER_PLUGIN_OUTPUT;
102+
SET GLOBAL THRIFT_SERVER_TESTER_INPUT='bypass: {"db_name":"test","table_name":"t1","columns":["c1", "c2"],"where":[{"column":"c3","op":2,"value":{"signedIntVal":2}},{"column":"c3","op":1,"value":{"signedIntVal":4}}]}';
103+
SELECT SEQ_NUMBER, TYPE, VALUE FROM THRIFT_SERVER_PLUGIN_OUTPUT ORDER BY SEQ_NUMBER;
104+
SEQ_NUMBER TYPE VALUE
105+
0 header [{"type":2,"name":"c1"}, {"type":4,"name":"c2"}]
106+
1 row [{"signedIntVal":2}, {"stringVal":"v2"}]
107+
2 hlcTsLowerBound 0
108+
TRUNCATE TABLE THRIFT_SERVER_PLUGIN_OUTPUT;
109+
select schema_name, digest, client_id, plan_id, count_star, sum_rows_deleted, sum_rows_inserted, sum_rows_updated from performance_schema.events_statements_summary_by_all where query_sample_text like '%bypass rpc%';
110+
schema_name digest client_id plan_id count_star sum_rows_deleted sum_rows_inserted sum_rows_updated
111+
test 0a842ba19a33b8850ca1d07dfe0cb0da 00000000000000000000000000000000 00000000000000000000000000000000 2 0 0 0
112+
test 982ad3058166850211d1631ccf6c850b 00000000000000000000000000000000 00000000000000000000000000000000 1 0 0 0
113+
select schema_name, digest, count_star, sum_rows_deleted, sum_rows_inserted, sum_rows_updated from performance_schema.events_statements_summary_by_digest where query_sample_text like '%bypass rpc%';
114+
schema_name digest count_star sum_rows_deleted sum_rows_inserted sum_rows_updated
115+
Cleanup
116+
set global performance_schema_esms_by_all = DEFAULT;
117+
drop table t1;

0 commit comments

Comments
 (0)