1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-03 05:41:09 +03:00

Merge from mysql-5.5-bugfixing to mysql-5.5-runtime.

This commit is contained in:
Jon Olav Hauglid
2010-08-13 10:43:26 +02:00
89 changed files with 1503 additions and 2506 deletions

View File

@@ -209,6 +209,9 @@ static void add_one_option(DYNAMIC_STRING* ds,
case GET_STR:
arg= argument;
break;
case GET_BOOL:
arg= (*(my_bool *)opt->value) ? "1" : "0";
break;
default:
die("internal error at %s: %d",__FILE__, __LINE__);
}

View File

@@ -200,7 +200,7 @@ if (`SELECT $CRC_ARG_type = 1`) {
if (`SELECT $CRC_ARG_type = 2`) {
# It will be unsafe to call this procedure.
--let $CRC_name= proc_$CRC_ARG_level
--let $CRC_create= CREATE PROCEDURE $CRC_name() BEGIN INSERT INTO ta$CRC_ARG_level VALUES (47); $CRC_ARG_stmt_sidef; END
--let $CRC_create= CREATE PROCEDURE $CRC_name() BEGIN $CRC_ARG_stmt_sidef; INSERT INTO ta$CRC_ARG_level VALUES (47); END
--let $CRC_RET_stmt_sidef= CALL $CRC_name()
--let $CRC_RET_value=
--let $CRC_RET_sel_retval=
@@ -344,25 +344,8 @@ if (`SELECT '$CRC_RET_stmt_sidef' != ''`) {
if (`SELECT '$event_type' != 'Table_map'`) {
--enable_query_log
--echo ******** Failure! Event number 3 was a '$event_type', not a 'Table_map'. ********
# Currently, there is a bug causing some statements to be logged
# partially in statement format. Hence, we don't fail here, we
# just print the events (masking out nondeterministic components
# of the output) and continue. When binloggging works perfectly,
# we should instead execute:
#--enable_query_log
#SHOW BINLOG EVENTS;
#--die Wrong events in binlog.
# Here, we should really source
# include/show_binlog_events.inc. But due to BUG#41913, that
# doesn't work, and we have to inline the entire file here. Sigh
# :-(
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 107 <binlog_start>
--replace_column 2 # 4 # 5 #
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/
--eval SHOW BINLOG EVENTS FROM 107
--disable_query_log
SHOW BINLOG EVENTS;
--die Wrong events in binlog.
}
SET binlog_format = STATEMENT;

View File

@@ -0,0 +1,30 @@
# Include this in any test using mysql_upgrade
# Can't run test of external client with embedded server
-- source include/not_embedded.inc
# Only run test if "mysql_upgrade" is found
--require r/have_mysql_upgrade.result
--disable_query_log
select LENGTH("$MYSQL_UPGRADE")>0 as have_mysql_upgrade;
--enable_query_log
#
# Hack:
#
# If running with Valgrind ($VALGRIND_TEST <> 0) then the resource
# consumption (CPU) for upgrading a large log table will be intense.
# Therefore, truncate the log table in advance and issue a statement
# that should be logged.
#
if (`SELECT $VALGRIND_TEST`)
{
--disable_query_log
--disable_result_log
--disable_abort_on_error
TRUNCATE TABLE mysql.general_log;
SELECT 1;
--enable_abort_on_error
--enable_result_log
--enable_query_log
}

View File

@@ -0,0 +1,32 @@
#
# Bug#55672 mysql_upgrade dies with internal error
#
mtr.global_suppressions OK
mtr.test_suppressions OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.general_log
Error : You can't use locks with log tables.
status : OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.servers OK
mysql.slow_log
Error : You can't use locks with log tables.
status : OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK

View File

@@ -28,6 +28,25 @@ INSERT INTO t1 VALUES (1,2), (2,3);
UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(1000));
INSERT INTO t1 VALUES (CURRENT_USER());
INSERT INTO t1 VALUES (FOUND_ROWS());
INSERT INTO t1 VALUES (GET_LOCK('tmp', 1));
INSERT INTO t1 VALUES (IS_FREE_LOCK('tmp'));
INSERT INTO t1 VALUES (IS_USED_LOCK('tmp'));
INSERT INTO t1 VALUES (LOAD_FILE('../../std_data/words2.dat'));
INSERT INTO t1 VALUES (MASTER_POS_WAIT('dummy arg', 4711, 1));
INSERT INTO t1 VALUES (RELEASE_LOCK('tmp'));
INSERT INTO t1 VALUES (ROW_COUNT());
INSERT INTO t1 VALUES (SESSION_USER());
INSERT INTO t1 VALUES (SLEEP(1));
INSERT INTO t1 VALUES (SYSDATE());
INSERT INTO t1 VALUES (SYSTEM_USER());
INSERT INTO t1 VALUES (USER());
INSERT INTO t1 VALUES (UUID());
INSERT INTO t1 VALUES (UUID_SHORT());
INSERT INTO t1 VALUES (VERSION());
INSERT INTO t1 VALUES (RAND());
DROP DATABASE b42851;
USE test;
#
@@ -67,8 +86,11 @@ Note 1592 Unsafe statement written to the binary log using statement format sinc
SELECT sf_bug50192();
sf_bug50192()
1
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
SHOW WARNINGS;
Level Code Message
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
DROP FUNCTION sf_bug50192;
DROP TRIGGER tr_bug50192;
DROP TABLE t1, t2;

File diff suppressed because it is too large Load Diff

View File

@@ -72,6 +72,26 @@ UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(1000));
INSERT INTO t1 VALUES (CURRENT_USER()); #marked unsafe before BUG#47995
INSERT INTO t1 VALUES (FOUND_ROWS()); #marked unsafe before BUG#47995
INSERT INTO t1 VALUES (GET_LOCK('tmp', 1)); #marked unsafe in BUG#47995
INSERT INTO t1 VALUES (IS_FREE_LOCK('tmp')); #marked unsafe in BUG#47995
INSERT INTO t1 VALUES (IS_USED_LOCK('tmp')); #marked unsafe in BUG#47995
INSERT INTO t1 VALUES (LOAD_FILE('../../std_data/words2.dat')); #marked unsafe in BUG#39701
INSERT INTO t1 VALUES (MASTER_POS_WAIT('dummy arg', 4711, 1));
INSERT INTO t1 VALUES (RELEASE_LOCK('tmp')); #marked unsafe in BUG#47995
INSERT INTO t1 VALUES (ROW_COUNT()); #marked unsafe before BUG#47995
INSERT INTO t1 VALUES (SESSION_USER()); #marked unsafe before BUG#47995
INSERT INTO t1 VALUES (SLEEP(1)); #marked unsafe in BUG#47995
INSERT INTO t1 VALUES (SYSDATE()); #marked unsafe in BUG#47995
INSERT INTO t1 VALUES (SYSTEM_USER()); #marked unsafe before BUG#47995
INSERT INTO t1 VALUES (USER()); #marked unsafe before BUG#47995
INSERT INTO t1 VALUES (UUID()); #marked unsafe before BUG#47995
INSERT INTO t1 VALUES (UUID_SHORT()); #marked unsafe before BUG#47995
INSERT INTO t1 VALUES (VERSION()); #marked unsafe in BUG#47995
INSERT INTO t1 VALUES (RAND()); #marked unsafe in BUG#49222
# clean up
DROP DATABASE b42851;

View File

@@ -468,6 +468,7 @@ BEGIN
END|
DELIMITER ;|
--echo "One unsafe warning should be issued in the following statement"
--error ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN
SELECT fun_check_log_bin();
--echo "SQL_LOG_BIN should be ON still"
SHOW VARIABLES LIKE "SQL_LOG_BIN";

View File

@@ -11,5 +11,4 @@
##############################################################################
binlog_truncate_innodb : BUG#42643 2009-02-06 mats Changes to InnoDB requires to complete fix for BUG#36763
binlog_unsafe : BUG#50312 2010-01-13 lsoares Warnings for unsafe sub-statement not returned to client
binlog_spurious_ddl_errors : BUG#54195 2010-06-03 alik binlog_spurious_ddl_errors.test fails, thus disabled

View File

@@ -29,6 +29,8 @@ end;
select * from t2 order by a;
a b
call test_cursor();
Warnings:
Error 1329 No data - zero rows fetched, selected, or processed
select * from t2 order by a;
a b
1 10

View File

@@ -25,17 +25,17 @@ update performance_schema.SETUP_CONSUMERS set enabled='YES';
connect (con1, localhost, root, , );
let $con1_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
let $con1_THREAD_ID=`select thread_id from performance_schema.THREADS
where ID in (select connection_id())`;
connect (con2, localhost, root, , );
let $con2_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
let $con2_THREAD_ID=`select thread_id from performance_schema.THREADS
where ID in (select connection_id())`;
connect (con3, localhost, root, , );
let $con3_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
let $con3_THREAD_ID=`select thread_id from performance_schema.THREADS
where ID in (select connection_id())`;
connection default;
@@ -49,6 +49,6 @@ prepare stmt_dump_events from
where thread_id=? order by event_id;";
prepare stmt_dump_thread from
"select name from performance_schema.PROCESSLIST where thread_id=? ;";
"select name from performance_schema.THREADS where thread_id=? ;";
--enable_query_log

View File

@@ -29,20 +29,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
--enable_result_log
# This has a stable output, printing the result:

View File

@@ -4,7 +4,7 @@ update performance_schema.SETUP_INSTRUMENTS set enabled = 'NO';
update performance_schema.SETUP_CONSUMERS set enabled = 'NO';
truncate table performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
truncate table performance_schema.FILE_SUMMARY_BY_INSTANCE;
truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
truncate table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
update performance_schema.SETUP_CONSUMERS set enabled = 'YES';
@@ -49,14 +49,14 @@ OR @dump_all;
EVENT_NAME SUM_NUMBER_OF_BYTES_WRITE SUM(i.SUM_NUMBER_OF_BYTES_WRITE)
"Verifying waits aggregate consistency (instance)"
SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(i.SUM_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
GROUP BY EVENT_NAME
HAVING (e.SUM_TIMER_WAIT < SUM(i.SUM_TIMER_WAIT))
OR @dump_all;
EVENT_NAME SUM_TIMER_WAIT SUM(i.SUM_TIMER_WAIT)
SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(i.MIN_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
GROUP BY EVENT_NAME
HAVING (e.MIN_TIMER_WAIT > MIN(i.MIN_TIMER_WAIT))
@@ -64,7 +64,7 @@ AND (MIN(i.MIN_TIMER_WAIT) != 0)
OR @dump_all;
EVENT_NAME MIN_TIMER_WAIT MIN(i.MIN_TIMER_WAIT)
SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(i.MAX_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
GROUP BY EVENT_NAME
HAVING (e.MAX_TIMER_WAIT < MAX(i.MAX_TIMER_WAIT))
@@ -72,7 +72,7 @@ OR @dump_all;
EVENT_NAME MAX_TIMER_WAIT MAX(i.MAX_TIMER_WAIT)
"Verifying waits aggregate consistency (thread)"
SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(t.SUM_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
USING (EVENT_NAME)
GROUP BY EVENT_NAME
@@ -80,7 +80,7 @@ HAVING (e.SUM_TIMER_WAIT < SUM(t.SUM_TIMER_WAIT))
OR @dump_all;
EVENT_NAME SUM_TIMER_WAIT SUM(t.SUM_TIMER_WAIT)
SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(t.MIN_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
USING (EVENT_NAME)
GROUP BY EVENT_NAME
@@ -89,7 +89,7 @@ AND (MIN(t.MIN_TIMER_WAIT) != 0)
OR @dump_all;
EVENT_NAME MIN_TIMER_WAIT MIN(t.MIN_TIMER_WAIT)
SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(t.MAX_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
USING (EVENT_NAME)
GROUP BY EVENT_NAME

View File

@@ -1,7 +0,0 @@
alter table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME add column foo integer;
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
ALTER TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME ADD INDEX test_index(EVENT_NAME);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME(EVENT_NAME);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'

View File

@@ -0,0 +1,10 @@
alter table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
add column foo integer;
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
truncate table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
ALTER TABLE performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
ADD INDEX test_index(EVENT_NAME);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
CREATE UNIQUE INDEX test_index
ON performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME(EVENT_NAME);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'

View File

@@ -1,7 +0,0 @@
alter table performance_schema.SETUP_OBJECTS add column foo integer;
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
truncate table performance_schema.SETUP_OBJECTS;
ALTER TABLE performance_schema.SETUP_OBJECTS ADD INDEX test_index(OBJECT_NAME);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
CREATE UNIQUE INDEX test_index ON performance_schema.SETUP_OBJECTS(OBJECT_NAME);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'

View File

@@ -1,8 +1,8 @@
alter table performance_schema.PROCESSLIST add column foo integer;
alter table performance_schema.THREADS add column foo integer;
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
truncate table performance_schema.PROCESSLIST;
truncate table performance_schema.THREADS;
ERROR HY000: Invalid performance_schema usage.
ALTER TABLE performance_schema.PROCESSLIST ADD INDEX test_index(ID);
ALTER TABLE performance_schema.THREADS ADD INDEX test_index(ID);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
CREATE UNIQUE INDEX test_index ON performance_schema.PROCESSLIST(ID);
CREATE UNIQUE INDEX test_index ON performance_schema.THREADS(ID);
ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'

View File

@@ -1,28 +0,0 @@
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
where event_name like 'Wait/Synch/%' limit 1;
EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
# # # # # #
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
where event_name='FOO';
EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
insert into performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
set event_name='FOO', count_star=1, sum_timer_wait=2, min_timer_wait=3,
avg_timer_wait=4, max_timer_wait=5;
ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
update performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
set count_star=12;
ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
update performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
set count_star=12 where event_name like "FOO";
ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
where count_star=1;
ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME READ;
ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
UNLOCK TABLES;
LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME WRITE;
ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
UNLOCK TABLES;

View File

@@ -0,0 +1,28 @@
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
where event_name like 'Wait/Synch/%' limit 1;
EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
# # # # # #
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
where event_name='FOO';
EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
insert into performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
set event_name='FOO', count_star=1, sum_timer_wait=2, min_timer_wait=3,
avg_timer_wait=4, max_timer_wait=5;
ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
update performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
set count_star=12;
ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
update performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
set count_star=12 where event_name like "FOO";
ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
delete from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
where count_star=1;
ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
delete from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME READ;
ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
UNLOCK TABLES;
LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME WRITE;
ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
UNLOCK TABLES;

View File

@@ -1,35 +0,0 @@
select * from performance_schema.SETUP_OBJECTS;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED AGGREGATED
select * from performance_schema.SETUP_OBJECTS
where object_type = 'TABLE';
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED AGGREGATED
select * from performance_schema.SETUP_OBJECTS
where enabled='YES';
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED AGGREGATED
insert into performance_schema.SETUP_OBJECTS
set object_type='TABLE', object_schema='FOO', object_name='BAR',
enabled='YES', timed='YES', aggregated='YES';
ERROR HY000: Table storage engine for 'SETUP_OBJECTS' doesn't have this option
update performance_schema.SETUP_OBJECTS
set object_type='TABLE';
update performance_schema.SETUP_OBJECTS
set object_schema='ILLEGAL';
update performance_schema.SETUP_OBJECTS
set object_name='ILLEGAL';
update performance_schema.SETUP_OBJECTS
set enabled='NO';
update performance_schema.SETUP_OBJECTS
set timed='NO';
update performance_schema.SETUP_OBJECTS
set aggregated='NO';
select * from performance_schema.SETUP_OBJECTS;
OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED AGGREGATED
update performance_schema.SETUP_OBJECTS
set enabled='YES', timed='YES', aggregated='YES';
delete from performance_schema.SETUP_OBJECTS
where object_type = 'TABLE';
delete from performance_schema.SETUP_OBJECTS;
LOCK TABLES performance_schema.SETUP_OBJECTS READ;
UNLOCK TABLES;
LOCK TABLES performance_schema.SETUP_OBJECTS WRITE;
UNLOCK TABLES;

View File

@@ -1,27 +1,27 @@
select * from performance_schema.PROCESSLIST
select * from performance_schema.THREADS
where name like 'Thread/%' limit 1;
THREAD_ID ID NAME
# # #
select * from performance_schema.PROCESSLIST
select * from performance_schema.THREADS
where name='FOO';
THREAD_ID ID NAME
insert into performance_schema.PROCESSLIST
insert into performance_schema.THREADS
set name='FOO', thread_id=1, id=2;
ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'PROCESSLIST'
update performance_schema.PROCESSLIST
ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'THREADS'
update performance_schema.THREADS
set thread_id=12;
ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'PROCESSLIST'
update performance_schema.PROCESSLIST
ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'THREADS'
update performance_schema.THREADS
set thread_id=12 where name like "FOO";
ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'PROCESSLIST'
delete from performance_schema.PROCESSLIST
ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'THREADS'
delete from performance_schema.THREADS
where id=1;
ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'PROCESSLIST'
delete from performance_schema.PROCESSLIST;
ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'PROCESSLIST'
LOCK TABLES performance_schema.PROCESSLIST READ;
ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'PROCESSLIST'
ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'THREADS'
delete from performance_schema.THREADS;
ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'THREADS'
LOCK TABLES performance_schema.THREADS READ;
ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'THREADS'
UNLOCK TABLES;
LOCK TABLES performance_schema.PROCESSLIST WRITE;
ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'PROCESSLIST'
LOCK TABLES performance_schema.THREADS WRITE;
ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'THREADS'
UNLOCK TABLES;

View File

@@ -90,27 +90,27 @@ SUM(SUM_NUMBER_OF_BYTES_WRITE) AS sum_num_bytes_write
FROM performance_schema.FILE_SUMMARY_BY_INSTANCE
WHERE FILE_NAME LIKE CONCAT('%', @@tmpdir, '%') ORDER BY NULL;
SELECT EVENT_NAME, COUNT_STAR, AVG_TIMER_WAIT, SUM_TIMER_WAIT
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
WHERE COUNT_STAR > 0
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;
SELECT i.user, SUM(TIMER_WAIT) SUM_WAIT
# ((TIME_TO_SEC(TIMEDIFF(NOW(), i.startup_time)) * 1000) / SUM(TIMER_WAIT)) * 100 WAIT_PERCENTAGE
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
LEFT JOIN information_schema.PROCESSLIST i USING (ID)
GROUP BY i.user
ORDER BY SUM_WAIT DESC
LIMIT 20;
SELECT h.EVENT_NAME, SUM(h.TIMER_WAIT) TOTAL_WAIT
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
WHERE p.ID = 1
GROUP BY h.EVENT_NAME
HAVING TOTAL_WAIT > 0;
SELECT i.user, h.operation, SUM(NUMBER_OF_BYTES) bytes
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
LEFT JOIN information_schema.PROCESSLIST i USING (ID)
GROUP BY i.user, h.operation
HAVING BYTES > 0

View File

@@ -6,20 +6,19 @@ performance_schema COND_INSTANCES def
performance_schema EVENTS_WAITS_CURRENT def
performance_schema EVENTS_WAITS_HISTORY def
performance_schema EVENTS_WAITS_HISTORY_LONG def
performance_schema EVENTS_WAITS_SUMMARY_BY_EVENT_NAME def
performance_schema EVENTS_WAITS_SUMMARY_BY_INSTANCE def
performance_schema EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME def
performance_schema EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME def
performance_schema FILE_INSTANCES def
performance_schema FILE_SUMMARY_BY_EVENT_NAME def
performance_schema FILE_SUMMARY_BY_INSTANCE def
performance_schema MUTEX_INSTANCES def
performance_schema PERFORMANCE_TIMERS def
performance_schema PROCESSLIST def
performance_schema RWLOCK_INSTANCES def
performance_schema SETUP_CONSUMERS def
performance_schema SETUP_INSTRUMENTS def
performance_schema SETUP_OBJECTS def
performance_schema SETUP_TIMERS def
performance_schema THREADS def
select upper(TABLE_NAME), TABLE_TYPE, ENGINE
from information_schema.tables
where TABLE_SCHEMA='performance_schema';
@@ -28,20 +27,19 @@ COND_INSTANCES BASE TABLE PERFORMANCE_SCHEMA
EVENTS_WAITS_CURRENT BASE TABLE PERFORMANCE_SCHEMA
EVENTS_WAITS_HISTORY BASE TABLE PERFORMANCE_SCHEMA
EVENTS_WAITS_HISTORY_LONG BASE TABLE PERFORMANCE_SCHEMA
EVENTS_WAITS_SUMMARY_BY_EVENT_NAME BASE TABLE PERFORMANCE_SCHEMA
EVENTS_WAITS_SUMMARY_BY_INSTANCE BASE TABLE PERFORMANCE_SCHEMA
EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME BASE TABLE PERFORMANCE_SCHEMA
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME BASE TABLE PERFORMANCE_SCHEMA
FILE_INSTANCES BASE TABLE PERFORMANCE_SCHEMA
FILE_SUMMARY_BY_EVENT_NAME BASE TABLE PERFORMANCE_SCHEMA
FILE_SUMMARY_BY_INSTANCE BASE TABLE PERFORMANCE_SCHEMA
MUTEX_INSTANCES BASE TABLE PERFORMANCE_SCHEMA
PERFORMANCE_TIMERS BASE TABLE PERFORMANCE_SCHEMA
PROCESSLIST BASE TABLE PERFORMANCE_SCHEMA
RWLOCK_INSTANCES BASE TABLE PERFORMANCE_SCHEMA
SETUP_CONSUMERS BASE TABLE PERFORMANCE_SCHEMA
SETUP_INSTRUMENTS BASE TABLE PERFORMANCE_SCHEMA
SETUP_OBJECTS BASE TABLE PERFORMANCE_SCHEMA
SETUP_TIMERS BASE TABLE PERFORMANCE_SCHEMA
THREADS BASE TABLE PERFORMANCE_SCHEMA
select upper(TABLE_NAME), VERSION, ROW_FORMAT
from information_schema.tables
where TABLE_SCHEMA='performance_schema';
@@ -50,20 +48,19 @@ COND_INSTANCES 10 Dynamic
EVENTS_WAITS_CURRENT 10 Dynamic
EVENTS_WAITS_HISTORY 10 Dynamic
EVENTS_WAITS_HISTORY_LONG 10 Dynamic
EVENTS_WAITS_SUMMARY_BY_EVENT_NAME 10 Dynamic
EVENTS_WAITS_SUMMARY_BY_INSTANCE 10 Dynamic
EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME 10 Dynamic
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME 10 Dynamic
FILE_INSTANCES 10 Dynamic
FILE_SUMMARY_BY_EVENT_NAME 10 Dynamic
FILE_SUMMARY_BY_INSTANCE 10 Dynamic
MUTEX_INSTANCES 10 Dynamic
PERFORMANCE_TIMERS 10 Fixed
PROCESSLIST 10 Dynamic
RWLOCK_INSTANCES 10 Dynamic
SETUP_CONSUMERS 10 Dynamic
SETUP_INSTRUMENTS 10 Dynamic
SETUP_OBJECTS 10 Dynamic
SETUP_TIMERS 10 Dynamic
THREADS 10 Dynamic
select upper(TABLE_NAME), TABLE_ROWS, AVG_ROW_LENGTH
from information_schema.tables
where TABLE_SCHEMA='performance_schema';
@@ -72,20 +69,19 @@ COND_INSTANCES 1000 0
EVENTS_WAITS_CURRENT 1000 0
EVENTS_WAITS_HISTORY 1000 0
EVENTS_WAITS_HISTORY_LONG 10000 0
EVENTS_WAITS_SUMMARY_BY_EVENT_NAME 1000 0
EVENTS_WAITS_SUMMARY_BY_INSTANCE 1000 0
EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME 1000 0
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME 1000 0
FILE_INSTANCES 1000 0
FILE_SUMMARY_BY_EVENT_NAME 1000 0
FILE_SUMMARY_BY_INSTANCE 1000 0
MUTEX_INSTANCES 1000 0
PERFORMANCE_TIMERS 5 0
PROCESSLIST 1000 0
RWLOCK_INSTANCES 1000 0
SETUP_CONSUMERS 8 0
SETUP_INSTRUMENTS 1000 0
SETUP_OBJECTS 1000 0
SETUP_TIMERS 1 0
THREADS 1000 0
select upper(TABLE_NAME), DATA_LENGTH, MAX_DATA_LENGTH
from information_schema.tables
where TABLE_SCHEMA='performance_schema';
@@ -94,20 +90,19 @@ COND_INSTANCES 0 0
EVENTS_WAITS_CURRENT 0 0
EVENTS_WAITS_HISTORY 0 0
EVENTS_WAITS_HISTORY_LONG 0 0
EVENTS_WAITS_SUMMARY_BY_EVENT_NAME 0 0
EVENTS_WAITS_SUMMARY_BY_INSTANCE 0 0
EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME 0 0
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME 0 0
FILE_INSTANCES 0 0
FILE_SUMMARY_BY_EVENT_NAME 0 0
FILE_SUMMARY_BY_INSTANCE 0 0
MUTEX_INSTANCES 0 0
PERFORMANCE_TIMERS 0 0
PROCESSLIST 0 0
RWLOCK_INSTANCES 0 0
SETUP_CONSUMERS 0 0
SETUP_INSTRUMENTS 0 0
SETUP_OBJECTS 0 0
SETUP_TIMERS 0 0
THREADS 0 0
select upper(TABLE_NAME), INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT
from information_schema.tables
where TABLE_SCHEMA='performance_schema';
@@ -116,20 +111,19 @@ COND_INSTANCES 0 0 NULL
EVENTS_WAITS_CURRENT 0 0 NULL
EVENTS_WAITS_HISTORY 0 0 NULL
EVENTS_WAITS_HISTORY_LONG 0 0 NULL
EVENTS_WAITS_SUMMARY_BY_EVENT_NAME 0 0 NULL
EVENTS_WAITS_SUMMARY_BY_INSTANCE 0 0 NULL
EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME 0 0 NULL
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME 0 0 NULL
FILE_INSTANCES 0 0 NULL
FILE_SUMMARY_BY_EVENT_NAME 0 0 NULL
FILE_SUMMARY_BY_INSTANCE 0 0 NULL
MUTEX_INSTANCES 0 0 NULL
PERFORMANCE_TIMERS 0 0 NULL
PROCESSLIST 0 0 NULL
RWLOCK_INSTANCES 0 0 NULL
SETUP_CONSUMERS 0 0 NULL
SETUP_INSTRUMENTS 0 0 NULL
SETUP_OBJECTS 0 0 NULL
SETUP_TIMERS 0 0 NULL
THREADS 0 0 NULL
select upper(TABLE_NAME), CREATE_TIME, UPDATE_TIME, CHECK_TIME
from information_schema.tables
where TABLE_SCHEMA='performance_schema';
@@ -138,20 +132,19 @@ COND_INSTANCES NULL NULL NULL
EVENTS_WAITS_CURRENT NULL NULL NULL
EVENTS_WAITS_HISTORY NULL NULL NULL
EVENTS_WAITS_HISTORY_LONG NULL NULL NULL
EVENTS_WAITS_SUMMARY_BY_EVENT_NAME NULL NULL NULL
EVENTS_WAITS_SUMMARY_BY_INSTANCE NULL NULL NULL
EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME NULL NULL NULL
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME NULL NULL NULL
FILE_INSTANCES NULL NULL NULL
FILE_SUMMARY_BY_EVENT_NAME NULL NULL NULL
FILE_SUMMARY_BY_INSTANCE NULL NULL NULL
MUTEX_INSTANCES NULL NULL NULL
PERFORMANCE_TIMERS NULL NULL NULL
PROCESSLIST NULL NULL NULL
RWLOCK_INSTANCES NULL NULL NULL
SETUP_CONSUMERS NULL NULL NULL
SETUP_INSTRUMENTS NULL NULL NULL
SETUP_OBJECTS NULL NULL NULL
SETUP_TIMERS NULL NULL NULL
THREADS NULL NULL NULL
select upper(TABLE_NAME), TABLE_COLLATION, CHECKSUM
from information_schema.tables
where TABLE_SCHEMA='performance_schema';
@@ -160,20 +153,19 @@ COND_INSTANCES utf8_general_ci NULL
EVENTS_WAITS_CURRENT utf8_general_ci NULL
EVENTS_WAITS_HISTORY utf8_general_ci NULL
EVENTS_WAITS_HISTORY_LONG utf8_general_ci NULL
EVENTS_WAITS_SUMMARY_BY_EVENT_NAME utf8_general_ci NULL
EVENTS_WAITS_SUMMARY_BY_INSTANCE utf8_general_ci NULL
EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME utf8_general_ci NULL
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME utf8_general_ci NULL
FILE_INSTANCES utf8_general_ci NULL
FILE_SUMMARY_BY_EVENT_NAME utf8_general_ci NULL
FILE_SUMMARY_BY_INSTANCE utf8_general_ci NULL
MUTEX_INSTANCES utf8_general_ci NULL
PERFORMANCE_TIMERS utf8_general_ci NULL
PROCESSLIST utf8_general_ci NULL
RWLOCK_INSTANCES utf8_general_ci NULL
SETUP_CONSUMERS utf8_general_ci NULL
SETUP_INSTRUMENTS utf8_general_ci NULL
SETUP_OBJECTS utf8_general_ci NULL
SETUP_TIMERS utf8_general_ci NULL
THREADS utf8_general_ci NULL
select upper(TABLE_NAME), TABLE_COMMENT
from information_schema.tables
where TABLE_SCHEMA='performance_schema';
@@ -182,17 +174,16 @@ COND_INSTANCES
EVENTS_WAITS_CURRENT
EVENTS_WAITS_HISTORY
EVENTS_WAITS_HISTORY_LONG
EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
EVENTS_WAITS_SUMMARY_BY_INSTANCE
EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
FILE_INSTANCES
FILE_SUMMARY_BY_EVENT_NAME
FILE_SUMMARY_BY_INSTANCE
MUTEX_INSTANCES
PERFORMANCE_TIMERS
PROCESSLIST
RWLOCK_INSTANCES
SETUP_CONSUMERS
SETUP_INSTRUMENTS
SETUP_OBJECTS
SETUP_TIMERS
THREADS

View File

@@ -1,6 +1,6 @@
SELECT EVENT_ID FROM performance_schema.EVENTS_WAITS_CURRENT
WHERE THREAD_ID IN
(SELECT THREAD_ID FROM performance_schema.PROCESSLIST)
(SELECT THREAD_ID FROM performance_schema.THREADS)
AND EVENT_NAME IN
(SELECT NAME FROM performance_schema.SETUP_INSTRUMENTS
WHERE NAME LIKE "wait/synch/%")

View File

@@ -17,11 +17,11 @@ show variables like "performance_schema_max_thread%";
Variable_name Value
performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 10
select count(*) from performance_schema.PROCESSLIST
select count(*) from performance_schema.THREADS
where name like "thread/sql/main";
count(*)
1
select count(*) from performance_schema.PROCESSLIST
select count(*) from performance_schema.THREADS
where name like "thread/sql/OneConnection";
count(*)
0

View File

@@ -12,21 +12,20 @@ ERROR 1050 (42S01) at line 183: Table 'COND_INSTANCES' already exists
ERROR 1050 (42S01) at line 213: Table 'EVENTS_WAITS_CURRENT' already exists
ERROR 1050 (42S01) at line 227: Table 'EVENTS_WAITS_HISTORY' already exists
ERROR 1050 (42S01) at line 241: Table 'EVENTS_WAITS_HISTORY_LONG' already exists
ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 282: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 262: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 283: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 320: Table 'FILE_INSTANCES' already exists
ERROR 1050 (42S01) at line 339: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 376: Table 'MUTEX_INSTANCES' already exists
ERROR 1050 (42S01) at line 394: Table 'PERFORMANCE_TIMERS' already exists
ERROR 1050 (42S01) at line 411: Table 'PROCESSLIST' already exists
ERROR 1050 (42S01) at line 429: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 445: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 462: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 482: Table 'SETUP_OBJECTS' already exists
ERROR 1050 (42S01) at line 498: Table 'SETUP_TIMERS' already exists
ERROR 1644 (HY000) at line 1138: Unexpected content found in the performance_schema database.
ERROR 1050 (42S01) at line 412: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 428: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 445: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 461: Table 'SETUP_TIMERS' already exists
ERROR 1050 (42S01) at line 478: Table 'THREADS' already exists
ERROR 1644 (HY000) at line 1118: Unexpected content found in the performance_schema database.
FATAL ERROR: Upgrade failed
show tables like "user_table";
Tables_in_performance_schema (user_table)
@@ -43,21 +42,20 @@ ERROR 1050 (42S01) at line 183: Table 'COND_INSTANCES' already exists
ERROR 1050 (42S01) at line 213: Table 'EVENTS_WAITS_CURRENT' already exists
ERROR 1050 (42S01) at line 227: Table 'EVENTS_WAITS_HISTORY' already exists
ERROR 1050 (42S01) at line 241: Table 'EVENTS_WAITS_HISTORY_LONG' already exists
ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 282: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 262: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 283: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 320: Table 'FILE_INSTANCES' already exists
ERROR 1050 (42S01) at line 339: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 376: Table 'MUTEX_INSTANCES' already exists
ERROR 1050 (42S01) at line 394: Table 'PERFORMANCE_TIMERS' already exists
ERROR 1050 (42S01) at line 411: Table 'PROCESSLIST' already exists
ERROR 1050 (42S01) at line 429: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 445: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 462: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 482: Table 'SETUP_OBJECTS' already exists
ERROR 1050 (42S01) at line 498: Table 'SETUP_TIMERS' already exists
ERROR 1644 (HY000) at line 1138: Unexpected content found in the performance_schema database.
ERROR 1050 (42S01) at line 412: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 428: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 445: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 461: Table 'SETUP_TIMERS' already exists
ERROR 1050 (42S01) at line 478: Table 'THREADS' already exists
ERROR 1644 (HY000) at line 1118: Unexpected content found in the performance_schema database.
FATAL ERROR: Upgrade failed
show tables like "user_view";
Tables_in_performance_schema (user_view)
@@ -72,21 +70,20 @@ ERROR 1050 (42S01) at line 183: Table 'COND_INSTANCES' already exists
ERROR 1050 (42S01) at line 213: Table 'EVENTS_WAITS_CURRENT' already exists
ERROR 1050 (42S01) at line 227: Table 'EVENTS_WAITS_HISTORY' already exists
ERROR 1050 (42S01) at line 241: Table 'EVENTS_WAITS_HISTORY_LONG' already exists
ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 282: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 262: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 283: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 320: Table 'FILE_INSTANCES' already exists
ERROR 1050 (42S01) at line 339: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 376: Table 'MUTEX_INSTANCES' already exists
ERROR 1050 (42S01) at line 394: Table 'PERFORMANCE_TIMERS' already exists
ERROR 1050 (42S01) at line 411: Table 'PROCESSLIST' already exists
ERROR 1050 (42S01) at line 429: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 445: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 462: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 482: Table 'SETUP_OBJECTS' already exists
ERROR 1050 (42S01) at line 498: Table 'SETUP_TIMERS' already exists
ERROR 1644 (HY000) at line 1138: Unexpected content found in the performance_schema database.
ERROR 1050 (42S01) at line 412: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 428: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 445: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 461: Table 'SETUP_TIMERS' already exists
ERROR 1050 (42S01) at line 478: Table 'THREADS' already exists
ERROR 1644 (HY000) at line 1118: Unexpected content found in the performance_schema database.
FATAL ERROR: Upgrade failed
select name from mysql.proc where db='performance_schema';
name
@@ -101,21 +98,20 @@ ERROR 1050 (42S01) at line 183: Table 'COND_INSTANCES' already exists
ERROR 1050 (42S01) at line 213: Table 'EVENTS_WAITS_CURRENT' already exists
ERROR 1050 (42S01) at line 227: Table 'EVENTS_WAITS_HISTORY' already exists
ERROR 1050 (42S01) at line 241: Table 'EVENTS_WAITS_HISTORY_LONG' already exists
ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 282: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 262: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 283: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 320: Table 'FILE_INSTANCES' already exists
ERROR 1050 (42S01) at line 339: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 376: Table 'MUTEX_INSTANCES' already exists
ERROR 1050 (42S01) at line 394: Table 'PERFORMANCE_TIMERS' already exists
ERROR 1050 (42S01) at line 411: Table 'PROCESSLIST' already exists
ERROR 1050 (42S01) at line 429: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 445: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 462: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 482: Table 'SETUP_OBJECTS' already exists
ERROR 1050 (42S01) at line 498: Table 'SETUP_TIMERS' already exists
ERROR 1644 (HY000) at line 1138: Unexpected content found in the performance_schema database.
ERROR 1050 (42S01) at line 412: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 428: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 445: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 461: Table 'SETUP_TIMERS' already exists
ERROR 1050 (42S01) at line 478: Table 'THREADS' already exists
ERROR 1644 (HY000) at line 1118: Unexpected content found in the performance_schema database.
FATAL ERROR: Upgrade failed
select name from mysql.proc where db='performance_schema';
name
@@ -130,21 +126,20 @@ ERROR 1050 (42S01) at line 183: Table 'COND_INSTANCES' already exists
ERROR 1050 (42S01) at line 213: Table 'EVENTS_WAITS_CURRENT' already exists
ERROR 1050 (42S01) at line 227: Table 'EVENTS_WAITS_HISTORY' already exists
ERROR 1050 (42S01) at line 241: Table 'EVENTS_WAITS_HISTORY_LONG' already exists
ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 282: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 262: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 283: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 320: Table 'FILE_INSTANCES' already exists
ERROR 1050 (42S01) at line 339: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 376: Table 'MUTEX_INSTANCES' already exists
ERROR 1050 (42S01) at line 394: Table 'PERFORMANCE_TIMERS' already exists
ERROR 1050 (42S01) at line 411: Table 'PROCESSLIST' already exists
ERROR 1050 (42S01) at line 429: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 445: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 462: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 482: Table 'SETUP_OBJECTS' already exists
ERROR 1050 (42S01) at line 498: Table 'SETUP_TIMERS' already exists
ERROR 1644 (HY000) at line 1138: Unexpected content found in the performance_schema database.
ERROR 1050 (42S01) at line 412: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 428: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 445: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 461: Table 'SETUP_TIMERS' already exists
ERROR 1050 (42S01) at line 478: Table 'THREADS' already exists
ERROR 1644 (HY000) at line 1118: Unexpected content found in the performance_schema database.
FATAL ERROR: Upgrade failed
select name from mysql.event where db='performance_schema';
name

View File

@@ -12,20 +12,19 @@ COND_INSTANCES
EVENTS_WAITS_CURRENT
EVENTS_WAITS_HISTORY
EVENTS_WAITS_HISTORY_LONG
EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
EVENTS_WAITS_SUMMARY_BY_INSTANCE
EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
FILE_INSTANCES
FILE_SUMMARY_BY_EVENT_NAME
FILE_SUMMARY_BY_INSTANCE
MUTEX_INSTANCES
PERFORMANCE_TIMERS
PROCESSLIST
RWLOCK_INSTANCES
SETUP_CONSUMERS
SETUP_INSTRUMENTS
SETUP_OBJECTS
SETUP_TIMERS
THREADS
show create table COND_INSTANCES;
Table Create Table
COND_INSTANCES CREATE TABLE `COND_INSTANCES` (
@@ -92,16 +91,6 @@ EVENTS_WAITS_HISTORY_LONG CREATE TABLE `EVENTS_WAITS_HISTORY_LONG` (
`NUMBER_OF_BYTES` bigint(20) unsigned DEFAULT NULL,
`FLAGS` int(10) unsigned DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
Table Create Table
EVENTS_WAITS_SUMMARY_BY_EVENT_NAME CREATE TABLE `EVENTS_WAITS_SUMMARY_BY_EVENT_NAME` (
`EVENT_NAME` varchar(128) NOT NULL,
`COUNT_STAR` bigint(20) unsigned NOT NULL,
`SUM_TIMER_WAIT` bigint(20) unsigned NOT NULL,
`MIN_TIMER_WAIT` bigint(20) unsigned NOT NULL,
`AVG_TIMER_WAIT` bigint(20) unsigned NOT NULL,
`MAX_TIMER_WAIT` bigint(20) unsigned NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table EVENTS_WAITS_SUMMARY_BY_INSTANCE;
Table Create Table
EVENTS_WAITS_SUMMARY_BY_INSTANCE CREATE TABLE `EVENTS_WAITS_SUMMARY_BY_INSTANCE` (
@@ -124,6 +113,16 @@ EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME CREATE TABLE `EVENTS_WAITS_SUMMARY_
`AVG_TIMER_WAIT` bigint(20) unsigned NOT NULL,
`MAX_TIMER_WAIT` bigint(20) unsigned NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
Table Create Table
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME CREATE TABLE `EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME` (
`EVENT_NAME` varchar(128) NOT NULL,
`COUNT_STAR` bigint(20) unsigned NOT NULL,
`SUM_TIMER_WAIT` bigint(20) unsigned NOT NULL,
`MIN_TIMER_WAIT` bigint(20) unsigned NOT NULL,
`AVG_TIMER_WAIT` bigint(20) unsigned NOT NULL,
`MAX_TIMER_WAIT` bigint(20) unsigned NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table FILE_INSTANCES;
Table Create Table
FILE_INSTANCES CREATE TABLE `FILE_INSTANCES` (
@@ -165,13 +164,6 @@ PERFORMANCE_TIMERS CREATE TABLE `PERFORMANCE_TIMERS` (
`TIMER_RESOLUTION` bigint(20) DEFAULT NULL,
`TIMER_OVERHEAD` bigint(20) DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table PROCESSLIST;
Table Create Table
PROCESSLIST CREATE TABLE `PROCESSLIST` (
`THREAD_ID` int(11) NOT NULL,
`ID` int(11) NOT NULL,
`NAME` varchar(64) NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table RWLOCK_INSTANCES;
Table Create Table
RWLOCK_INSTANCES CREATE TABLE `RWLOCK_INSTANCES` (
@@ -193,19 +185,16 @@ SETUP_INSTRUMENTS CREATE TABLE `SETUP_INSTRUMENTS` (
`ENABLED` enum('YES','NO') NOT NULL,
`TIMED` enum('YES','NO') NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table SETUP_OBJECTS;
Table Create Table
SETUP_OBJECTS CREATE TABLE `SETUP_OBJECTS` (
`OBJECT_TYPE` varchar(64) DEFAULT NULL,
`OBJECT_SCHEMA` varchar(64) DEFAULT NULL,
`OBJECT_NAME` varchar(64) DEFAULT NULL,
`ENABLED` enum('YES','NO') NOT NULL,
`TIMED` enum('YES','NO') NOT NULL,
`AGGREGATED` enum('YES','NO') NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table SETUP_TIMERS;
Table Create Table
SETUP_TIMERS CREATE TABLE `SETUP_TIMERS` (
`NAME` varchar(64) NOT NULL,
`TIMER_NAME` enum('CYCLE','NANOSECOND','MICROSECOND','MILLISECOND','TICK') NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
show create table THREADS;
Table Create Table
THREADS CREATE TABLE `THREADS` (
`THREAD_ID` int(11) NOT NULL,
`ID` int(11) NOT NULL,
`NAME` varchar(64) NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8

View File

@@ -13,7 +13,7 @@ OPERATION TOTAL
chsize [NUM_BYTES]
SELECT EVENT_ID FROM performance_schema.EVENTS_WAITS_CURRENT
WHERE THREAD_ID IN
(SELECT THREAD_ID FROM performance_schema.PROCESSLIST)
(SELECT THREAD_ID FROM performance_schema.THREADS)
AND EVENT_NAME IN
(SELECT NAME FROM performance_schema.SETUP_INSTRUMENTS
WHERE NAME LIKE "wait/synch/%")
@@ -86,7 +86,7 @@ DROP TRIGGER t_ps_trigger;
DROP PROCEDURE IF EXISTS t_ps_proc;
CREATE PROCEDURE t_ps_proc(IN tid INT, OUT pid INT)
BEGIN
SELECT id FROM performance_schema.PROCESSLIST
SELECT id FROM performance_schema.THREADS
WHERE THREAD_ID = tid INTO pid;
END;
|
@@ -94,7 +94,7 @@ CALL t_ps_proc(0, @p_id);
DROP FUNCTION IF EXISTS t_ps_proc;
CREATE FUNCTION t_ps_func(tid INT) RETURNS int
BEGIN
return (SELECT id FROM performance_schema.PROCESSLIST
return (SELECT id FROM performance_schema.THREADS
WHERE THREAD_ID = tid);
END;
|

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema ON

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema ON

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema ON

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema ON

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema ON

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema ON

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema ON

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema ON

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema ON
@@ -66,7 +65,7 @@ select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_THREAD_CLASSES_LOST';
variable_value > 0
1
select count(*) from performance_schema.PROCESSLIST;
select count(*) from performance_schema.THREADS;
count(*)
0
show status like "performance_schema_thread_instances_lost";

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema ON
@@ -64,7 +63,7 @@ Performance_schema_thread_classes_lost 0
show variables like "performance_schema_max_thread_instances";
Variable_name Value
performance_schema_max_thread_instances 0
select count(*) from performance_schema.PROCESSLIST;
select count(*) from performance_schema.THREADS;
count(*)
0
select variable_value > 0 from information_schema.global_status

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema OFF

View File

@@ -21,20 +21,19 @@ select * from performance_schema.COND_INSTANCES;
select * from performance_schema.EVENTS_WAITS_CURRENT;
select * from performance_schema.EVENTS_WAITS_HISTORY;
select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
select * from performance_schema.FILE_INSTANCES;
select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
select * from performance_schema.MUTEX_INSTANCES;
select * from performance_schema.PERFORMANCE_TIMERS;
select * from performance_schema.PROCESSLIST;
select * from performance_schema.RWLOCK_INSTANCES;
select * from performance_schema.SETUP_CONSUMERS;
select * from performance_schema.SETUP_INSTRUMENTS;
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_TIMERS;
select * from performance_schema.THREADS;
show variables like "performance_schema%";
Variable_name Value
performance_schema ON

View File

@@ -31,7 +31,7 @@ update performance_schema.SETUP_CONSUMERS set enabled = 'NO';
# Cleanup statistics
truncate table performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
truncate table performance_schema.FILE_SUMMARY_BY_INSTANCE;
truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
truncate table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
@@ -66,9 +66,9 @@ set @dump_all=FALSE;
# because doing so removes a row in FILE_SUMMARY_BY_INSTANCE.
# Likewise:
# - COUNT/SUM/MAX(EVENTS_WAITS_SUMMARY_BY_EVENT_NAME) >=
# - COUNT/SUM/MAX(EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME) >=
# COUNT/SUM/MAX(EVENTS_WAITS_SUMMARY_BY_INSTANCE)
# - MIN(EVENTS_WAITS_SUMMARY_BY_EVENT_NAME) <=
# - MIN(EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME) <=
# MIN(EVENTS_WAITS_SUMMARY_BY_INSTANCE)
# There will be equality only when an instrument instance
# is not removed, which is next to impossible to predictably guarantee
@@ -80,9 +80,9 @@ set @dump_all=FALSE;
# Both cause a row to be deleted from EVENTS_WAITS_SUMMARY_BY_INSTANCE.
# Likewise:
# - COUNT/SUM/MAX(EVENTS_WAITS_SUMMARY_BY_EVENT_NAME) >=
# - COUNT/SUM/MAX(EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME) >=
# COUNT/SUM/MAX(EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME)
# - MIN(EVENTS_WAITS_SUMMARY_BY_EVENT_NAME) <=
# - MIN(EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME) <=
# MIN(EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME)
# There will be equality only when no thread is removed,
# that is if no thread disconnects, or no sub thread (for example insert
@@ -131,14 +131,14 @@ OR @dump_all;
--echo "Verifying waits aggregate consistency (instance)"
SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(i.SUM_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
GROUP BY EVENT_NAME
HAVING (e.SUM_TIMER_WAIT < SUM(i.SUM_TIMER_WAIT))
OR @dump_all;
SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(i.MIN_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
GROUP BY EVENT_NAME
HAVING (e.MIN_TIMER_WAIT > MIN(i.MIN_TIMER_WAIT))
@@ -146,7 +146,7 @@ AND (MIN(i.MIN_TIMER_WAIT) != 0)
OR @dump_all;
SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(i.MAX_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
GROUP BY EVENT_NAME
HAVING (e.MAX_TIMER_WAIT < MAX(i.MAX_TIMER_WAIT))
@@ -155,7 +155,7 @@ OR @dump_all;
--echo "Verifying waits aggregate consistency (thread)"
SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(t.SUM_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
USING (EVENT_NAME)
GROUP BY EVENT_NAME
@@ -163,7 +163,7 @@ HAVING (e.SUM_TIMER_WAIT < SUM(t.SUM_TIMER_WAIT))
OR @dump_all;
SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(t.MIN_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
USING (EVENT_NAME)
GROUP BY EVENT_NAME
@@ -172,7 +172,7 @@ AND (MIN(t.MIN_TIMER_WAIT) != 0)
OR @dump_all;
SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(t.MAX_TIMER_WAIT)
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME AS e
JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
USING (EVENT_NAME)
GROUP BY EVENT_NAME

View File

@@ -19,13 +19,16 @@
--source include/have_perfschema.inc
-- error ER_DBACCESS_DENIED_ERROR
alter table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME add column foo integer;
alter table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
add column foo integer;
truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
truncate table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
-- error ER_DBACCESS_DENIED_ERROR
ALTER TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME ADD INDEX test_index(EVENT_NAME);
ALTER TABLE performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
ADD INDEX test_index(EVENT_NAME);
-- error ER_DBACCESS_DENIED_ERROR
CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME(EVENT_NAME);
CREATE UNIQUE INDEX test_index
ON performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME(EVENT_NAME);

View File

@@ -1,32 +0,0 @@
# Copyright (C) 2009 Sun Microsystems, Inc
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Tests for PERFORMANCE_SCHEMA
--source include/not_embedded.inc
--source include/have_perfschema.inc
--replace_result '\'setup_objects' '\'SETUP_OBJECTS'
-- error ER_DBACCESS_DENIED_ERROR
alter table performance_schema.SETUP_OBJECTS add column foo integer;
truncate table performance_schema.SETUP_OBJECTS;
-- error ER_DBACCESS_DENIED_ERROR
ALTER TABLE performance_schema.SETUP_OBJECTS ADD INDEX test_index(OBJECT_NAME);
-- error ER_DBACCESS_DENIED_ERROR
CREATE UNIQUE INDEX test_index ON performance_schema.SETUP_OBJECTS(OBJECT_NAME);

View File

@@ -19,14 +19,14 @@
--source include/have_perfschema.inc
-- error ER_DBACCESS_DENIED_ERROR
alter table performance_schema.PROCESSLIST add column foo integer;
alter table performance_schema.THREADS add column foo integer;
-- error ER_WRONG_PERFSCHEMA_USAGE
truncate table performance_schema.PROCESSLIST;
truncate table performance_schema.THREADS;
-- error ER_DBACCESS_DENIED_ERROR
ALTER TABLE performance_schema.PROCESSLIST ADD INDEX test_index(ID);
ALTER TABLE performance_schema.THREADS ADD INDEX test_index(ID);
-- error ER_DBACCESS_DENIED_ERROR
CREATE UNIQUE INDEX test_index ON performance_schema.PROCESSLIST(ID);
CREATE UNIQUE INDEX test_index ON performance_schema.THREADS(ID);

View File

@@ -19,44 +19,44 @@
--source include/have_perfschema.inc
--replace_column 1 # 2 # 3 # 4 # 5 # 6 #
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
where event_name like 'Wait/Synch/%' limit 1;
select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
where event_name='FOO';
--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
--replace_result '\'events_waits_summary_global_by_event_name' '\'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
--error ER_TABLEACCESS_DENIED_ERROR
insert into performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
insert into performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
set event_name='FOO', count_star=1, sum_timer_wait=2, min_timer_wait=3,
avg_timer_wait=4, max_timer_wait=5;
--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
--replace_result '\'events_waits_summary_global_by_event_name' '\'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
--error ER_TABLEACCESS_DENIED_ERROR
update performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
update performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
set count_star=12;
--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
--replace_result '\'events_waits_summary_global_by_event_name' '\'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
--error ER_TABLEACCESS_DENIED_ERROR
update performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
update performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
set count_star=12 where event_name like "FOO";
--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
--replace_result '\'events_waits_summary_global_by_event_name' '\'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
--error ER_TABLEACCESS_DENIED_ERROR
delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
delete from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
where count_star=1;
--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
--replace_result '\'events_waits_summary_global_by_event_name' '\'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
--error ER_TABLEACCESS_DENIED_ERROR
delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
delete from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
--replace_result '\'events_waits_summary_global_by_event_name' '\'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
-- error ER_TABLEACCESS_DENIED_ERROR
LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME READ;
LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME READ;
UNLOCK TABLES;
--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
--replace_result '\'events_waits_summary_global_by_event_name' '\'EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME'
-- error ER_TABLEACCESS_DENIED_ERROR
LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME WRITE;
LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME WRITE;
UNLOCK TABLES;

View File

@@ -1,75 +0,0 @@
# Copyright (C) 2009 Sun Microsystems, Inc
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Tests for PERFORMANCE_SCHEMA
--source include/not_embedded.inc
--source include/have_perfschema.inc
select * from performance_schema.SETUP_OBJECTS;
select * from performance_schema.SETUP_OBJECTS
where object_type = 'TABLE';
select * from performance_schema.SETUP_OBJECTS
where enabled='YES';
# Not implemented yet
--replace_result '\'setup_objects' '\'SETUP_OBJECTS'
--error ER_ILLEGAL_HA
insert into performance_schema.SETUP_OBJECTS
set object_type='TABLE', object_schema='FOO', object_name='BAR',
enabled='YES', timed='YES', aggregated='YES';
# Not implemented yet
# --error ER_ILLEGAL_HA
update performance_schema.SETUP_OBJECTS
set object_type='TABLE';
# Not implemented yet
# --error ER_ILLEGAL_HA
update performance_schema.SETUP_OBJECTS
set object_schema='ILLEGAL';
# Not implemented yet
# --error ER_ILLEGAL_HA
update performance_schema.SETUP_OBJECTS
set object_name='ILLEGAL';
update performance_schema.SETUP_OBJECTS
set enabled='NO';
update performance_schema.SETUP_OBJECTS
set timed='NO';
update performance_schema.SETUP_OBJECTS
set aggregated='NO';
select * from performance_schema.SETUP_OBJECTS;
update performance_schema.SETUP_OBJECTS
set enabled='YES', timed='YES', aggregated='YES';
delete from performance_schema.SETUP_OBJECTS
where object_type = 'TABLE';
delete from performance_schema.SETUP_OBJECTS;
LOCK TABLES performance_schema.SETUP_OBJECTS READ;
UNLOCK TABLES;
LOCK TABLES performance_schema.SETUP_OBJECTS WRITE;
UNLOCK TABLES;

View File

@@ -19,43 +19,43 @@
--source include/have_perfschema.inc
--replace_column 1 # 2 # 3 #
select * from performance_schema.PROCESSLIST
select * from performance_schema.THREADS
where name like 'Thread/%' limit 1;
select * from performance_schema.PROCESSLIST
select * from performance_schema.THREADS
where name='FOO';
--replace_result '\'processlist' '\'PROCESSLIST'
--replace_result '\'threads' '\'THREADS'
--error ER_TABLEACCESS_DENIED_ERROR
insert into performance_schema.PROCESSLIST
insert into performance_schema.THREADS
set name='FOO', thread_id=1, id=2;
--replace_result '\'processlist' '\'PROCESSLIST'
--replace_result '\'threads' '\'THREADS'
--error ER_TABLEACCESS_DENIED_ERROR
update performance_schema.PROCESSLIST
update performance_schema.THREADS
set thread_id=12;
--replace_result '\'processlist' '\'PROCESSLIST'
--replace_result '\'threads' '\'THREADS'
--error ER_TABLEACCESS_DENIED_ERROR
update performance_schema.PROCESSLIST
update performance_schema.THREADS
set thread_id=12 where name like "FOO";
--replace_result '\'processlist' '\'PROCESSLIST'
--replace_result '\'threads' '\'THREADS'
--error ER_TABLEACCESS_DENIED_ERROR
delete from performance_schema.PROCESSLIST
delete from performance_schema.THREADS
where id=1;
--replace_result '\'processlist' '\'PROCESSLIST'
--replace_result '\'threads' '\'THREADS'
--error ER_TABLEACCESS_DENIED_ERROR
delete from performance_schema.PROCESSLIST;
delete from performance_schema.THREADS;
--replace_result '\'processlist' '\'PROCESSLIST'
--replace_result '\'threads' '\'THREADS'
-- error ER_TABLEACCESS_DENIED_ERROR
LOCK TABLES performance_schema.PROCESSLIST READ;
LOCK TABLES performance_schema.THREADS READ;
UNLOCK TABLES;
--replace_result '\'processlist' '\'PROCESSLIST'
--replace_result '\'threads' '\'THREADS'
-- error ER_TABLEACCESS_DENIED_ERROR
LOCK TABLES performance_schema.PROCESSLIST WRITE;
LOCK TABLES performance_schema.THREADS WRITE;
UNLOCK TABLES;

View File

@@ -144,7 +144,7 @@ WHERE FILE_NAME LIKE CONCAT('%', @@tmpdir, '%') ORDER BY NULL;
#
--disable_result_log
SELECT EVENT_NAME, COUNT_STAR, AVG_TIMER_WAIT, SUM_TIMER_WAIT
FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
FROM performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
WHERE COUNT_STAR > 0
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;
@@ -158,7 +158,7 @@ LIMIT 10;
SELECT i.user, SUM(TIMER_WAIT) SUM_WAIT
# ((TIME_TO_SEC(TIMEDIFF(NOW(), i.startup_time)) * 1000) / SUM(TIMER_WAIT)) * 100 WAIT_PERCENTAGE
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
LEFT JOIN information_schema.PROCESSLIST i USING (ID)
GROUP BY i.user
ORDER BY SUM_WAIT DESC
@@ -171,7 +171,7 @@ LIMIT 20;
--disable_result_log
SELECT h.EVENT_NAME, SUM(h.TIMER_WAIT) TOTAL_WAIT
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
WHERE p.ID = 1
GROUP BY h.EVENT_NAME
HAVING TOTAL_WAIT > 0;
@@ -184,7 +184,7 @@ HAVING TOTAL_WAIT > 0;
--disable_result_log
SELECT i.user, h.operation, SUM(NUMBER_OF_BYTES) bytes
FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
INNER JOIN performance_schema.THREADS p USING (THREAD_ID)
LEFT JOIN information_schema.PROCESSLIST i USING (ID)
GROUP BY i.user, h.operation
HAVING BYTES > 0

View File

@@ -27,7 +27,7 @@
--disable_result_log
SELECT EVENT_ID FROM performance_schema.EVENTS_WAITS_CURRENT
WHERE THREAD_ID IN
(SELECT THREAD_ID FROM performance_schema.PROCESSLIST)
(SELECT THREAD_ID FROM performance_schema.THREADS)
AND EVENT_NAME IN
(SELECT NAME FROM performance_schema.SETUP_INSTRUMENTS
WHERE NAME LIKE "wait/synch/%")

View File

@@ -45,10 +45,10 @@ show variables like "performance_schema_max_thread%";
# Verification : in this main thread
select count(*) from performance_schema.PROCESSLIST
select count(*) from performance_schema.THREADS
where name like "thread/sql/main";
select count(*) from performance_schema.PROCESSLIST
select count(*) from performance_schema.THREADS
where name like "thread/sql/OneConnection";
select event_name, operation,

View File

@@ -29,18 +29,17 @@ show create table COND_INSTANCES;
show create table EVENTS_WAITS_CURRENT;
show create table EVENTS_WAITS_HISTORY;
show create table EVENTS_WAITS_HISTORY_LONG;
show create table EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
show create table EVENTS_WAITS_SUMMARY_BY_INSTANCE;
show create table EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
show create table EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
show create table FILE_INSTANCES;
show create table FILE_SUMMARY_BY_EVENT_NAME;
show create table FILE_SUMMARY_BY_INSTANCE;
show create table MUTEX_INSTANCES;
show create table PERFORMANCE_TIMERS;
show create table PROCESSLIST;
show create table RWLOCK_INSTANCES;
show create table SETUP_CONSUMERS;
show create table SETUP_INSTRUMENTS;
show create table SETUP_OBJECTS;
show create table SETUP_TIMERS;
show create table THREADS;

View File

@@ -45,7 +45,7 @@ LIMIT 1;
--replace_column 1 [EVENT_ID]
SELECT EVENT_ID FROM performance_schema.EVENTS_WAITS_CURRENT
WHERE THREAD_ID IN
(SELECT THREAD_ID FROM performance_schema.PROCESSLIST)
(SELECT THREAD_ID FROM performance_schema.THREADS)
AND EVENT_NAME IN
(SELECT NAME FROM performance_schema.SETUP_INSTRUMENTS
WHERE NAME LIKE "wait/synch/%")
@@ -138,7 +138,7 @@ delimiter |;
CREATE PROCEDURE t_ps_proc(IN tid INT, OUT pid INT)
BEGIN
SELECT id FROM performance_schema.PROCESSLIST
SELECT id FROM performance_schema.THREADS
WHERE THREAD_ID = tid INTO pid;
END;
@@ -157,7 +157,7 @@ delimiter |;
CREATE FUNCTION t_ps_func(tid INT) RETURNS int
BEGIN
return (SELECT id FROM performance_schema.PROCESSLIST
return (SELECT id FROM performance_schema.THREADS
WHERE THREAD_ID = tid);
END;

View File

@@ -31,7 +31,7 @@ select variable_value > 0 from information_schema.global_status
where variable_name like 'PERFORMANCE_SCHEMA_THREAD_CLASSES_LOST';
# Expect no instances
select count(*) from performance_schema.PROCESSLIST;
select count(*) from performance_schema.THREADS;
# Expect no instances lost
show status like "performance_schema_thread_instances_lost";

View File

@@ -33,7 +33,7 @@ show status like "performance_schema_thread_classes_lost";
# Expect no instances
show variables like "performance_schema_max_thread_instances";
select count(*) from performance_schema.PROCESSLIST;
select count(*) from performance_schema.THREADS;
# Expect instances lost
select variable_value > 0 from information_schema.global_status

View File

@@ -30,14 +30,14 @@ connect (con1, localhost, root, , );
let $con1_ID=`select connection_id()`;
let $con1_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
let $con1_THREAD_ID=`select thread_id from performance_schema.THREADS
where ID = connection_id()`;
connect (con2, localhost, root, , );
let $con2_ID=`select connection_id()`;
let $con2_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
let $con2_THREAD_ID=`select thread_id from performance_schema.THREADS
where ID = connection_id()`;
connection default;
@@ -58,7 +58,7 @@ connect (con3, localhost, root, , );
let $con3_ID=`select connection_id()`;
let $con3_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
let $con3_THREAD_ID=`select thread_id from performance_schema.THREADS
where ID = connection_id()`;
disconnect con3;
@@ -82,14 +82,14 @@ connect (con1, localhost, root, , );
let $con1_ID=`select connection_id()`;
let $con1_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
let $con1_THREAD_ID=`select thread_id from performance_schema.THREADS
where ID = connection_id()`;
connect (con2, localhost, root, , );
let $con2_ID=`select connection_id()`;
let $con2_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
let $con2_THREAD_ID=`select thread_id from performance_schema.THREADS
where ID = connection_id()`;
connection default;
@@ -108,7 +108,7 @@ connect (con3, localhost, root, , );
let $con3_ID=`select connection_id()`;
let $con3_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
let $con3_THREAD_ID=`select thread_id from performance_schema.THREADS
where ID = connection_id()`;
disconnect con3;

View File

@@ -72,6 +72,8 @@ before call db1.p1()
INSERT INTO db1.t2 VALUES ('before call db1.p2()');
BEGIN;
CALL db1.p2();
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
ROLLBACK;
INSERT INTO db1.t2 VALUES ('after call db1.p2()');
SELECT * FROM db1.t1;

View File

@@ -3661,6 +3661,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
SELECT fc_i_nt_5_suc (135, 4);
fc_i_nt_5_suc (135, 4)
fc_i_nt_5_suc
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-func << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
@@ -3689,6 +3691,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> T << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (136, 4);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-proc << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
@@ -3781,6 +3785,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
SELECT fc_i_nt_5_suc (139, 4);
fc_i_nt_5_suc (139, 4)
fc_i_nt_5_suc
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-func << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
@@ -3809,6 +3815,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> T-trig << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (140, 4);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-proc << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
@@ -3907,6 +3915,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
SELECT fc_i_nt_5_suc (143, 4);
fc_i_nt_5_suc (143, 4)
fc_i_nt_5_suc
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-func << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
@@ -3937,6 +3947,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> T-func << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (144, 4);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-proc << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
@@ -4033,6 +4045,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
SELECT fc_i_nt_5_suc (147, 4);
fc_i_nt_5_suc (147, 4)
fc_i_nt_5_suc
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-func << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
@@ -4063,6 +4077,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> T-proc << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (148, 4);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-proc << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
@@ -4295,6 +4311,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
SELECT fc_i_nt_5_suc (155, 4);
fc_i_nt_5_suc (155, 4)
fc_i_nt_5_suc
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-func << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
@@ -4325,6 +4343,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> T << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (156, 4);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-proc << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
@@ -4423,6 +4443,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
SELECT fc_i_nt_5_suc (159, 4);
fc_i_nt_5_suc (159, 4)
fc_i_nt_5_suc
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-func << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
@@ -4453,6 +4475,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> T-trig << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (160, 4);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-proc << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
@@ -4557,6 +4581,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
SELECT fc_i_nt_5_suc (163, 4);
fc_i_nt_5_suc (163, 4)
fc_i_nt_5_suc
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-func << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
@@ -4589,6 +4615,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> T-func << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (164, 4);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-proc << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
@@ -4691,6 +4719,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
SELECT fc_i_nt_5_suc (167, 4);
fc_i_nt_5_suc (167, 4)
fc_i_nt_5_suc
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-func << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
@@ -4723,6 +4753,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> T-proc << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (168, 4);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> N-proc << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
@@ -5291,6 +5323,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (185, 2);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO nt_5(trans_id, stmt_id) VALUES ( NAME_CONST('p_trans_id',185), NAME_CONST('in_stmt_id',1))
@@ -5329,6 +5363,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (186, 2);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO nt_5(trans_id, stmt_id) VALUES ( NAME_CONST('p_trans_id',186), NAME_CONST('in_stmt_id',1))
@@ -5367,6 +5403,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (187, 2);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO nt_5(trans_id, stmt_id) VALUES ( NAME_CONST('p_trans_id',187), NAME_CONST('in_stmt_id',1))
@@ -5407,6 +5445,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (188, 2);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO nt_5(trans_id, stmt_id) VALUES ( NAME_CONST('p_trans_id',188), NAME_CONST('in_stmt_id',1))
@@ -5885,6 +5925,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (201, 2);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO nt_5(trans_id, stmt_id) VALUES ( NAME_CONST('p_trans_id',201), NAME_CONST('in_stmt_id',1))
@@ -5925,6 +5967,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (202, 2);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO nt_5(trans_id, stmt_id) VALUES ( NAME_CONST('p_trans_id',202), NAME_CONST('in_stmt_id',1))
@@ -5967,6 +6011,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (203, 2);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO nt_5(trans_id, stmt_id) VALUES ( NAME_CONST('p_trans_id',203), NAME_CONST('in_stmt_id',1))
@@ -6007,6 +6053,8 @@ Log_name Pos Event_type Server_id End_log_pos Info
-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
-b-b-b-b-b-b-b-b-b-b-b- >> N-proc << -b-b-b-b-b-b-b-b-b-b-b-
CALL pc_i_nt_5_suc (204, 2);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO nt_5(trans_id, stmt_id) VALUES ( NAME_CONST('p_trans_id',204), NAME_CONST('in_stmt_id',1))

View File

@@ -39,6 +39,8 @@ INSERT INTO t2 VALUES (NULL);
RETURN i;
END//
CALL p1();
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN
@@ -123,6 +125,8 @@ SELECT * FROM t2;
id
DROP TRIGGER tr1;
CALL p2();
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN

View File

@@ -38,6 +38,8 @@ INSERT INTO t1 VALUES ('MySQL','1993-02-04'),('ROCKS', '1990-08-27'),('Texas', '
END|
CALL p2();
CALL p1();
Warnings:
Error 1329 No data - zero rows fetched, selected, or processed
DROP TABLE t1;
DROP TABLE t2;
DROP PROCEDURE p1;

View File

@@ -12,6 +12,7 @@
rpl_ndb_stm_innodb : Bug#54850 2010-07-02 alik rpl_ndb.rpl_ndb_stm_innodb and rpl_ndb.rpl_ndb_2other fails
rpl_ndb_2other : Bug#54850 2010-07-02 alik rpl_ndb.rpl_ndb_stm_innodb and rpl_ndb.rpl_ndb_2other fails
rpl_ndb_row_implicit_commit_binlog : Bug#55849 2010-08-09 alik rpl_ndb.rpl_ndb_row_implicit_commit_binlog fails
# the below testcase have been reworked to avoid the bug, test contains comment, keep bug open
rpl_ndb_2ndb : Bug#45974: rpl_ndb_2ndb fails sporadically

View File

@@ -1,31 +1,4 @@
# Can't run test of external client with embedded server
-- source include/not_embedded.inc
# Only run test if "mysql_upgrade" is found
--require r/have_mysql_upgrade.result
--disable_query_log
select LENGTH("$MYSQL_UPGRADE")>0 as have_mysql_upgrade;
--enable_query_log
#
# Hack:
#
# If running with Valgrind ($VALGRIND_TEST <> 0) then the resource
# consumption (CPU) for upgrading a large log table will be intense.
# Therefore, truncate the log table in advance and issue a statement
# that should be logged.
#
if (`SELECT $VALGRIND_TEST`)
{
--disable_query_log
--disable_result_log
--disable_abort_on_error
TRUNCATE TABLE mysql.general_log;
SELECT 1;
--enable_abort_on_error
--enable_result_log
--enable_query_log
}
-- source include/mysql_upgrade_preparation.inc
#
# Basic test that we can run mysql_upgrde and that it finds the

View File

@@ -0,0 +1,10 @@
# mysql_upgrade tests requiring SSL support
-- source include/have_ssl_communication.inc
-- source include/mysql_upgrade_preparation.inc
--echo #
--echo # Bug#55672 mysql_upgrade dies with internal error
--echo #
--exec $MYSQL_UPGRADE --skip-verbose --ssl --force 2>&1
--exit

View File

@@ -1,4 +1,3 @@
# Copyright (C) 2006 MySQL AB
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -252,43 +251,40 @@ IF(POLICY CMP0007)
CMAKE_POLICY(SET CMP0007 OLD)
ENDIF()
LIST(REMOVE_ITEM mysqlclient_LIB_DEPENDS "")
LIST(REMOVE_DUPLICATES mysqlclient_LIB_DEPENDS)
FOREACH(lib ${mysqlclient_LIB_DEPENDS})
# Filter out "general", it is not a library, just CMake hint
IF(NOT lib STREQUAL "general" AND NOT CLIENT_LIBS MATCHES "-l${lib} ")
IF (lib MATCHES "^\\-l")
SET(CLIENT_LIBS "${CLIENT_LIBS} ${lib} ")
ELSEIF(lib MATCHES "^/")
# Full path, convert to just filename, strip "lib" prefix and extension
GET_FILENAME_COMPONENT(lib "${lib}" NAME_WE)
STRING(REGEX REPLACE "^lib" "" lib "${lib}")
SET(CLIENT_LIBS "${CLIENT_LIBS}-l${lib} " )
ELSE()
SET(CLIENT_LIBS "${CLIENT_LIBS}-l${lib} " )
ENDIF()
# Extract dependencies using CMake's internal ${target}_LIB_DEPENDS variable
# returned string in ${var} is can be passed to linker's command line
MACRO(EXTRACT_LINK_LIBRARIES target var)
IF(${target}_LIB_DEPENDS)
LIST(REMOVE_ITEM ${target}_LIB_DEPENDS "")
LIST(REMOVE_DUPLICATES ${target}_LIB_DEPENDS)
FOREACH(lib ${${target}_LIB_DEPENDS})
# Filter out "general", it is not a library, just CMake hint
# Also, remove duplicates
IF(NOT lib STREQUAL "general" AND NOT ${var} MATCHES "-l${lib} ")
IF (lib MATCHES "^\\-l")
SET(${var} "${${var}} ${lib} ")
ELSEIF(lib MATCHES "^/")
# Full path, convert to just filename, strip "lib" prefix and extension
GET_FILENAME_COMPONENT(lib "${lib}" NAME_WE)
STRING(REGEX REPLACE "^lib" "" lib "${lib}")
SET(${var} "${${var}}-l${lib} " )
ELSE()
SET(${var} "${${var}}-l${lib} " )
ENDIF()
ENDIF()
ENDFOREACH()
ENDIF()
ENDFOREACH()
IF(MSVC)
STRING(REPLACE "-l" "" ${var} "${${var}}")
ENDIF()
ENDMACRO()
EXTRACT_LINK_LIBRARIES(mysqlclient CLIENT_LIBS)
EXTRACT_LINK_LIBRARIES(mysqlserver LIBS)
IF(LIBDL AND NOT LIBDL MATCHES "-l")
SET(LIBDL "-l${LIBDL}")
ENDIF()
IF(LIBWRAP)
SET(WRAPLIBS "-lwrap")
ENDIF()
SET(LIBS "${CLIENT_LIBS}")
IF(LIBCRYPT)
SET(LIBS "${LIBS} -l${LIBCRYPT}")
ENDIF()
IF(MSVC)
STRING(REPLACE "-l" "" CLIENT_LIBS "${CLIENT_LIBS}")
STRING(REPLACE "-l" "" LIBS "${LIBS}" )
ENDIF()
# mysql_config evaluates ${LIBDL}, we want to avoid it
# as our CLIENT_LIBS and LIBS are already correct
SET(LIBDL)
SET(NON_THREADED_LIBS ${CLIENT_LIBS})
SET(mysql_config_COMPONENT COMPONENT Development)

View File

@@ -108,7 +108,7 @@ fi
# We intentionally add a space to the beginning and end of lib strings, simplifies replace later
libs=" $ldflags -L$pkglibdir -lmysqlclient @ZLIB_DEPS@ @NON_THREADED_LIBS@"
libs="$libs @openssl_libs@ @STATIC_NSS_FLAGS@ "
libs_r=" $ldflags -L$pkglibdir -lmysqlclient_r @ZLIB_DEPS@ @LIBS@ @openssl_libs@ "
libs_r=" $ldflags -L$pkglibdir -lmysqlclient_r @ZLIB_DEPS@ @CLIENT_LIBS@ @openssl_libs@ "
embedded_libs=" $ldflags -L$pkglibdir -lmysqld @LIBDL@ @ZLIB_DEPS@ @LIBS@ @WRAPLIBS@ @openssl_libs@ "
if [ -r "$pkglibdir/libmygcc.a" ]; then

View File

@@ -241,26 +241,6 @@ PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
--
-- TABLE EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
--
SET @l1="CREATE TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME(";
SET @l2="EVENT_NAME VARCHAR(128) not null,";
SET @l3="COUNT_STAR BIGINT unsigned not null,";
SET @l4="SUM_TIMER_WAIT BIGINT unsigned not null,";
SET @l5="MIN_TIMER_WAIT BIGINT unsigned not null,";
SET @l6="AVG_TIMER_WAIT BIGINT unsigned not null,";
SET @l7="MAX_TIMER_WAIT BIGINT unsigned not null";
SET @l8=")ENGINE=PERFORMANCE_SCHEMA;";
SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7,@l8);
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
--
-- TABLE EVENTS_WAITS_SUMMARY_BY_INSTANCE
--
@@ -303,6 +283,26 @@ PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
--
-- TABLE EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
--
SET @l1="CREATE TABLE performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME(";
SET @l2="EVENT_NAME VARCHAR(128) not null,";
SET @l3="COUNT_STAR BIGINT unsigned not null,";
SET @l4="SUM_TIMER_WAIT BIGINT unsigned not null,";
SET @l5="MIN_TIMER_WAIT BIGINT unsigned not null,";
SET @l6="AVG_TIMER_WAIT BIGINT unsigned not null,";
SET @l7="MAX_TIMER_WAIT BIGINT unsigned not null";
SET @l8=")ENGINE=PERFORMANCE_SCHEMA;";
SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7,@l8);
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
--
-- TABLE FILE_INSTANCES
--
@@ -394,23 +394,6 @@ PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
--
-- TABLE PROCESSLIST
--
SET @l1="CREATE TABLE performance_schema.PROCESSLIST(";
SET @l2="THREAD_ID INTEGER not null,";
SET @l3="ID INTEGER not null,";
SET @l4="NAME VARCHAR(64) not null";
SET @l5=")ENGINE=PERFORMANCE_SCHEMA;";
SET @cmd=concat(@l1,@l2,@l3,@l4,@l5);
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
--
-- TABLE RWLOCK_INSTANCES
--
@@ -462,26 +445,6 @@ PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
--
-- TABLE SETUP_OBJECTS
--
SET @l1="CREATE TABLE performance_schema.SETUP_OBJECTS(";
SET @l2="OBJECT_TYPE VARCHAR(64),";
SET @l3="OBJECT_SCHEMA VARCHAR(64),";
SET @l4="OBJECT_NAME VARCHAR(64),";
SET @l5="ENABLED ENUM ('YES', 'NO') not null,";
SET @l6="TIMED ENUM ('YES', 'NO') not null,";
SET @l7="AGGREGATED ENUM ('YES', 'NO') not null";
SET @l8=")ENGINE=PERFORMANCE_SCHEMA;";
SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7,@l8);
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
--
-- TABLE SETUP_TIMERS
--
@@ -498,3 +461,20 @@ PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
--
-- TABLE THREADS
--
SET @l1="CREATE TABLE performance_schema.THREADS(";
SET @l2="THREAD_ID INTEGER not null,";
SET @l3="ID INTEGER not null,";
SET @l4="NAME VARCHAR(64) not null";
SET @l5=")ENGINE=PERFORMANCE_SCHEMA;";
SET @cmd=concat(@l1,@l2,@l3,@l4,@l5);
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;

View File

@@ -82,6 +82,7 @@ MYSQL_ADD_PLUGIN(partition ha_partition.cc STORAGE_ENGINE DEFAULT STATIC_ONLY
RECOMPILE_FOR_EMBEDDED)
ADD_LIBRARY(sql STATIC ${SQL_SOURCE})
ADD_DEPENDENCIES(sql GenServerSource)
DTRACE_INSTRUMENT(sql)
TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATIC_PLUGIN_LIBS}
mysys dbug strings vio regex
@@ -188,6 +189,7 @@ ADD_EXECUTABLE(gen_lex_hash gen_lex_hash.cc)
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h
COMMAND gen_lex_hash > lex_hash.h
DEPENDS gen_lex_hash
)
MYSQL_ADD_EXECUTABLE(mysql_tzinfo_to_sql tztime.cc)

View File

@@ -4704,7 +4704,7 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info)
file= cache_mngr->get_binlog_cache_log(is_trans_cache);
cache_data= cache_mngr->get_binlog_cache_data(is_trans_cache);
if (thd->stmt_accessed_non_trans_temp_table())
if (thd->lex->stmt_accessed_non_trans_temp_table())
cache_data->set_changes_to_non_trans_temp_table();
thd->binlog_start_trans_and_stmt();

View File

@@ -679,7 +679,7 @@ Log_event::Log_event(THD* thd_arg, uint16 flags_arg, bool using_trans)
server_id= thd->server_id;
when= thd->start_time;
cache_type= ((using_trans || stmt_has_updated_trans_table(thd) ||
(thd->stmt_accessed_temp_table() &&
(thd->lex->stmt_accessed_temp_table() &&
trans_has_updated_trans_table(thd)))
? Log_event::EVENT_TRANSACTIONAL_CACHE :
Log_event::EVENT_STMT_CACHE);
@@ -2573,7 +2573,7 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
else
{
cache_type= ((using_trans || stmt_has_updated_trans_table(thd) || trx_cache ||
(thd->stmt_accessed_temp_table() &&
(thd->lex->stmt_accessed_temp_table() &&
trans_has_updated_trans_table(thd)))
? Log_event::EVENT_TRANSACTIONAL_CACHE :
Log_event::EVENT_STMT_CACHE);

View File

@@ -1743,7 +1743,7 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount,
Field *return_value_fld)
{
ulonglong binlog_save_options;
bool need_binlog_call;
bool need_binlog_call= FALSE;
uint arg_no;
sp_rcontext *octx = thd->spcont;
sp_rcontext *nctx = NULL;
@@ -1950,6 +1950,14 @@ err_with_cleanup:
free_root(&call_mem_root, MYF(0));
thd->spcont= octx;
/*
If not insided a procedure and a function printing warning
messsages.
*/
if (need_binlog_call &&
thd->spcont == NULL && !thd->binlog_evt_union.do_union)
thd->issue_unsafe_warnings();
DBUG_RETURN(err_status);
}
@@ -2195,6 +2203,17 @@ sp_head::execute_procedure(THD *thd, List<Item> *args)
thd->spcont= save_spcont;
thd->utime_after_lock= utime_before_sp_exec;
/*
If not insided a procedure and a function printing warning
messsages.
*/
bool need_binlog_call= mysql_bin_log.is_open() &&
(thd->variables.option_bits & OPTION_BIN_LOG) &&
!thd->is_current_stmt_binlog_format_row();
if (need_binlog_call && thd->spcont == NULL &&
!thd->binlog_evt_union.do_union)
thd->issue_unsafe_warnings();
DBUG_RETURN(err_status);
}

View File

@@ -492,7 +492,6 @@ THD::THD()
rli_fake(0),
user_time(0), in_sub_stmt(0),
binlog_unsafe_warning_flags(0),
stmt_accessed_table_flag(0),
binlog_table_maps(0),
table_map_for_update(0),
arg_of_last_insert_id_function(FALSE),
@@ -3675,8 +3674,17 @@ int THD::decide_logging_format(TABLE_LIST *tables)
Innodb and Falcon; Innodb and MyIsam.
*/
my_bool multi_access_engine= FALSE;
/*
Identifies if a table is changed.
*/
my_bool is_write= FALSE;
/*
A pointer to a previous table that was changed.
*/
TABLE* prev_write_table= NULL;
/*
A pointer to a previous table that was accessed.
*/
TABLE* prev_access_table= NULL;
#ifndef DBUG_OFF
@@ -3700,7 +3708,8 @@ int THD::decide_logging_format(TABLE_LIST *tables)
if (table->placeholder())
continue;
if (table->table->s->table_category == TABLE_CATEGORY_PERFORMANCE)
if (table->table->s->table_category == TABLE_CATEGORY_PERFORMANCE ||
table->table->s->table_category == TABLE_CATEGORY_LOG)
lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_TABLE);
handler::Table_flags const flags= table->table->file->ha_table_flags();
@@ -3716,16 +3725,18 @@ int THD::decide_logging_format(TABLE_LIST *tables)
my_bool trans= table->table->file->has_transactions();
if (table->table->s->tmp_table)
set_stmt_accessed_table(trans ? STMT_WRITES_TEMP_TRANS_TABLE :
STMT_WRITES_TEMP_NON_TRANS_TABLE);
lex->set_stmt_accessed_table(trans ? LEX::STMT_WRITES_TEMP_TRANS_TABLE :
LEX::STMT_WRITES_TEMP_NON_TRANS_TABLE);
else
set_stmt_accessed_table(trans ? STMT_WRITES_TRANS_TABLE :
STMT_WRITES_NON_TRANS_TABLE);
lex->set_stmt_accessed_table(trans ? LEX::STMT_WRITES_TRANS_TABLE :
LEX::STMT_WRITES_NON_TRANS_TABLE);
flags_write_all_set &= flags;
flags_write_some_set |= flags;
is_write= TRUE;
prev_write_table= table->table;
}
flags_access_some_set |= flags;
@@ -3736,11 +3747,11 @@ int THD::decide_logging_format(TABLE_LIST *tables)
my_bool trans= table->table->file->has_transactions();
if (table->table->s->tmp_table)
set_stmt_accessed_table(trans ? STMT_READS_TEMP_TRANS_TABLE :
STMT_READS_TEMP_NON_TRANS_TABLE);
lex->set_stmt_accessed_table(trans ? LEX::STMT_READS_TEMP_TRANS_TABLE :
LEX::STMT_READS_TEMP_NON_TRANS_TABLE);
else
set_stmt_accessed_table(trans ? STMT_READS_TRANS_TABLE :
STMT_READS_NON_TRANS_TABLE);
lex->set_stmt_accessed_table(trans ? LEX::STMT_READS_TRANS_TABLE :
LEX::STMT_READS_NON_TRANS_TABLE);
}
if (prev_access_table && prev_access_table->file->ht !=
@@ -3812,24 +3823,24 @@ int THD::decide_logging_format(TABLE_LIST *tables)
my_bool non_trans_unsafe= FALSE;
/* Case 1. */
if (stmt_accessed_table(STMT_WRITES_TRANS_TABLE) &&
stmt_accessed_table(STMT_WRITES_NON_TRANS_TABLE))
if (lex->stmt_accessed_table(LEX::STMT_WRITES_TRANS_TABLE) &&
lex->stmt_accessed_table(LEX::STMT_WRITES_NON_TRANS_TABLE))
mixed_unsafe= TRUE;
/* Case 2. */
else if (stmt_accessed_table(STMT_WRITES_TEMP_TRANS_TABLE) &&
stmt_accessed_table(STMT_WRITES_NON_TRANS_TABLE))
else if (lex->stmt_accessed_table(LEX::STMT_WRITES_TEMP_TRANS_TABLE) &&
lex->stmt_accessed_table(LEX::STMT_WRITES_NON_TRANS_TABLE))
mixed_unsafe= TRUE;
/* Case 3. */
else if (stmt_accessed_table(STMT_WRITES_TRANS_TABLE) &&
stmt_accessed_table(STMT_READS_NON_TRANS_TABLE))
else if (lex->stmt_accessed_table(LEX::STMT_WRITES_TRANS_TABLE) &&
lex->stmt_accessed_table(LEX::STMT_READS_NON_TRANS_TABLE))
mixed_unsafe= TRUE;
/* Case 4. */
else if (stmt_accessed_table(STMT_WRITES_TEMP_TRANS_TABLE) &&
stmt_accessed_table(STMT_READS_NON_TRANS_TABLE))
else if (lex->stmt_accessed_table(LEX::STMT_WRITES_TEMP_TRANS_TABLE) &&
lex->stmt_accessed_table(LEX::STMT_READS_NON_TRANS_TABLE))
mixed_unsafe= TRUE;
/* Case 5. */
else if (stmt_accessed_table(STMT_WRITES_NON_TRANS_TABLE) &&
stmt_accessed_table(STMT_READS_TRANS_TABLE) &&
else if (lex->stmt_accessed_table(LEX::STMT_WRITES_NON_TRANS_TABLE) &&
lex->stmt_accessed_table(LEX::STMT_READS_TRANS_TABLE) &&
tx_isolation < ISO_REPEATABLE_READ)
/*
By default, InnoDB operates in REPEATABLE READ and with the option
@@ -3847,28 +3858,28 @@ int THD::decide_logging_format(TABLE_LIST *tables)
if (trans_has_updated_trans_table(this))
{
/* Case 6. */
if (stmt_accessed_table(STMT_WRITES_NON_TRANS_TABLE) &&
stmt_accessed_table(STMT_READS_TRANS_TABLE))
if (lex->stmt_accessed_table(LEX::STMT_WRITES_NON_TRANS_TABLE) &&
lex->stmt_accessed_table(LEX::STMT_READS_TRANS_TABLE))
mixed_unsafe= TRUE;
/* Case 7. */
else if (stmt_accessed_table(STMT_WRITES_NON_TRANS_TABLE) &&
stmt_accessed_table(STMT_READS_TEMP_TRANS_TABLE))
else if (lex->stmt_accessed_table(LEX::STMT_WRITES_NON_TRANS_TABLE) &&
lex->stmt_accessed_table(LEX::STMT_READS_TEMP_TRANS_TABLE))
mixed_unsafe= TRUE;
/* Case 8. */
else if (stmt_accessed_table(STMT_WRITES_NON_TRANS_TABLE) &&
stmt_accessed_table(STMT_READS_TEMP_NON_TRANS_TABLE))
else if (lex->stmt_accessed_table(LEX::STMT_WRITES_NON_TRANS_TABLE) &&
lex->stmt_accessed_table(LEX::STMT_READS_TEMP_NON_TRANS_TABLE))
mixed_unsafe= TRUE;
/* Case 9. */
else if (stmt_accessed_table(STMT_WRITES_TEMP_NON_TRANS_TABLE) &&
stmt_accessed_table(STMT_WRITES_NON_TRANS_TABLE))
else if (lex->stmt_accessed_table(LEX::STMT_WRITES_TEMP_NON_TRANS_TABLE) &&
lex->stmt_accessed_table(LEX::STMT_WRITES_NON_TRANS_TABLE))
mixed_unsafe= TRUE;
/* Case 10. */
else if (stmt_accessed_table(STMT_WRITES_TEMP_NON_TRANS_TABLE) &&
stmt_accessed_table(STMT_READS_NON_TRANS_TABLE))
else if (lex->stmt_accessed_table(LEX::STMT_WRITES_TEMP_NON_TRANS_TABLE) &&
lex->stmt_accessed_table(LEX::STMT_READS_NON_TRANS_TABLE))
mixed_unsafe= TRUE;
/* Case 11. */
else if (!variables.binlog_direct_non_trans_update &&
stmt_accessed_table(STMT_WRITES_NON_TRANS_TABLE))
lex->stmt_accessed_table(LEX::STMT_WRITES_NON_TRANS_TABLE))
non_trans_unsafe= TRUE;
}
@@ -3959,13 +3970,14 @@ int THD::decide_logging_format(TABLE_LIST *tables)
*/
my_error((error= ER_BINLOG_STMT_MODE_AND_ROW_ENGINE), MYF(0), "");
}
else if ((unsafe_flags= lex->get_stmt_unsafe_flags()) != 0)
else if (is_write && (unsafe_flags= lex->get_stmt_unsafe_flags()) != 0)
{
/*
7. Warning: Unsafe statement logged as statement due to
binlog_format = STATEMENT
*/
binlog_unsafe_warning_flags|= unsafe_flags;
DBUG_PRINT("info", ("Scheduling warning to be issued by "
"binlog_query: '%s'",
ER(ER_BINLOG_UNSAFE_STATEMENT)));
@@ -4441,23 +4453,10 @@ void THD::issue_unsafe_warnings()
Ensure that binlog_unsafe_warning_flags is big enough to hold all
bits. This is actually a constant expression.
*/
DBUG_ASSERT(2 * LEX::BINLOG_STMT_UNSAFE_COUNT <=
DBUG_ASSERT(LEX::BINLOG_STMT_UNSAFE_COUNT <=
sizeof(binlog_unsafe_warning_flags) * CHAR_BIT);
uint32 unsafe_type_flags= binlog_unsafe_warning_flags;
/*
Clear: (1) bits above BINLOG_STMT_UNSAFE_COUNT; (2) bits for
warnings that have been printed already.
*/
unsafe_type_flags &= (LEX::BINLOG_STMT_UNSAFE_ALL_FLAGS ^
(unsafe_type_flags >> LEX::BINLOG_STMT_UNSAFE_COUNT));
/* If all warnings have been printed already, return. */
if (unsafe_type_flags == 0)
DBUG_VOID_RETURN;
DBUG_PRINT("info", ("unsafe_type_flags: 0x%x", unsafe_type_flags));
/*
For each unsafe_type, check if the statement is unsafe in this way
and issue a warning.
@@ -4481,12 +4480,6 @@ void THD::issue_unsafe_warnings()
}
}
}
/*
Mark these unsafe types as already printed, to avoid printing
warnings for them again.
*/
binlog_unsafe_warning_flags|=
unsafe_type_flags << LEX::BINLOG_STMT_UNSAFE_COUNT;
DBUG_VOID_RETURN;
}
@@ -4540,19 +4533,32 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype, char const *query_arg,
/*
Warnings for unsafe statements logged in statement format are
printed here instead of in decide_logging_format(). This is
because the warnings should be printed only if the statement is
actually logged. When executing decide_logging_format(), we cannot
know for sure if the statement will be logged.
printed in three places instead of in decide_logging_format().
This is because the warnings should be printed only if the statement
is actually logged. When executing decide_logging_format(), we cannot
know for sure if the statement will be logged:
1 - sp_head::execute_procedure which prints out warnings for calls to
stored procedures.
2 - sp_head::execute_function which prints out warnings for calls
involving functions.
3 - THD::binlog_query (here) which prints warning for top level
statements not covered by the two cases above: i.e., if not insided a
procedure and a function.
Besides, we should not try to print these warnings if it is not
possible to write statements to the binary log as it happens when
the execution is inside a function, or generaly speaking, when
the variables.option_bits & OPTION_BIN_LOG is false.
*/
if (variables.option_bits & OPTION_BIN_LOG)
if ((variables.option_bits & OPTION_BIN_LOG) &&
spcont == NULL && !binlog_evt_union.do_union)
issue_unsafe_warnings();
switch (qtype) {
/*
ROW_QUERY_TYPE means that the statement may be logged either in

View File

@@ -1566,125 +1566,6 @@ public:
return current_stmt_binlog_format == BINLOG_FORMAT_ROW;
}
enum enum_stmt_accessed_table
{
/*
If a transactional table is about to be read. Note that
a write implies a read.
*/
STMT_READS_TRANS_TABLE= 0,
/*
If a transactional table is about to be updated.
*/
STMT_WRITES_TRANS_TABLE,
/*
If a non-transactional table is about to be read. Note that
a write implies a read.
*/
STMT_READS_NON_TRANS_TABLE,
/*
If a non-transactional table is about to be updated.
*/
STMT_WRITES_NON_TRANS_TABLE,
/*
If a temporary transactional table is about to be read. Note
that a write implies a read.
*/
STMT_READS_TEMP_TRANS_TABLE,
/*
If a temporary transactional table is about to be updated.
*/
STMT_WRITES_TEMP_TRANS_TABLE,
/*
If a temporary non-transactional table is about to be read. Note
that a write implies a read.
*/
STMT_READS_TEMP_NON_TRANS_TABLE,
/*
If a temporary non-transactional table is about to be updated.
*/
STMT_WRITES_TEMP_NON_TRANS_TABLE,
/*
The last element of the enumeration. Please, if necessary add
anything before this.
*/
STMT_ACCESS_TABLE_COUNT
};
/**
Sets the type of table that is about to be accessed while executing a
statement.
@param accessed_table Enumeration type that defines the type of table,
e.g. temporary, transactional, non-transactional.
*/
inline void set_stmt_accessed_table(enum_stmt_accessed_table accessed_table)
{
DBUG_ENTER("THD::set_stmt_accessed_table");
DBUG_ASSERT(accessed_table >= 0 && accessed_table < STMT_ACCESS_TABLE_COUNT);
stmt_accessed_table_flag |= (1U << accessed_table);
DBUG_VOID_RETURN;
}
/**
Checks if a type of table is about to be accessed while executing a
statement.
@param accessed_table Enumeration type that defines the type of table,
e.g. temporary, transactional, non-transactional.
@return
@retval TRUE if the type of the table is about to be accessed
@retval FALSE otherwise
*/
inline bool stmt_accessed_table(enum_stmt_accessed_table accessed_table)
{
DBUG_ENTER("THD::stmt_accessed_table");
DBUG_ASSERT(accessed_table >= 0 && accessed_table < STMT_ACCESS_TABLE_COUNT);
DBUG_RETURN((stmt_accessed_table_flag & (1U << accessed_table)) != 0);
}
/**
Checks if a temporary table is about to be accessed while executing a
statement.
@return
@retval TRUE if a temporary table is about to be accessed
@retval FALSE otherwise
*/
inline bool stmt_accessed_temp_table()
{
DBUG_ENTER("THD::stmt_accessed_temp_table");
DBUG_RETURN((stmt_accessed_table_flag &
((1U << STMT_READS_TEMP_TRANS_TABLE) |
(1U << STMT_WRITES_TEMP_TRANS_TABLE) |
(1U << STMT_READS_TEMP_NON_TRANS_TABLE) |
(1U << STMT_WRITES_TEMP_NON_TRANS_TABLE))) != 0);
}
/**
Checks if a temporary non-transactional table is about to be accessed
while executing a statement.
@return
@retval TRUE if a temporary non-transactional table is about to be
accessed
@retval FALSE otherwise
*/
inline bool stmt_accessed_non_trans_temp_table()
{
DBUG_ENTER("THD::stmt_accessed_non_trans_temp_table");
DBUG_RETURN((stmt_accessed_table_flag &
((1U << STMT_READS_TEMP_NON_TRANS_TABLE) |
(1U << STMT_WRITES_TEMP_NON_TRANS_TABLE))) != 0);
}
private:
/**
Indicates the format in which the current statement will be
@@ -1695,24 +1576,8 @@ private:
/**
Bit field for the state of binlog warnings.
There are two groups of bits:
- The first Lex::BINLOG_STMT_UNSAFE_COUNT bits list all types of
unsafeness that the current statement has.
- The following Lex::BINLOG_STMT_UNSAFE_COUNT bits list all types
of unsafeness that the current statement has issued warnings
for.
Hence, this variable must be big enough to hold
2*Lex::BINLOG_STMT_UNSAFE_COUNT bits. This is asserted in @c
issue_unsafe_warnings().
The first and second groups of bits are set by @c
decide_logging_format() when it detects that a warning should be
issued. The third group of bits is set from @c binlog_query()
when a warning is issued. All bits are cleared at the end of the
top-level statement.
The first Lex::BINLOG_STMT_UNSAFE_COUNT bits list all types of
unsafeness that the current statement has.
This must be a member of THD and not of LEX, because warnings are
detected and issued in different places (@c
@@ -1722,20 +1587,14 @@ private:
*/
uint32 binlog_unsafe_warning_flags;
/**
Bit field that determines the type of tables that are about to be
be accessed while executing a statement.
*/
uint32 stmt_accessed_table_flag;
void issue_unsafe_warnings();
/*
Number of outstanding table maps, i.e., table maps in the
transaction cache.
*/
uint binlog_table_maps;
public:
void issue_unsafe_warnings();
uint get_binlog_table_maps() const {
return binlog_table_maps;
}

View File

@@ -2300,6 +2300,7 @@ void Query_tables_list::reset_query_tables_list(bool init)
sroutines_list_own_last= sroutines_list.next;
sroutines_list_own_elements= 0;
binlog_stmt_flags= 0;
stmt_accessed_table_flag= 0;
}

View File

@@ -1276,6 +1276,125 @@ public:
DBUG_VOID_RETURN;
}
enum enum_stmt_accessed_table
{
/*
If a transactional table is about to be read. Note that
a write implies a read.
*/
STMT_READS_TRANS_TABLE= 0,
/*
If a transactional table is about to be updated.
*/
STMT_WRITES_TRANS_TABLE,
/*
If a non-transactional table is about to be read. Note that
a write implies a read.
*/
STMT_READS_NON_TRANS_TABLE,
/*
If a non-transactional table is about to be updated.
*/
STMT_WRITES_NON_TRANS_TABLE,
/*
If a temporary transactional table is about to be read. Note
that a write implies a read.
*/
STMT_READS_TEMP_TRANS_TABLE,
/*
If a temporary transactional table is about to be updated.
*/
STMT_WRITES_TEMP_TRANS_TABLE,
/*
If a temporary non-transactional table is about to be read. Note
that a write implies a read.
*/
STMT_READS_TEMP_NON_TRANS_TABLE,
/*
If a temporary non-transactional table is about to be updated.
*/
STMT_WRITES_TEMP_NON_TRANS_TABLE,
/*
The last element of the enumeration. Please, if necessary add
anything before this.
*/
STMT_ACCESS_TABLE_COUNT
};
/**
Sets the type of table that is about to be accessed while executing a
statement.
@param accessed_table Enumeration type that defines the type of table,
e.g. temporary, transactional, non-transactional.
*/
inline void set_stmt_accessed_table(enum_stmt_accessed_table accessed_table)
{
DBUG_ENTER("THD::set_stmt_accessed_table");
DBUG_ASSERT(accessed_table >= 0 && accessed_table < STMT_ACCESS_TABLE_COUNT);
stmt_accessed_table_flag |= (1U << accessed_table);
DBUG_VOID_RETURN;
}
/**
Checks if a type of table is about to be accessed while executing a
statement.
@param accessed_table Enumeration type that defines the type of table,
e.g. temporary, transactional, non-transactional.
@return
@retval TRUE if the type of the table is about to be accessed
@retval FALSE otherwise
*/
inline bool stmt_accessed_table(enum_stmt_accessed_table accessed_table)
{
DBUG_ENTER("THD::stmt_accessed_table");
DBUG_ASSERT(accessed_table >= 0 && accessed_table < STMT_ACCESS_TABLE_COUNT);
DBUG_RETURN((stmt_accessed_table_flag & (1U << accessed_table)) != 0);
}
/**
Checks if a temporary table is about to be accessed while executing a
statement.
@return
@retval TRUE if a temporary table is about to be accessed
@retval FALSE otherwise
*/
inline bool stmt_accessed_temp_table()
{
DBUG_ENTER("THD::stmt_accessed_temp_table");
DBUG_RETURN((stmt_accessed_table_flag &
((1U << STMT_READS_TEMP_TRANS_TABLE) |
(1U << STMT_WRITES_TEMP_TRANS_TABLE) |
(1U << STMT_READS_TEMP_NON_TRANS_TABLE) |
(1U << STMT_WRITES_TEMP_NON_TRANS_TABLE))) != 0);
}
/**
Checks if a temporary non-transactional table is about to be accessed
while executing a statement.
@return
@retval TRUE if a temporary non-transactional table is about to be
accessed
@retval FALSE otherwise
*/
inline bool stmt_accessed_non_trans_temp_table()
{
DBUG_ENTER("THD::stmt_accessed_non_trans_temp_table");
DBUG_RETURN((stmt_accessed_table_flag &
((1U << STMT_READS_TEMP_NON_TRANS_TABLE) |
(1U << STMT_WRITES_TEMP_NON_TRANS_TABLE))) != 0);
}
/**
true if the parsed tree contains references to stored procedures
or functions, false otherwise
@@ -1317,6 +1436,12 @@ private:
stored procedure has its own LEX object (but no own THD object).
*/
uint32 binlog_stmt_flags;
/**
Bit field that determines the type of tables that are about to be
be accessed while executing a statement.
*/
uint32 stmt_accessed_table_flag;
};

View File

@@ -5653,7 +5653,6 @@ void THD::reset_for_next_command()
thd->reset_current_stmt_binlog_format_row();
thd->binlog_unsafe_warning_flags= 0;
thd->stmt_accessed_table_flag= 0;
DBUG_PRINT("debug",
("is_current_stmt_binlog_format_row(): %d",

View File

@@ -38,15 +38,15 @@ SET(PERFSCHEMA_SOURCES ha_perfschema.h
table_all_instr.h
table_events_waits.h
table_events_waits_summary.h
table_ews_global_by_event_name.h
table_file_instances.h
table_file_summary.h
table_performance_timers.h
table_processlist.h
table_setup_consumers.h
table_setup_instruments.h
table_setup_objects.h
table_setup_timers.h
table_sync_instances.h
table_threads.h
ha_perfschema.cc
pfs.cc
pfs_column_values.cc
@@ -60,15 +60,15 @@ SET(PERFSCHEMA_SOURCES ha_perfschema.h
table_all_instr.cc
table_events_waits.cc
table_events_waits_summary.cc
table_ews_global_by_event_name.cc
table_file_instances.cc
table_file_summary.cc
table_performance_timers.cc
table_processlist.cc
table_setup_consumers.cc
table_setup_instruments.cc
table_setup_objects.cc
table_setup_timers.cc
table_sync_instances.cc
table_threads.cc
pfs_atomic.cc
pfs_check.cc
)

View File

@@ -39,12 +39,12 @@ noinst_HEADERS = ha_perfschema.h pfs_engine_table.h pfs.h pfs_server.h \
table_setup_instruments.h table_performance_timers.h \
table_setup_timers.h \
table_setup_consumers.h table_events_waits.h \
pfs_events_waits.h pfs_timer.h table_processlist.h \
pfs_events_waits.h pfs_timer.h table_threads.h \
table_sync_instances.h \
table_events_waits_summary.h pfs_stat.h \
table_all_instr.h \
table_ews_global_by_event_name.h table_all_instr.h \
table_file_instances.h table_file_summary.h \
table_setup_objects.h pfs_lock.h pfs_atomic.h
pfs_lock.h pfs_atomic.h
PSE_SOURCES = ha_perfschema.cc pfs_engine_table.cc pfs.cc pfs_server.cc \
pfs_global.cc pfs_instr_class.cc pfs_instr.cc \
@@ -52,12 +52,12 @@ PSE_SOURCES = ha_perfschema.cc pfs_engine_table.cc pfs.cc pfs_server.cc \
table_setup_instruments.cc table_performance_timers.cc \
table_setup_timers.cc \
table_setup_consumers.cc table_events_waits.cc \
pfs_events_waits.cc pfs_timer.cc table_processlist.cc \
pfs_events_waits.cc pfs_timer.cc table_threads.cc \
table_sync_instances.cc \
table_events_waits_summary.cc \
table_all_instr.cc \
table_ews_global_by_event_name.cc table_all_instr.cc \
table_file_instances.cc table_file_summary.cc \
table_setup_objects.cc pfs_atomic.cc pfs_check.cc
pfs_atomic.cc pfs_check.cc
EXTRA_LIBRARIES = libperfschema.a
noinst_LIBRARIES = @plugin_perfschema_static_target@

View File

@@ -1117,7 +1117,6 @@ get_thread_mutex_locker_v1(PSI_mutex_locker_state *state,
}
PFS_wait_locker *pfs_locker= &pfs_thread->m_wait_locker_stack
[pfs_thread->m_wait_locker_count];
pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS;
pfs_locker->m_target.m_mutex= pfs_mutex;
pfs_locker->m_waits_current.m_thread= pfs_thread;
@@ -1163,7 +1162,6 @@ get_thread_rwlock_locker_v1(PSI_rwlock_locker_state *state,
}
PFS_wait_locker *pfs_locker= &pfs_thread->m_wait_locker_stack
[pfs_thread->m_wait_locker_count];
pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS;
pfs_locker->m_target.m_rwlock= pfs_rwlock;
pfs_locker->m_waits_current.m_thread= pfs_thread;
@@ -1222,7 +1220,6 @@ get_thread_cond_locker_v1(PSI_cond_locker_state *state,
}
PFS_wait_locker *pfs_locker= &pfs_thread->m_wait_locker_stack
[pfs_thread->m_wait_locker_count];
pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS;
pfs_locker->m_target.m_cond= pfs_cond;
pfs_locker->m_waits_current.m_thread= pfs_thread;
@@ -1267,7 +1264,6 @@ get_thread_table_locker_v1(PSI_table_locker_state *state,
}
PFS_wait_locker *pfs_locker= &pfs_thread->m_wait_locker_stack
[pfs_thread->m_wait_locker_count];
pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS;
pfs_locker->m_target.m_table= pfs_table;
pfs_locker->m_waits_current.m_thread= pfs_thread;
@@ -1320,7 +1316,6 @@ get_thread_file_name_locker_v1(PSI_file_locker_state *state,
PFS_wait_locker *pfs_locker= &pfs_thread->m_wait_locker_stack
[pfs_thread->m_wait_locker_count];
pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS;
pfs_locker->m_target.m_file= pfs_file;
pfs_locker->m_waits_current.m_thread= pfs_thread;
@@ -1372,7 +1367,6 @@ get_thread_file_stream_locker_v1(PSI_file_locker_state *state,
}
PFS_wait_locker *pfs_locker= &pfs_thread->m_wait_locker_stack
[pfs_thread->m_wait_locker_count];
pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS;
pfs_locker->m_target.m_file= pfs_file;
pfs_locker->m_waits_current.m_thread= pfs_thread;
@@ -1441,7 +1435,6 @@ get_thread_file_descriptor_locker_v1(PSI_file_locker_state *state,
}
PFS_wait_locker *pfs_locker= &pfs_thread->m_wait_locker_stack
[pfs_thread->m_wait_locker_count];
pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS;
pfs_locker->m_target.m_file= pfs_file;
pfs_locker->m_waits_current.m_thread= pfs_thread;

View File

@@ -23,11 +23,11 @@
#include "table_events_waits.h"
#include "table_setup_consumers.h"
#include "table_setup_instruments.h"
#include "table_setup_objects.h"
#include "table_setup_timers.h"
#include "table_performance_timers.h"
#include "table_processlist.h"
#include "table_threads.h"
#include "table_events_waits_summary.h"
#include "table_ews_global_by_event_name.h"
#include "table_sync_instances.h"
#include "table_file_instances.h"
#include "table_file_summary.h"
@@ -52,13 +52,12 @@ static PFS_engine_table_share *all_shares[]=
&table_events_waits_history_long::m_share,
&table_setup_consumers::m_share,
&table_setup_instruments::m_share,
&table_setup_objects::m_share,
&table_setup_timers::m_share,
&table_performance_timers::m_share,
&table_processlist::m_share,
&table_threads::m_share,
&table_events_waits_summary_by_thread_by_event_name::m_share,
&table_events_waits_summary_by_event_name::m_share,
&table_events_waits_summary_by_instance::m_share,
&table_ews_global_by_event_name::m_share,
&table_file_summary_by_event_name::m_share,
&table_file_summary_by_instance::m_share,
&table_mutex_instances::m_share,

View File

@@ -80,25 +80,10 @@ void cleanup_events_waits_history_long(void)
events_waits_history_long_array= NULL;
}
static void copy_events_waits(PFS_events_waits *dest,
const PFS_events_waits *source)
static inline void copy_events_waits(PFS_events_waits *dest,
const PFS_events_waits *source)
{
/* m_wait_class must be the first member of PFS_events_waits. */
compile_time_assert(offsetof(PFS_events_waits, m_wait_class) == 0);
char* dest_body= (reinterpret_cast<char*> (dest)) + sizeof(events_waits_class);
const char* source_body= (reinterpret_cast<const char*> (source))
+ sizeof(events_waits_class);
/* See comments in table_events_waits_common::make_row(). */
/* Signal readers they are about to read garbage ... */
dest->m_wait_class= NO_WAIT_CLASS;
/* ... that this can generate. */
memcpy(dest_body, source_body,
sizeof(PFS_events_waits) - sizeof(events_waits_class));
/* Signal readers the record is now clean again. */
dest->m_wait_class= source->m_wait_class;
memcpy(dest, source, sizeof(PFS_events_waits));
}
/**
@@ -116,9 +101,7 @@ void insert_events_waits_history(PFS_thread *thread, PFS_events_waits *wait)
causing a potential race condition.
We are not testing for this and insert a possibly empty record,
to make this thread (the writer) faster.
This is ok, the truncated data will have
wait->m_wait_class == NO_WAIT_CLASS,
which readers of m_waits_history will filter out.
This is ok, the readers of m_waits_history will filter this out.
*/
copy_events_waits(&thread->m_waits_history[index], wait);

View File

@@ -97,7 +97,7 @@ struct PFS_events_waits
- TRUNCATE EVENTS_WAITS_HISTORY
- TRUNCATE EVENTS_WAITS_HISTORY_LONG
*/
volatile events_waits_class m_wait_class;
events_waits_class m_wait_class;
/** Executing thread. */
PFS_thread *m_thread;
/** Instrument metadata. */

View File

@@ -217,16 +217,8 @@ void table_events_waits_common::make_row(bool thread_own_wait,
or 8 atomics per recorded event.
The problem is that we record a *lot* of events ...
Instead, a *dirty* marking is done using m_wait_class.
Using m_wait_class alone does not guarantee anything, it just filters
out most of the bad data.
This is acceptable because this code is garbage-proof,
and won't crash on bad data, only display it,
very rarely (which is accepted).
If a bad record is displayed, it's a very transient failure:
the next select * from EVENTS_WAITS_CURRENT/_HISTORY/_HISTORY_LONG will
show clean data again.
This code is prepared to accept *dirty* records,
and sanitizes all the data before returning a row.
*/
m_row.m_thread_internal_id= safe_thread->m_thread_internal_id;

View File

@@ -338,144 +338,6 @@ int table_events_waits_summary_by_thread_by_event_name
return 0;
}
THR_LOCK table_events_waits_summary_by_event_name::m_table_lock;
static const TABLE_FIELD_TYPE ews_by_event_name_field_types[]=
{
{
{ C_STRING_WITH_LEN("EVENT_NAME") },
{ C_STRING_WITH_LEN("varchar(128)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("COUNT_STAR") },
{ C_STRING_WITH_LEN("bigint(20)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("SUM_TIMER_WAIT") },
{ C_STRING_WITH_LEN("bigint(20)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("MIN_TIMER_WAIT") },
{ C_STRING_WITH_LEN("bigint(20)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("AVG_TIMER_WAIT") },
{ C_STRING_WITH_LEN("bigint(20)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("MAX_TIMER_WAIT") },
{ C_STRING_WITH_LEN("bigint(20)") },
{ NULL, 0}
}
};
TABLE_FIELD_DEF
table_events_waits_summary_by_event_name::m_field_def=
{ 6, ews_by_event_name_field_types };
PFS_engine_table_share
table_events_waits_summary_by_event_name::m_share=
{
{ C_STRING_WITH_LEN("EVENTS_WAITS_SUMMARY_BY_EVENT_NAME") },
&pfs_truncatable_acl,
&table_events_waits_summary_by_event_name::create,
NULL, /* write_row */
&table_events_waits_summary_by_event_name::delete_all_rows,
1000, /* records */
sizeof(pos_all_instr_class),
&m_table_lock,
&m_field_def,
false /* checked */
};
PFS_engine_table* table_events_waits_summary_by_event_name::create(void)
{
return new table_events_waits_summary_by_event_name();
}
int table_events_waits_summary_by_event_name::delete_all_rows(void)
{
reset_instrument_class_waits();
return 0;
}
table_events_waits_summary_by_event_name
::table_events_waits_summary_by_event_name()
: table_all_instr_class(&m_share)
{}
void table_events_waits_summary_by_event_name
::make_instr_row(PFS_instr_class *klass)
{
m_row.m_name= klass->m_name;
m_row.m_name_length= klass->m_name_length;
m_row.m_count= klass->m_wait_stat.m_count;
m_row.m_sum= klass->m_wait_stat.m_sum;
m_row.m_min= klass->m_wait_stat.m_min;
m_row.m_max= klass->m_wait_stat.m_max;
if (m_row.m_count)
m_row.m_avg= m_row.m_sum / m_row.m_count;
else
{
m_row.m_min= 0;
m_row.m_avg= 0;
}
}
int table_events_waits_summary_by_event_name
::read_row_values(TABLE *table, unsigned char *, Field **fields,
bool read_all)
{
Field *f;
/* Set the null bits */
DBUG_ASSERT(table->s->null_bytes == 0);
/*
The row always exist,
the instrument classes are static and never disappear.
*/
for (; (f= *fields) ; fields++)
{
if (read_all || bitmap_is_set(table->read_set, f->field_index))
{
switch(f->field_index)
{
case 0: /* NAME */
set_field_varchar_utf8(f, m_row.m_name, m_row.m_name_length);
break;
case 1: /* COUNT */
set_field_ulonglong(f, m_row.m_count);
break;
case 2: /* SUM */
set_field_ulonglong(f, m_row.m_sum);
break;
case 3: /* MIN */
set_field_ulonglong(f, m_row.m_min);
break;
case 4: /* AVG */
set_field_ulonglong(f, m_row.m_avg);
break;
case 5: /* MAX */
set_field_ulonglong(f, m_row.m_max);
break;
default:
DBUG_ASSERT(false);
}
}
}
return 0;
}
THR_LOCK table_events_waits_summary_by_instance::m_table_lock;
static const TABLE_FIELD_TYPE ews_by_instance_field_types[]=

View File

@@ -144,58 +144,6 @@ private:
pos_events_waits_summary_by_thread_by_event_name m_next_pos;
};
/** A row of PERFORMANCE_SCHEMA.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME. */
struct row_events_waits_summary_by_event_name
{
/** Column EVENT_NAME. */
const char *m_name;
/** Length in bytes of @c m_name. */
uint m_name_length;
/** Column COUNT_STAR. */
ulonglong m_count;
/** Column SUM_TIMER_WAIT. */
ulonglong m_sum;
/** Column MIN_TIMER_WAIT. */
ulonglong m_min;
/** Column AVG_TIMER_WAIT. */
ulonglong m_avg;
/** Column MAX_TIMER_WAIT. */
ulonglong m_max;
};
/** Table PERFORMANCE_SCHEMA.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME. */
class table_events_waits_summary_by_event_name : public table_all_instr_class
{
public:
/** Table share */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
protected:
virtual void make_instr_row(PFS_instr_class *klass);
virtual int read_row_values(TABLE *table,
unsigned char *buf,
Field **fields,
bool read_all);
table_events_waits_summary_by_event_name();
public:
~table_events_waits_summary_by_event_name()
{}
private:
/** Table share lock. */
static THR_LOCK m_table_lock;
/** Fields definition. */
static TABLE_FIELD_DEF m_field_def;
/** Current row. */
row_events_waits_summary_by_event_name m_row;
};
/** A row of PERFORMANCE_SCHEMA.EVENTS_WAITS_SUMMARY_BY_INSTANCE. */
struct row_events_waits_summary_by_instance
{

View File

@@ -0,0 +1,166 @@
/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
/**
@file storage/perfschema/table_ews_global_by_event_name.cc
Table EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME (implementation).
*/
#include "my_global.h"
#include "my_pthread.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_ews_global_by_event_name.h"
#include "pfs_global.h"
THR_LOCK table_ews_global_by_event_name::m_table_lock;
static const TABLE_FIELD_TYPE field_types[]=
{
{
{ C_STRING_WITH_LEN("EVENT_NAME") },
{ C_STRING_WITH_LEN("varchar(128)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("COUNT_STAR") },
{ C_STRING_WITH_LEN("bigint(20)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("SUM_TIMER_WAIT") },
{ C_STRING_WITH_LEN("bigint(20)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("MIN_TIMER_WAIT") },
{ C_STRING_WITH_LEN("bigint(20)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("AVG_TIMER_WAIT") },
{ C_STRING_WITH_LEN("bigint(20)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("MAX_TIMER_WAIT") },
{ C_STRING_WITH_LEN("bigint(20)") },
{ NULL, 0}
}
};
TABLE_FIELD_DEF
table_ews_global_by_event_name::m_field_def=
{ 6, field_types };
PFS_engine_table_share
table_ews_global_by_event_name::m_share=
{
{ C_STRING_WITH_LEN("EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME") },
&pfs_truncatable_acl,
&table_ews_global_by_event_name::create,
NULL, /* write_row */
&table_ews_global_by_event_name::delete_all_rows,
1000, /* records */
sizeof(pos_all_instr_class),
&m_table_lock,
&m_field_def,
false /* checked */
};
PFS_engine_table* table_ews_global_by_event_name::create(void)
{
return new table_ews_global_by_event_name();
}
int table_ews_global_by_event_name::delete_all_rows(void)
{
reset_instrument_class_waits();
return 0;
}
table_ews_global_by_event_name
::table_ews_global_by_event_name()
: table_all_instr_class(&m_share)
{}
void table_ews_global_by_event_name
::make_instr_row(PFS_instr_class *klass)
{
m_row.m_name= klass->m_name;
m_row.m_name_length= klass->m_name_length;
m_row.m_count= klass->m_wait_stat.m_count;
m_row.m_sum= klass->m_wait_stat.m_sum;
m_row.m_min= klass->m_wait_stat.m_min;
m_row.m_max= klass->m_wait_stat.m_max;
if (m_row.m_count)
m_row.m_avg= m_row.m_sum / m_row.m_count;
else
{
m_row.m_min= 0;
m_row.m_avg= 0;
}
}
int table_ews_global_by_event_name
::read_row_values(TABLE *table, unsigned char *, Field **fields,
bool read_all)
{
Field *f;
/* Set the null bits */
DBUG_ASSERT(table->s->null_bytes == 0);
/*
The row always exist,
the instrument classes are static and never disappear.
*/
for (; (f= *fields) ; fields++)
{
if (read_all || bitmap_is_set(table->read_set, f->field_index))
{
switch(f->field_index)
{
case 0: /* NAME */
set_field_varchar_utf8(f, m_row.m_name, m_row.m_name_length);
break;
case 1: /* COUNT */
set_field_ulonglong(f, m_row.m_count);
break;
case 2: /* SUM */
set_field_ulonglong(f, m_row.m_sum);
break;
case 3: /* MIN */
set_field_ulonglong(f, m_row.m_min);
break;
case 4: /* AVG */
set_field_ulonglong(f, m_row.m_avg);
break;
case 5: /* MAX */
set_field_ulonglong(f, m_row.m_max);
break;
default:
DBUG_ASSERT(false);
}
}
}
return 0;
}

View File

@@ -0,0 +1,88 @@
/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
#ifndef TABLE_EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME_H
#define TABLE_EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME_H
/**
@file storage/perfschema/table_ews_global_by_event_name.h
Table EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME (declarations).
*/
#include "pfs_column_types.h"
#include "pfs_engine_table.h"
#include "pfs_instr_class.h"
#include "pfs_instr.h"
#include "table_all_instr.h"
/**
@addtogroup Performance_schema_tables
@{
*/
/** A row of PERFORMANCE_SCHEMA.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME. */
struct row_ews_global_by_event_name
{
/** Column EVENT_NAME. */
const char *m_name;
/** Length in bytes of @c m_name. */
uint m_name_length;
/** Column COUNT_STAR. */
ulonglong m_count;
/** Column SUM_TIMER_WAIT. */
ulonglong m_sum;
/** Column MIN_TIMER_WAIT. */
ulonglong m_min;
/** Column AVG_TIMER_WAIT. */
ulonglong m_avg;
/** Column MAX_TIMER_WAIT. */
ulonglong m_max;
};
/** Table PERFORMANCE_SCHEMA.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME. */
class table_ews_global_by_event_name : public table_all_instr_class
{
public:
/** Table share */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int delete_all_rows();
protected:
virtual void make_instr_row(PFS_instr_class *klass);
virtual int read_row_values(TABLE *table,
unsigned char *buf,
Field **fields,
bool read_all);
table_ews_global_by_event_name();
public:
~table_ews_global_by_event_name()
{}
private:
/** Table share lock. */
static THR_LOCK m_table_lock;
/** Fields definition. */
static TABLE_FIELD_DEF m_field_def;
/** Current row. */
row_ews_global_by_event_name m_row;
};
/** @} */
#endif

View File

@@ -1,281 +0,0 @@
/* Copyright (C) 2008-2009 Sun Microsystems, Inc
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/**
@file storage/perfschema/table_setup_objects.cc
Table SETUP_OBJECTS (implementation).
*/
#include "sql_priv.h"
#include "unireg.h"
#include "pfs_instr_class.h"
#include "pfs_column_types.h"
#include "pfs_column_values.h"
#include "table_setup_objects.h"
#include "pfs_global.h"
THR_LOCK table_setup_objects::m_table_lock;
static const TABLE_FIELD_TYPE field_types[]=
{
{
{ C_STRING_WITH_LEN("OBJECT_TYPE") },
{ C_STRING_WITH_LEN("varchar(64)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("OBJECT_SCHEMA") },
{ C_STRING_WITH_LEN("varchar(64)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("OBJECT_NAME") },
{ C_STRING_WITH_LEN("varchar(64)") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("ENABLED") },
{ C_STRING_WITH_LEN("enum(\'YES\',\'NO\')") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("TIMED") },
{ C_STRING_WITH_LEN("enum(\'YES\',\'NO\')") },
{ NULL, 0}
},
{
{ C_STRING_WITH_LEN("AGGREGATED") },
{ C_STRING_WITH_LEN("enum(\'YES\',\'NO\')") },
{ NULL, 0}
}
};
TABLE_FIELD_DEF
table_setup_objects::m_field_def=
{ 6, field_types };
PFS_engine_table_share
table_setup_objects::m_share=
{
{ C_STRING_WITH_LEN("SETUP_OBJECTS") },
&pfs_editable_acl,
&table_setup_objects::create,
table_setup_objects::write_row,
table_setup_objects::delete_all_rows,
1000, /* records */
sizeof(pos_setup_objects),
&m_table_lock,
&m_field_def,
false /* checked */
};
PFS_engine_table* table_setup_objects::create(void)
{
return new table_setup_objects();
}
int table_setup_objects::write_row(TABLE *table, unsigned char *buf,
Field **fields)
{
/* Not implemented */
return HA_ERR_WRONG_COMMAND;
}
int table_setup_objects::delete_all_rows(void)
{
/* Not implemented */
return HA_ERR_WRONG_COMMAND;
}
table_setup_objects::table_setup_objects()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(), m_next_pos()
{}
void table_setup_objects::reset_position(void)
{
m_pos.reset();
m_next_pos.reset();
}
int table_setup_objects::rnd_next(void)
{
PFS_table_share *table_share;
for (m_pos.set_at(&m_next_pos);
m_pos.has_more_view();
m_pos.next_view())
{
switch (m_pos.m_index_1) {
case pos_setup_objects::VIEW_TABLE:
for ( ; m_pos.m_index_2 < table_share_max; m_pos.m_index_2++)
{
table_share= &table_share_array[m_pos.m_index_2];
if (table_share->m_lock.is_populated())
{
make_row(table_share);
m_next_pos.set_after(&m_pos);
return 0;
}
}
break;
case pos_setup_objects::VIEW_EVENT:
case pos_setup_objects::VIEW_PROCEDURE:
case pos_setup_objects::VIEW_FUNCTION:
default:
break;
}
}
return HA_ERR_END_OF_FILE;
}
int table_setup_objects::rnd_pos(const void *pos)
{
PFS_table_share *share;
set_position(pos);
switch (m_pos.m_index_1) {
case pos_setup_objects::VIEW_TABLE:
DBUG_ASSERT(m_pos.m_index_2 < table_share_max);
share= &table_share_array[m_pos.m_index_2];
if (share->m_lock.is_populated())
{
make_row(share);
return 0;
}
break;
case pos_setup_objects::VIEW_EVENT:
case pos_setup_objects::VIEW_PROCEDURE:
case pos_setup_objects::VIEW_FUNCTION:
default:
break;
}
return HA_ERR_RECORD_DELETED;
}
void table_setup_objects::make_row(PFS_table_share *share)
{
pfs_lock lock;
m_row_exists= false;
if (share == NULL)
return;
share->m_lock.begin_optimistic_lock(&lock);
m_row.m_schema_name= &share->m_schema_name[0];
m_row.m_schema_name_length= share->m_schema_name_length;
m_row.m_object_name= &share->m_table_name[0];
m_row.m_object_name_length= share->m_table_name_length;
m_row.m_enabled_ptr= &share->m_enabled;
m_row.m_timed_ptr= &share->m_timed;
m_row.m_aggregated_ptr= &share->m_aggregated;
if (share->m_lock.end_optimistic_lock(&lock))
m_row_exists= true;
}
int table_setup_objects::read_row_values(TABLE *table,
unsigned char *buf,
Field **fields,
bool read_all)
{
Field *f;
if (unlikely(! m_row_exists))
return HA_ERR_RECORD_DELETED;
/* Set the null bits */
DBUG_ASSERT(table->s->null_bytes == 1);
buf[0]= 0;
for (; (f= *fields) ; fields++)
{
if (read_all || bitmap_is_set(table->read_set, f->field_index))
{
switch(f->field_index)
{
case 0: /* OBJECT_TYPE */
set_field_varchar_utf8(f, "TABLE", 5);
break;
case 1: /* OBJECT_SCHEMA */
set_field_varchar_utf8(f, m_row.m_schema_name,
m_row.m_schema_name_length);
break;
case 2: /* OBJECT_NAME */
set_field_varchar_utf8(f, m_row.m_object_name,
m_row.m_object_name_length);
break;
case 3: /* ENABLED */
set_field_enum(f, (*m_row.m_enabled_ptr) ? ENUM_YES : ENUM_NO);
break;
case 4: /* TIMED */
set_field_enum(f, (*m_row.m_timed_ptr) ? ENUM_YES : ENUM_NO);
break;
case 5: /* AGGREGATED */
set_field_enum(f, (*m_row.m_aggregated_ptr) ? ENUM_YES : ENUM_NO);
break;
default:
DBUG_ASSERT(false);
}
}
}
return 0;
}
int table_setup_objects::update_row_values(TABLE *table,
const unsigned char *,
unsigned char *,
Field **fields)
{
Field *f;
enum_yes_no value;
for (; (f= *fields) ; fields++)
{
if (bitmap_is_set(table->write_set, f->field_index))
{
switch(f->field_index)
{
case 0: /* OBJECT_TYPE */
case 1: /* OBJECT_SCHEMA */
case 2: /* OBJECT_NAME */
my_error(ER_WRONG_PERFSCHEMA_USAGE, MYF(0));
return HA_ERR_WRONG_COMMAND;
case 3: /* ENABLED */
value= (enum_yes_no) get_field_enum(f);
*m_row.m_enabled_ptr= (value == ENUM_YES) ? true : false;
break;
case 4: /* TIMED */
value= (enum_yes_no) get_field_enum(f);
*m_row.m_timed_ptr= (value == ENUM_YES) ? true : false;
break;
case 5: /* AGGREGATED */
value= (enum_yes_no) get_field_enum(f);
*m_row.m_aggregated_ptr= (value == ENUM_YES) ? true : false;
break;
default:
DBUG_ASSERT(false);
}
}
}
return 0;
}

View File

@@ -1,125 +0,0 @@
/* Copyright (C) 2008-2009 Sun Microsystems, Inc
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#ifndef TABLE_SETUP_OBJECTS_H
#define TABLE_SETUP_OBJECTS_H
/**
@file storage/perfschema/table_setup_objects.h
Table SETUP_OBJECTS (declarations).
*/
#include "pfs_instr_class.h"
#include "pfs_engine_table.h"
/**
@addtogroup Performance_schema_tables
@{
*/
/** A row of PERFORMANCE_SCHEMA.SETUP_OBJECTS. */
struct row_setup_objects
{
/** Column SCHEMA_NAME. */
const char *m_schema_name;
/** Length in bytes of @c m_schema_name. */
uint m_schema_name_length;
/** Column OBJECT_NAME. */
const char *m_object_name;
/** Length in bytes of @c m_object_name. */
uint m_object_name_length;
/** Column ENABLED. */
bool *m_enabled_ptr;
/** Column TIMED. */
bool *m_timed_ptr;
/** Column AGGREGATED. */
bool *m_aggregated_ptr;
};
/** Position of a cursor on PERFORMANCE_SCHEMA.SETUP_OBJECTS. */
struct pos_setup_objects : public PFS_double_index,
public PFS_object_view_constants
{
pos_setup_objects()
: PFS_double_index(VIEW_TABLE, 0)
{}
inline void reset(void)
{
m_index_1= VIEW_TABLE;
m_index_2= 0;
}
inline bool has_more_view(void)
{ return (m_index_1 <= VIEW_FUNCTION); }
inline void next_view(void)
{
m_index_1++;
m_index_2= 0;
}
};
/** Table PERFORMANCE_SCHEMA.SETUP_OBJECTS. */
class table_setup_objects : public PFS_engine_table
{
public:
/** Table share. */
static PFS_engine_table_share m_share;
static PFS_engine_table* create();
static int write_row(TABLE *table, unsigned char *buf, Field **fields);
static int delete_all_rows();
virtual int rnd_next();
virtual int rnd_pos(const void *pos);
virtual void reset_position(void);
protected:
virtual int read_row_values(TABLE *table,
unsigned char *buf,
Field **fields,
bool read_all);
virtual int update_row_values(TABLE *table,
const unsigned char *old_buf,
unsigned char *new_buf,
Field **fields);
table_setup_objects();
public:
~table_setup_objects()
{}
private:
void make_row(PFS_table_share *share);
/** Table share lock. */
static THR_LOCK m_table_lock;
/** Fields definition. */
static TABLE_FIELD_DEF m_field_def;
/** Current row. */
row_setup_objects m_row;
/** True is the current row exists. */
bool m_row_exists;
/** Current position. */
pos_setup_objects m_pos;
/** Next position. */
pos_setup_objects m_next_pos;
};
/** @} */
#endif

View File

@@ -14,17 +14,17 @@
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
/**
@file storage/perfschema/table_processlist.cc
Table PROCESSLIST (implementation).
@file storage/perfschema/table_threads.cc
Table THREADS (implementation).
*/
#include "my_global.h"
#include "my_pthread.h"
#include "table_processlist.h"
#include "table_threads.h"
#include "pfs_instr_class.h"
#include "pfs_instr.h"
THR_LOCK table_processlist::m_table_lock;
THR_LOCK table_threads::m_table_lock;
static const TABLE_FIELD_TYPE field_types[]=
{
@@ -46,15 +46,15 @@ static const TABLE_FIELD_TYPE field_types[]=
};
TABLE_FIELD_DEF
table_processlist::m_field_def=
table_threads::m_field_def=
{ 3, field_types };
PFS_engine_table_share
table_processlist::m_share=
table_threads::m_share=
{
{ C_STRING_WITH_LEN("PROCESSLIST") },
{ C_STRING_WITH_LEN("THREADS") },
&pfs_readonly_acl,
&table_processlist::create,
&table_threads::create,
NULL, /* write_row */
NULL, /* delete_all_rows */
1000, /* records */
@@ -64,23 +64,23 @@ table_processlist::m_share=
false /* checked */
};
PFS_engine_table* table_processlist::create(void)
PFS_engine_table* table_threads::create(void)
{
return new table_processlist();
return new table_threads();
}
table_processlist::table_processlist()
table_threads::table_threads()
: PFS_engine_table(&m_share, &m_pos),
m_row_exists(false), m_pos(0), m_next_pos(0)
{}
void table_processlist::reset_position(void)
void table_threads::reset_position(void)
{
m_pos.m_index= 0;
m_next_pos.m_index= 0;
}
int table_processlist::rnd_next(void)
int table_threads::rnd_next(void)
{
PFS_thread *pfs;
@@ -100,7 +100,7 @@ int table_processlist::rnd_next(void)
return HA_ERR_END_OF_FILE;
}
int table_processlist::rnd_pos(const void *pos)
int table_threads::rnd_pos(const void *pos)
{
PFS_thread *pfs;
@@ -116,7 +116,7 @@ int table_processlist::rnd_pos(const void *pos)
return HA_ERR_RECORD_DELETED;
}
void table_processlist::make_row(PFS_thread *pfs)
void table_threads::make_row(PFS_thread *pfs)
{
pfs_lock lock;
PFS_thread_class *safe_class;
@@ -139,10 +139,10 @@ void table_processlist::make_row(PFS_thread *pfs)
m_row_exists= true;
}
int table_processlist::read_row_values(TABLE *table,
unsigned char *,
Field **fields,
bool read_all)
int table_threads::read_row_values(TABLE *table,
unsigned char *,
Field **fields,
bool read_all)
{
Field *f;

View File

@@ -13,12 +13,12 @@
along with this program; if not, write to the Free Software Foundation,
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
#ifndef TABLE_PROCESSIST_H
#define TABLE_PROCESSIST_H
#ifndef TABLE_THREADS_H
#define TABLE_THREADS_H
/**
@file storage/perfschema/table_processlist.h
Table PROCESSLIST (declarations).
@file storage/perfschema/table_threads.h
Table THREADS (declarations).
*/
#include "pfs_column_types.h"
@@ -31,8 +31,8 @@ struct PFS_thread;
@{
*/
/** A row of PERFORMANCE_SCHEMA.PROCESSLIST. */
struct row_processlist
/** A row of PERFORMANCE_SCHEMA.THREADS. */
struct row_threads
{
/** Column THREAD_ID. */
ulong m_thread_internal_id;
@@ -44,8 +44,8 @@ struct row_processlist
uint m_name_length;
};
/** Table PERFORMANCE_SCHEMA.PROCESSLIST. */
class table_processlist : public PFS_engine_table
/** Table PERFORMANCE_SCHEMA.THREADS. */
class table_threads : public PFS_engine_table
{
public:
/** Table share. */
@@ -63,10 +63,10 @@ protected:
bool read_all);
protected:
table_processlist();
table_threads();
public:
~table_processlist()
~table_threads()
{}
private:
@@ -78,7 +78,7 @@ private:
static TABLE_FIELD_DEF m_field_def;
/** Current row. */
row_processlist m_row;
row_threads m_row;
/** True is the current row exists. */
bool m_row_exists;
/** Current position. */