1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
|
# Tests for the performance schema
# ==========================================
# HELPER include/transaction_setup.inc
# ==========================================
#
# UTILITY QUERIES
#
let $get_thread_id=
SELECT thread_id INTO @my_thread_id
FROM performance_schema.threads
WHERE processlist_id = connection_id();
let $disable_instruments=
UPDATE performance_schema.setup_instruments
SET enabled='no', timed='no'
WHERE name IN ('transaction');
let $enable_instruments=
UPDATE performance_schema.setup_instruments
SET enabled='yes', timed='yes'
WHERE name IN ('transaction');
let $def_count = -1;
--disable_warnings
DROP PROCEDURE IF EXISTS clear_transaction_tables;
--enable_warnings
--disable_result_log
DELIMITER $$;
CREATE PROCEDURE clear_transaction_tables()
BEGIN
truncate table performance_schema.events_transactions_current;
truncate table performance_schema.events_transactions_history;
truncate table performance_schema.events_transactions_history_long;
truncate table performance_schema.events_transactions_summary_by_thread_by_event_name;
truncate table performance_schema.events_transactions_summary_by_account_by_event_name;
truncate table performance_schema.events_transactions_summary_by_host_by_event_name;
truncate table performance_schema.events_transactions_summary_by_user_by_event_name;
truncate table performance_schema.events_transactions_summary_global_by_event_name;
END$$
CREATE PROCEDURE clear_transaction_history()
BEGIN
truncate table performance_schema.events_transactions_current;
truncate table performance_schema.events_transactions_history;
truncate table performance_schema.events_transactions_history_long;
END$$
CREATE PROCEDURE clear_statement_history()
BEGIN
truncate table performance_schema.events_statements_current;
truncate table performance_schema.events_statements_history;
truncate table performance_schema.events_statements_history_long;
END$$
CREATE PROCEDURE clear_history()
BEGIN
truncate table performance_schema.events_statements_current;
truncate table performance_schema.events_statements_history;
truncate table performance_schema.events_statements_history_long;
truncate table performance_schema.events_transactions_current;
truncate table performance_schema.events_transactions_history;
truncate table performance_schema.events_transactions_history_long;
END$$
CREATE PROCEDURE transaction_verifier(IN i_table INT,
IN i_thread_id INT,
IN i_event_name VARCHAR(64),
IN i_state VARCHAR(32),
IN i_xid_format_id INT,
IN i_xid_gtrid VARCHAR(130),
IN i_xid_bqual VARCHAR(130),
IN i_xa_state VARCHAR(64),
IN i_gtid VARCHAR(64),
IN i_access_mode VARCHAR(32),
IN i_isolation_level VARCHAR(64),
IN i_autocommit VARCHAR(16),
IN i_savepoints INT,
IN i_rb_savepoint INT,
IN i_rel_savepoint INT,
IN i_expected INT)
BEGIN
DECLARE table_name VARCHAR(64);
SET @thread_id = i_thread_id;
SET @event_id = 0;
SET @event_name = i_event_name;
SET @state = i_state;
SET @xid_format_id = i_xid_format_id;
SET @xid_gtrid = i_xid_gtrid;
SET @xid_bqual = i_xid_bqual;
SET @xa_state = i_xa_state;
SET @gtid = i_gtid;
SET @access_mode = i_access_mode;
SET @isolation_level = i_isolation_level;
SET @autocommit = i_autocommit;
SET @savepoints = i_savepoints;
SET @rb_savepoint = i_rb_savepoint;
SET @rel_savepoint = i_rel_savepoint;
SET @expected = i_expected;
#
# Build verification query based upon input parameters
#
IF i_table = 0 THEN
SET table_name = 'performance_schema.events_transactions_current';
ELSEIF i_table = 1 THEN
SET table_name = 'performance_schema.events_transactions_history';
ELSEIF i_table = 2 THEN
SET table_name = 'performance_schema.events_transactions_history_long';
ELSE
SET table_name = 'performance_schema.events_transactions_history';
END IF;
SET @query = CONCAT('SELECT COUNT(*) INTO @actual FROM ', table_name, ' WHERE');
IF i_thread_id != 0 THEN
SET @query = CONCAT(@query, ' (thread_id = @thread_id)');
END IF;
IF i_event_name != '' THEN
SET @query = CONCAT(@query, ' AND (event_name = @event_name)');
END IF;
IF i_state != '' THEN
SET @query = CONCAT(@query, ' AND (state = @state)');
END IF;
IF i_xid_format_id != '' THEN
SET @query = CONCAT(@query, ' AND (xid_format_id = @xid_format_id)');
END IF;
IF i_xid_gtrid != '' THEN
SET @query = CONCAT(@query, ' AND (xid_gtrid = @xid_gtrid)');
END IF;
IF i_xid_bqual != '' THEN
SET @query = CONCAT(@query, ' AND (xid_bqual = @xid_bqual)');
END IF;
IF i_xa_state != '' THEN
SET @query = CONCAT(@query, ' AND (xa_state = @xa_state)');
END IF;
IF i_gtid = 'NULL' THEN
SET @query = CONCAT(@query, ' AND (gtid IS NULL)');
ELSEIF i_gtid != '' THEN
SET @query = CONCAT(@query, ' AND (gtid = @gtid)');
END IF;
IF i_access_mode != '' THEN
SET @query = CONCAT(@query, ' AND (access_mode = @access_mode)');
END IF;
IF i_isolation_level != '' THEN
SET @query = CONCAT(@query, ' AND (isolation_level = @isolation_level)');
END IF;
IF i_autocommit != '' THEN
SET @query = CONCAT(@query, ' AND (autocommit = @autocommit)');
END IF;
IF i_savepoints != 0 THEN
SET @query = CONCAT(@query, ' AND (number_of_savepoints = @savepoints)');
END IF;
IF i_rb_savepoint != 0 THEN
SET @query = CONCAT(@query, ' AND (number_of_rollback_to_savepoint = @rb_savepoint)');
END IF;
IF i_rel_savepoint != 0 THEN
SET @query = CONCAT(@query, ' AND (number_of_release_savepoint = @rel_savepoint)');
END IF;
SET @query = CONCAT(@query, ' ORDER BY event_id;');
## DEBUG ## SELECT * FROM performance_schema.events_transactions_history ORDER BY event_id;
## SELECT @query AS "QUERY";
PREPARE stmt1 FROM @query;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SELECT LPAD(@actual, 6, ' ') AS "ACTUAL", LPAD(@expected, 8, ' ') AS "EXPECTED";
IF @actual != @expected THEN
SELECT "" AS "ERROR: Row count mismatch";
SELECT @query AS "VERIFIER QUERY:";
SELECT "";
SET @columns = ' LPAD(@thread_id, 9, " ") AS thread_id,';
SET @columns = CONCAT(@columns, ' LPAD(@event_id, 10, " ") AS "..event_id",');
SET @columns = CONCAT(@columns, ' RPAD(@event_name, 11, " ") AS "event_name ",');
SET @columns = CONCAT(@columns, ' RPAD(@state, 11, " ") AS "state ",');
SET @columns = CONCAT(@columns, ' RPAD(@xid_format_id, 15, " ") AS "xid_format_id ",');
SET @columns = CONCAT(@columns, ' RPAD(@xid_gtrid, 15, " ") AS "xid_gtrid ",');
SET @columns = CONCAT(@columns, ' RPAD(@xid_bqual, 15, " ") AS "xid_bqual ",');
SET @columns = CONCAT(@columns, ' RPAD(@xa_state, 12, " ") AS "xa_state ",');
SET @columns = CONCAT(@columns, ' RPAD(@gtid, 38, " ") AS "gtid ",');
SET @columns = CONCAT(@columns, ' RPAD(@access_mode, 11, " ") AS access_mode,');
SET @columns = CONCAT(@columns, ' RPAD(@isolation_level, 16, " ") AS "isolation_level ",');
SET @columns = CONCAT(@columns, ' RPAD(@autocommit, 10, " ") AS autocommit,');
SET @columns = CONCAT(@columns, ' LPAD(@savepoints, 10, " ") AS savepoints,');
SET @columns = CONCAT(@columns, ' LPAD(@rb_savepoint, 21, " ") AS rollback_to_savepoint,');
SET @columns = CONCAT(@columns, ' LPAD(@rel_savepoint, 17, " ") AS release_savepoint');
SET @query2 = CONCAT('SELECT', ' LPAD(@expected, 13, " ") AS ROWS_EXPECTED, ', @columns, ';');
# SET @query2 = CONCAT('SELECT " " AS EXPECTED, ', @columns, ';');
PREPARE stmt2 FROM @query2;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
SET @columns = ' LPAD(thread_id, 9, " ") AS thread_id,';
SET @columns = CONCAT(@columns, ' LPAD(event_id, 10, " ") AS "..event_id",');
SET @columns = CONCAT(@columns, ' RPAD(event_name, 11, " ") AS "event_name ",');
SET @columns = CONCAT(@columns, ' RPAD(state, 11, " ") AS "state ",');
SET @columns = CONCAT(@columns, ' RPAD(IFNULL(xid_format_id, "NULL"), 15, " ") AS "xid_format_id ",');
SET @columns = CONCAT(@columns, ' RPAD(IFNULL(xid_gtrid, "NULL"), 15, " ") AS "xid_gtrid ",');
SET @columns = CONCAT(@columns, ' RPAD(IFNULL(xid_bqual, "NULL"), 15, " ") AS "xid_bqual ",');
SET @columns = CONCAT(@columns, ' RPAD(IFNULL(xa_state, "NULL"), 12, " ") AS "xa_state ",');
SET @columns = CONCAT(@columns, ' RPAD(IFNULL(gtid, "NULL"), 38, " ") AS "gtid ",');
SET @columns = CONCAT(@columns, ' RPAD(access_mode, 11, " ") AS access_mode,');
SET @columns = CONCAT(@columns, ' RPAD(isolation_level, 16, " ") AS "isolation_level ",');
SET @columns = CONCAT(@columns, ' RPAD(autocommit, 10, " ") AS autocommit,');
SET @columns = CONCAT(@columns, ' LPAD(number_of_savepoints, 10, " ") AS savepoints,');
SET @columns = CONCAT(@columns, ' LPAD(number_of_rollback_to_savepoint, 21, " ") AS rollback_to_savepoint,');
SET @columns = CONCAT(@columns, ' LPAD(number_of_release_savepoint, 17, " ") AS release_savepoint');
# SET @query3 = CONCAT('SELECT " " AS "ACTUAL ", ', @columns, ' FROM ', table_name, ' ORDER BY event_id;');
SET @query3 = CONCAT('SELECT', ' LPAD(@actual, 13, " ") AS "ROWS_ACTUAL ",', @columns, ' FROM ', table_name, ' ORDER BY event_id;');
PREPARE stmt3 FROM @query3;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
END IF;
END$$
DELIMITER ;$$
--enable_result_log
|