From: Christopher Powers Date: August 15 2011 6:27am Subject: bzr push into mysql-trunk branch (chris.powers:3365 to 3366) WL#4896 List-Archive: http://lists.mysql.com/commits/140615 Message-Id: <201108150627.p7F6RZC9011291@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3366 Christopher Powers 2011-08-15 WL#4896 "Performance Schema Net IO" Fixed bug where sockets with disabled thread instrumentation were not removed from socket_instances after being disconnected. Updates from ML for socket_summary_by_instance. removed: mysql-test/collections/mysql-trunk-wl4896.push added: mysql-test/suite/perfschema/include/socket_check1.inc modified: mysql-test/suite/perfschema/include/socket_event.inc mysql-test/suite/perfschema/include/socket_summary_check.inc mysql-test/suite/perfschema/include/wait_till_sleep.inc mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result mysql-test/suite/perfschema/t/disabled.def mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test storage/perfschema/pfs.cc 3365 Christopher Powers 2011-08-14 WL#4896 "Performance Schema Net IO" Isolated regression test added: mysql-test/collections/mysql-trunk-wl4896.push mysql-test/suite/perfschema/include/socket_event_dbg.inc mysql-test/suite/perfschema/include/socket_summary_check_dbg.inc mysql-test/suite/perfschema/r/socket_summary_by_instance_func_dbg.result mysql-test/suite/perfschema/t/socket_summary_by_instance_func_dbg.test modified: mysql-test/suite/perfschema/t/disabled.def mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test === removed file 'mysql-test/collections/mysql-trunk-wl4896.push' --- a/mysql-test/collections/mysql-trunk-wl4896.push 2011-08-15 01:05:55 +0000 +++ b/mysql-test/collections/mysql-trunk-wl4896.push 1970-01-01 00:00:00 +0000 @@ -1,2 +0,0 @@ -perl mysql-test-run.pl --timer --force --parallel=auto --comment=n_mix --vardir=var-n_mix --mysqld=--binlog-format=mixed --skip-ndb --suite=perfschema socket_summary_by_instance_func_dbg.test - === added file 'mysql-test/suite/perfschema/include/socket_check1.inc' --- a/mysql-test/suite/perfschema/include/socket_check1.inc 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/include/socket_check1.inc 2011-08-15 06:26:10 +0000 @@ -0,0 +1,117 @@ +# Example how to use this auxiliary script +#----------------------------------------- +# +### The table/tables used in $part must have the right content. +### $title_prefix is used for the generation of titles +# +# let $title_prefix= 4.3; +### $check_num is used for the generation of titles and gets incremented after +### every call of the current script. +# let $check_num= 1; +### $column_list is used for the generation of error information and valid for +### every sub test. +# let $column_list= +# t2.COUNT_READ - t1.COUNT_READ AS D_COUNT_READ, +# t2.COUNT_READ AS S2_COUNT_READ, +# t1.COUNT_READ AS S1_COUNT_READ, +# t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ AS D_SUM_NUMBER_OF_BYTES_READ, +# t2.SUM_NUMBER_OF_BYTES_READ AS S2_SUM_NUMBER_OF_BYTES_READ, +# t1.SUM_NUMBER_OF_BYTES_READ AS S1_SUM_NUMBER_OF_BYTES_READ, +# t2.COUNT_WRITE - t1.COUNT_WRITE AS D_COUNT_WRITE, +# t2.COUNT_WRITE AS S2_COUNT_WRITE, +# t1.COUNT_WRITE AS S1_COUNT_WRITE, +# t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE AS D_UM_NUMBER_OF_BYTES_WRITE, +# t2.SUM_NUMBER_OF_BYTES_WRITE AS S2_SUM_NUMBER_OF_BYTES_WRITE, +# t1.SUM_NUMBER_OF_BYTES_WRITE AS S1_SUM_NUMBER_OF_BYTES_WRITE, +# t2.COUNT_MISC - t1.COUNT_MISC AS D_COUNT_MISC, +# t2.COUNT_MISC AS S2_COUNT_MISC, +# t1.COUNT_MISC AS S1_COUNT_MISC; +### $part is used for the generation of "check" statements + error information +### and valid for every sub test. +# let $part= +# FROM mysqltest.socket_summary_by_instance_detail t1 +# JOIN mysqltest.socket_summary_by_instance_detail t2 +# USING (EVENT_NAME, OBJECT_INSTANCE_BEGIN, run) +# WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +# AND EVENT_NAME LIKE ('%client_connection') +# AND run = 1; +# +# --echo # $title_prefix Check the differences caused by SQL statement +# +# let stmt1= SELECT col2 FROM does_not_exist; +# let stmt2= SELECT col2 FROM does_not_exist WHERE col1 = 0; +# let $my_rules= +# t2.COUNT_READ - t1.COUNT_READ = 0 AND +# t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ = LENGTH('$stmt2') - LENGTH('$stmt1') AND +# t2.COUNT_WRITE - t1.COUNT_WRITE = 0 AND +# t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE = 0 AND +# t2.COUNT_MISC - t1.COUNT_MISC = 0; +# --source ../include/socket_check1.inc +# +# let stmt1= .... +# let stmt2= .... +# let $my_rules= ... +# --source ../include/socket_check1.inc +# +# ... +# + +--echo # $title_prefix.$check_num Compare impact of statements +--echo # $stmt2 +--echo # $stmt1 + +# MLML: Disable this later +if (`SELECT CONCAT("$stmt1","$stmt2","$my_rules") LIKE '%_not_set%'`) +{ + --echo # INTERNAL ERROR: + --echo # At least one of the variables has no value (is like '%_not_set') + --echo # stmt1 : $stmt1 + --echo # stmt2 : $stmt2 + --echo # my_rules : $my_rules + --echo # Sorry, have to abort + exit; +} + +if(`SELECT ($my_rules) <> 1 + $part + AND t2.statement = '$stmt2' AND t1.statement = '$stmt1'`) +{ + --disable_abort_on_error + --enable_query_log + --enable_result_log + --echo # The compared statistics looks suspicious + --echo # We expect + --echo $my_rules + --echo + --horizontal_results + eval + SELECT $my_rules AS Expect_1 + $part + AND t2.statement = '$stmt2' AND t1.statement = '$stmt1'; + --echo + --vertical_results + eval + SELECT $column_list + $part + AND t1.statement = '$stmt1' AND t2.statement = '$stmt2'; + --echo + --horizontal_results + + eval + SELECT LPAD(COUNT_READ, 8, ' ') AS CNT_READ, LPAD(SUM_NUMBER_OF_BYTES_READ, 10,' ') AS BYTES_READ, + LPAD(COUNT_WRITE,9, ' ') AS CNT_WRITE,LPAD(SUM_NUMBER_OF_BYTES_WRITE, 11,' ') AS BYTES_WRITE, + LPAD(COUNT_MISC, 8, ' ') AS CNT_MISC, statement + FROM mysqltest.socket_summary_by_instance_detail + WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin + AND EVENT_NAME LIKE ('%client_connection') + AND run = 1 + AND statement IN('$stmt2','$stmt1'); +} +# Initialize all variables which depend on the statements to be checked. +# This prevents that we run with wrong data. +let $stmt1= stmt1_not_set; +let $stmt2= stmt2_not_set; +let $my_rules= my_rules_not_set; +inc $check_num; + + === modified file 'mysql-test/suite/perfschema/include/socket_event.inc' --- a/mysql-test/suite/perfschema/include/socket_event.inc 2011-07-30 02:47:07 +0000 +++ b/mysql-test/suite/perfschema/include/socket_event.inc 2011-08-15 06:26:10 +0000 @@ -80,12 +80,28 @@ if(!$is_connect) # changes to the statistics of the additional connection after this point of time. #================================================================================= --connection default -if($my_errno) +# Variants: +#---------- +# 1. Connect failed ($my_errno <> 0) +# no entry in performance_schema.threads -> wait_till_sleep.inc cannot be used +# Just 3 seconds sleep +# 2. Connect with success ($my_errno = 0) +# entry in performance_schema.threads -> wait_till_sleep.inc can be used +# Additional 3 second sleep +# 3. SQL command failed ($my_errno <> 0) +# entry in performance_schema.threads -> wait_till_sleep.inc can be used +if($is_connect) { - # Wait a bit and hope that the counter maintenence is finished. - --sleep 3 + if(!$my_errno) + { + --source ../include/wait_till_sleep.inc + } + if($my_errno) + { + --sleep 6 + } } -if(!$my_errno) +if(!$is_connect) { --source ../include/wait_till_sleep.inc } @@ -119,13 +135,29 @@ WHERE run IS NULL; if($is_connect) { + # Only in case the connect was successful ($my_errno = 0) than we have to disconnect. if(!$my_errno) { - --connection con1 --disconnect con1 - --source include/wait_until_disconnected.inc - --connection default + # Wait till the connection using the DB = 'mysqltest' or + # 'mysqlsupertest' has disappeared + let $wait_timeout= 5; + let $wait_condition= + SELECT COUNT(*) = 0 + FROM performance_schema.threads + WHERE processlist_db IN ('mysqltest','mysqlsupertest'); + --source include/wait_condition.inc + if (!$success) + { + --echo # Error: The disconnect of the connection with processlist_db + --echo # IN ('mysqltest','mysqlsupertest') failed + SELECT * FROM performance_schema.threads + WHERE processlist_db IN ('mysqltest','mysqlsupertest'); + --echo # abort + exit; + } } + --sleep 3 } inc $loop_round; === modified file 'mysql-test/suite/perfschema/include/socket_summary_check.inc' --- a/mysql-test/suite/perfschema/include/socket_summary_check.inc 2011-08-09 23:42:16 +0000 +++ b/mysql-test/suite/perfschema/include/socket_summary_check.inc 2011-08-15 06:26:10 +0000 @@ -47,6 +47,7 @@ # Insert the current state into mysqltest.my_socket_summary_by_instance. eval $insert_after; --enable_query_log +--enable_result_log # 1. The content of socket_summary_by_instance must be consistent to the @@ -76,8 +77,8 @@ if(`SELECT COUNT(*) $part1`) # # If we run this check sufficient frequent than AVG_TIMER_* can be removed from other checks. #----------------------------------------------------------------------------------------------- -let $my_lo= 0.99; -let $my_hi= 1.01; +let $my_lo= 0.98; +let $my_hi= 1.02; let $my_rules= COUNT_STAR * AVG_TIMER_WAIT BETWEEN SUM_TIMER_WAIT * $my_lo AND SUM_TIMER_WAIT * $my_hi AND @@ -101,16 +102,18 @@ if(`SELECT SUM($my_rules) <> COUNT(*) FR SELECT EVENT_NAME, OBJECT_INSTANCE_BEGIN, $part FROM mysqltest.my_socket_summary_by_instance - WHERE pk = 'After' + WHERE pk = 'After' AND NOT ($my_rules) ORDER BY EVENT_NAME, OBJECT_INSTANCE_BEGIN; - -- echo # Debug 2a: Dump socket_summary_by_instance + --echo # Debug 2a: Dump socket_summary_by_instance eval SELECT EVENT_NAME, OBJECT_INSTANCE_BEGIN, $part FROM performance_schema.socket_summary_by_instance ORDER BY EVENT_NAME, OBJECT_INSTANCE_BEGIN; --echo # abort 2 + # MLML? SHOW STATUS LIKE 'Performance_schema_socket_%_lost'; + SHOW STATUS LIKE 'Performance_schema_%_lost'; # exit; } @@ -148,8 +151,9 @@ if(`SELECT SUM($my_rules) <> COUNT(*) FR SELECT EVENT_NAME, OBJECT_INSTANCE_BEGIN, $part FROM mysqltest.my_socket_summary_by_instance - WHERE pk = 'After' + WHERE pk = 'After' AND NOT ($my_rules) ORDER BY EVENT_NAME, OBJECT_INSTANCE_BEGIN; + --echo # abort 3 # exit; } === modified file 'mysql-test/suite/perfschema/include/wait_till_sleep.inc' --- a/mysql-test/suite/perfschema/include/wait_till_sleep.inc 2011-07-30 02:47:07 +0000 +++ b/mysql-test/suite/perfschema/include/wait_till_sleep.inc 2011-08-15 06:26:10 +0000 @@ -3,16 +3,16 @@ let $wait_timeout= 5; let $wait_condition= SELECT COUNT(*) = 1 -FROM INFORMATION_SCHEMA.PROCESSLIST -WHERE DB IN ('mysqltest','mysqlsupertest') AND Command = 'Sleep'; +FROM performance_schema.threads +WHERE processlist_db IN ('mysqltest','mysqlsupertest') + AND processlist_command = 'Sleep'; --source include/wait_condition.inc if (!$success) { - --echo # Error: We did not reach the expected state where Command = 'Sleep' - --echo # The current (maybe better) state is: - SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST - WHERE DB IN ('mysqltest','mysqlsupertest'); - --echo # abort - exit; + --echo # Error: We did not reach the expected state where processlist_command = 'Sleep' + SELECT * FROM performance_schema.threads + WHERE processlist_db IN ('mysqltest','mysqlsupertest'); + --echo # abort + exit; } === modified file 'mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result' --- a/mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result 2011-08-11 00:12:28 +0000 +++ b/mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result 2011-08-15 06:26:10 +0000 @@ -39,32 +39,63 @@ DROP USER 'root0123456789'@'localhost'; SELECT col2 FROM does_not_exist; ERROR 42S02: Table 'mysqltest.does_not_exist' doesn't exist # 3.2 Check a SELECT ending with server sending an error message. -# Error message is longer (syntax error). # Now the statement is a bit longer but the error message # length does again not depend on statement. SELECT col2 FROM does_not_exist WHERE col1 = 0; ERROR 42S02: Table 'mysqltest.does_not_exist' doesn't exist -# 3.3 Check a SELECT earning an empty result set. +# 3.3 Check a SELECT ending with server sending an error message. +# The statement has the same length like in 3.2 but the error +# message is now different and much longer. +SELECT col2 FROM does_not_exist WHERE col1 A 0; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'A 0' at line 1 +# 3.4 Check a SELECT ending with server sending an error message. +# Statement and error message are a bit longer than in 3.1 +# because the table name is longer. +SELECT col2 FROM does_not_exist0123; +ERROR 42S02: Table 'mysqltest.does_not_exist0123' doesn't exist +# 3.5 Check a SELECT earning an empty result set. SELECT col2 FROM mysqltest.my_aux WHERE col1 = 0; col2 -# 3.4 Check a SELECT earning an empty result set. +# 3.6 Check a SELECT earning an empty result set. # Short column name is replaced by longer alias. -SELECT col2 "my_lovely_col" FROM mysqltest.my_aux WHERE col1 = 0; +SELECT col2 AS my_lovely_col FROM mysqltest.my_aux WHERE col1 = 0; my_lovely_col -# 3.5 Check a SELECT earning one row with an empty string. +# 3.7 Check a SELECT earning one row with an empty string. SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; col2 -# 3.6 Check a SELECT earning one row with one string one char long. +# 3.8 Check a SELECT earning one row with one string one char long. SELECT col2 FROM mysqltest.my_aux WHERE col1 = 2; col2 a -# 3.7 Check a SELECT earning one row with one string 1024 char long. +# 3.9 Check a SELECT earning one row with one string 1024 char long. SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3; col2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +# 3.10 Check a SELECT earning two rows with an empty string +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +col2 + + +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION DISTINCT +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +col2 + +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3; +col2 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +SELECT col2 FROM mysqltest.my_aux WHERE col1 < 3; +col2 + +a # 4. Check delta details -# 4.1 Check that increased COUNT_* leads to increased +# 4.1 Check that # - increased COUNT_* leads to increased # SUM_TIMER_* and SUM_NUMBER_OF_BYTES_* # - no change in COUNT_* leads to no change in @@ -73,12 +104,295 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa # Everything except "client_connection" for default connection # because the default connection runs include/wait_till_sleep.inc # which means a varying amount of statements. -# 4.3 Check the connects -# 4.3.1 Successful connects with different length of user name -# 4.3.2 Failing (->2.1) vs. passing (-> 2.3) connect -# FIXME: To be implemented after the bug fixes -# 4.3.3 2.3 vs. 2.4 -# FIXME: To be implemented after the bug fixes -# 4.4 Check the differences caused by SQL statements -# FIXME: To be implemented after the bug fixes -# 5. Cleanup +# 4.3 Check the differences caused by SQL statements +# 4.3.1 Compare impact of statements +# SELECT col2 FROM does_not_exist WHERE col1 = 0 +# SELECT col2 FROM does_not_exist +# 4.3.2 Compare impact of statements +# SELECT col2 FROM does_not_exist WHERE col1 A 0 +# SELECT col2 FROM does_not_exist WHERE col1 = 0 +# 4.3.3 Compare impact of statements +# SELECT col2 FROM does_not_exist0123 +# SELECT col2 FROM does_not_exist +# 4.3.4 Compare impact of statements +# SELECT col2 AS my_lovely_col FROM mysqltest.my_aux WHERE col1 = 0 +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 0 +# 4.3.5 Compare impact of statements +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 0 +# 4.3.6 Compare impact of statements +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 2 +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# 4.3.7 Compare impact of statements +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# 4.3.8 Compare impact of statements +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# The compared statistics looks suspicious +# We expect +0 + +SELECT 0 AS Expect_1 +FROM mysqltest.socket_summary_by_instance_detail t1 +JOIN mysqltest.socket_summary_by_instance_detail t2 +USING (EVENT_NAME, OBJECT_INSTANCE_BEGIN, run) +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND t2.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1' AND t1.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1'; +Expect_1 +0 + +SELECT t2.COUNT_READ - t1.COUNT_READ AS D_COUNT_READ, +t2.COUNT_READ AS S2_COUNT_READ, +t1.COUNT_READ AS S1_COUNT_READ, +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ AS D_SUM_NUMBER_OF_BYTES_READ, +t2.SUM_NUMBER_OF_BYTES_READ AS S2_SUM_NUMBER_OF_BYTES_READ, +t1.SUM_NUMBER_OF_BYTES_READ AS S1_SUM_NUMBER_OF_BYTES_READ, +t2.COUNT_WRITE - t1.COUNT_WRITE AS D_COUNT_WRITE, +t2.COUNT_WRITE AS S2_COUNT_WRITE, +t1.COUNT_WRITE AS S1_COUNT_WRITE, +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE AS D_UM_NUMBER_OF_BYTES_WRITE, +t2.SUM_NUMBER_OF_BYTES_WRITE AS S2_SUM_NUMBER_OF_BYTES_WRITE, +t1.SUM_NUMBER_OF_BYTES_WRITE AS S1_SUM_NUMBER_OF_BYTES_WRITE, +t2.COUNT_MISC - t1.COUNT_MISC AS D_COUNT_MISC, +t2.COUNT_MISC AS S2_COUNT_MISC, +t1.COUNT_MISC AS S1_COUNT_MISC +FROM mysqltest.socket_summary_by_instance_detail t1 +JOIN mysqltest.socket_summary_by_instance_detail t2 +USING (EVENT_NAME, OBJECT_INSTANCE_BEGIN, run) +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND t1.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1' AND t2.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1'; +ERROR 22003: BIGINT UNSIGNED value is out of range in '(`mysqltest`.`t2`.`SUM_NUMBER_OF_BYTES_WRITE` - `mysqltest`.`t1`.`SUM_NUMBER_OF_BYTES_WRITE`)' + +SELECT LPAD(COUNT_READ, 8, ' ') AS CNT_READ, LPAD(SUM_NUMBER_OF_BYTES_READ, 10,' ') AS BYTES_READ, +LPAD(COUNT_WRITE,9, ' ') AS CNT_WRITE,LPAD(SUM_NUMBER_OF_BYTES_WRITE, 11,' ') AS BYTES_WRITE, +LPAD(COUNT_MISC, 8, ' ') AS CNT_MISC, statement +FROM mysqltest.socket_summary_by_instance_detail +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND statement IN('SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1','SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1'); +CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement + 2 53 1 83 2 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 + 2 112 1 67 2 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# 4.3.9 Compare impact of statements +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION DISTINCT +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# The compared statistics looks suspicious +# We expect +0 + +SELECT 0 AS Expect_1 +FROM mysqltest.socket_summary_by_instance_detail t1 +JOIN mysqltest.socket_summary_by_instance_detail t2 +USING (EVENT_NAME, OBJECT_INSTANCE_BEGIN, run) +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND t2.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION DISTINCT +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1' AND t1.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1'; +Expect_1 +0 + +SELECT t2.COUNT_READ - t1.COUNT_READ AS D_COUNT_READ, +t2.COUNT_READ AS S2_COUNT_READ, +t1.COUNT_READ AS S1_COUNT_READ, +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ AS D_SUM_NUMBER_OF_BYTES_READ, +t2.SUM_NUMBER_OF_BYTES_READ AS S2_SUM_NUMBER_OF_BYTES_READ, +t1.SUM_NUMBER_OF_BYTES_READ AS S1_SUM_NUMBER_OF_BYTES_READ, +t2.COUNT_WRITE - t1.COUNT_WRITE AS D_COUNT_WRITE, +t2.COUNT_WRITE AS S2_COUNT_WRITE, +t1.COUNT_WRITE AS S1_COUNT_WRITE, +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE AS D_UM_NUMBER_OF_BYTES_WRITE, +t2.SUM_NUMBER_OF_BYTES_WRITE AS S2_SUM_NUMBER_OF_BYTES_WRITE, +t1.SUM_NUMBER_OF_BYTES_WRITE AS S1_SUM_NUMBER_OF_BYTES_WRITE, +t2.COUNT_MISC - t1.COUNT_MISC AS D_COUNT_MISC, +t2.COUNT_MISC AS S2_COUNT_MISC, +t1.COUNT_MISC AS S1_COUNT_MISC +FROM mysqltest.socket_summary_by_instance_detail t1 +JOIN mysqltest.socket_summary_by_instance_detail t2 +USING (EVENT_NAME, OBJECT_INSTANCE_BEGIN, run) +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND t1.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1' AND t2.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION DISTINCT +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1'; +ERROR 22003: BIGINT UNSIGNED value is out of range in '(`mysqltest`.`t2`.`SUM_NUMBER_OF_BYTES_WRITE` - `mysqltest`.`t1`.`SUM_NUMBER_OF_BYTES_WRITE`)' + +SELECT LPAD(COUNT_READ, 8, ' ') AS CNT_READ, LPAD(SUM_NUMBER_OF_BYTES_READ, 10,' ') AS BYTES_READ, +LPAD(COUNT_WRITE,9, ' ') AS CNT_WRITE,LPAD(SUM_NUMBER_OF_BYTES_WRITE, 11,' ') AS BYTES_WRITE, +LPAD(COUNT_MISC, 8, ' ') AS CNT_MISC, statement +FROM mysqltest.socket_summary_by_instance_detail +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND statement IN('SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION DISTINCT +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1','SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1'); +CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement + 2 53 1 83 2 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 + 2 117 1 62 2 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION DISTINCT +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# 4.3.10 Compare impact of statements +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +# The compared statistics looks suspicious +# We expect +0 + +SELECT 0 AS Expect_1 +FROM mysqltest.socket_summary_by_instance_detail t1 +JOIN mysqltest.socket_summary_by_instance_detail t2 +USING (EVENT_NAME, OBJECT_INSTANCE_BEGIN, run) +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND t2.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3' AND t1.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3'; +Expect_1 +0 + +SELECT t2.COUNT_READ - t1.COUNT_READ AS D_COUNT_READ, +t2.COUNT_READ AS S2_COUNT_READ, +t1.COUNT_READ AS S1_COUNT_READ, +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ AS D_SUM_NUMBER_OF_BYTES_READ, +t2.SUM_NUMBER_OF_BYTES_READ AS S2_SUM_NUMBER_OF_BYTES_READ, +t1.SUM_NUMBER_OF_BYTES_READ AS S1_SUM_NUMBER_OF_BYTES_READ, +t2.COUNT_WRITE - t1.COUNT_WRITE AS D_COUNT_WRITE, +t2.COUNT_WRITE AS S2_COUNT_WRITE, +t1.COUNT_WRITE AS S1_COUNT_WRITE, +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE AS D_UM_NUMBER_OF_BYTES_WRITE, +t2.SUM_NUMBER_OF_BYTES_WRITE AS S2_SUM_NUMBER_OF_BYTES_WRITE, +t1.SUM_NUMBER_OF_BYTES_WRITE AS S1_SUM_NUMBER_OF_BYTES_WRITE, +t2.COUNT_MISC - t1.COUNT_MISC AS D_COUNT_MISC, +t2.COUNT_MISC AS S2_COUNT_MISC, +t1.COUNT_MISC AS S1_COUNT_MISC +FROM mysqltest.socket_summary_by_instance_detail t1 +JOIN mysqltest.socket_summary_by_instance_detail t2 +USING (EVENT_NAME, OBJECT_INSTANCE_BEGIN, run) +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND t1.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3' AND t2.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3'; +D_COUNT_READ 0 +S2_COUNT_READ 2 +S1_COUNT_READ 2 +D_SUM_NUMBER_OF_BYTES_READ 59 +S2_SUM_NUMBER_OF_BYTES_READ 112 +S1_SUM_NUMBER_OF_BYTES_READ 53 +D_COUNT_WRITE 0 +S2_COUNT_WRITE 1 +S1_COUNT_WRITE 1 +D_UM_NUMBER_OF_BYTES_WRITE 1010 +S2_SUM_NUMBER_OF_BYTES_WRITE 2119 +S1_SUM_NUMBER_OF_BYTES_WRITE 1109 +D_COUNT_MISC 0 +S2_COUNT_MISC 2 +S1_COUNT_MISC 2 + +SELECT LPAD(COUNT_READ, 8, ' ') AS CNT_READ, LPAD(SUM_NUMBER_OF_BYTES_READ, 10,' ') AS BYTES_READ, +LPAD(COUNT_WRITE,9, ' ') AS CNT_WRITE,LPAD(SUM_NUMBER_OF_BYTES_WRITE, 11,' ') AS BYTES_WRITE, +LPAD(COUNT_MISC, 8, ' ') AS CNT_MISC, statement +FROM mysqltest.socket_summary_by_instance_detail +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND statement IN('SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3','SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3'); +CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement + 2 53 1 1109 2 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 + 2 112 1 2119 2 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +# 4.3.11 Compare impact of statements +# SELECT col2 FROM mysqltest.my_aux WHERE col1 < 3 +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# The compared statistics looks suspicious +# We expect +0 + +SELECT 0 AS Expect_1 +FROM mysqltest.socket_summary_by_instance_detail t1 +JOIN mysqltest.socket_summary_by_instance_detail t2 +USING (EVENT_NAME, OBJECT_INSTANCE_BEGIN, run) +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND t2.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 < 3' AND t1.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1'; +Expect_1 +0 + +SELECT t2.COUNT_READ - t1.COUNT_READ AS D_COUNT_READ, +t2.COUNT_READ AS S2_COUNT_READ, +t1.COUNT_READ AS S1_COUNT_READ, +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ AS D_SUM_NUMBER_OF_BYTES_READ, +t2.SUM_NUMBER_OF_BYTES_READ AS S2_SUM_NUMBER_OF_BYTES_READ, +t1.SUM_NUMBER_OF_BYTES_READ AS S1_SUM_NUMBER_OF_BYTES_READ, +t2.COUNT_WRITE - t1.COUNT_WRITE AS D_COUNT_WRITE, +t2.COUNT_WRITE AS S2_COUNT_WRITE, +t1.COUNT_WRITE AS S1_COUNT_WRITE, +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE AS D_UM_NUMBER_OF_BYTES_WRITE, +t2.SUM_NUMBER_OF_BYTES_WRITE AS S2_SUM_NUMBER_OF_BYTES_WRITE, +t1.SUM_NUMBER_OF_BYTES_WRITE AS S1_SUM_NUMBER_OF_BYTES_WRITE, +t2.COUNT_MISC - t1.COUNT_MISC AS D_COUNT_MISC, +t2.COUNT_MISC AS S2_COUNT_MISC, +t1.COUNT_MISC AS S1_COUNT_MISC +FROM mysqltest.socket_summary_by_instance_detail t1 +JOIN mysqltest.socket_summary_by_instance_detail t2 +USING (EVENT_NAME, OBJECT_INSTANCE_BEGIN, run) +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND t1.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1' AND t2.statement = 'SELECT col2 FROM mysqltest.my_aux WHERE col1 < 3'; +D_COUNT_READ 0 +S2_COUNT_READ 2 +S1_COUNT_READ 2 +D_SUM_NUMBER_OF_BYTES_READ 0 +S2_SUM_NUMBER_OF_BYTES_READ 53 +S1_SUM_NUMBER_OF_BYTES_READ 53 +D_COUNT_WRITE 0 +S2_COUNT_WRITE 1 +S1_COUNT_WRITE 1 +D_UM_NUMBER_OF_BYTES_WRITE 6 +S2_SUM_NUMBER_OF_BYTES_WRITE 89 +S1_SUM_NUMBER_OF_BYTES_WRITE 83 +D_COUNT_MISC 0 +S2_COUNT_MISC 2 +S1_COUNT_MISC 2 + +SELECT LPAD(COUNT_READ, 8, ' ') AS CNT_READ, LPAD(SUM_NUMBER_OF_BYTES_READ, 10,' ') AS BYTES_READ, +LPAD(COUNT_WRITE,9, ' ') AS CNT_WRITE,LPAD(SUM_NUMBER_OF_BYTES_WRITE, 11,' ') AS BYTES_WRITE, +LPAD(COUNT_MISC, 8, ' ') AS CNT_MISC, statement +FROM mysqltest.socket_summary_by_instance_detail +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin +AND EVENT_NAME LIKE ('%client_connection') +AND run = 1 +AND statement IN('SELECT col2 FROM mysqltest.my_aux WHERE col1 < 3','SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1'); +CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement + 2 53 1 83 2 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 + 2 53 1 89 2 SELECT col2 FROM mysqltest.my_aux WHERE col1 < 3 === modified file 'mysql-test/suite/perfschema/t/disabled.def' --- a/mysql-test/suite/perfschema/t/disabled.def 2011-08-15 01:05:55 +0000 +++ b/mysql-test/suite/perfschema/t/disabled.def 2011-08-15 06:26:10 +0000 @@ -24,5 +24,5 @@ # Do not use any TAB characters for whitespace. # ############################################################################## -#socket_summary_by_instance_func : WL#4896 "Performance Schema Net IO" - Disable until debugged +socket_summary_by_instance_func_dbg : WL#4896 "Performance Schema Net IO" - For debugging only === modified file 'mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test' --- a/mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test 2011-08-15 01:05:55 +0000 +++ b/mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test 2011-08-15 06:26:10 +0000 @@ -27,16 +27,16 @@ # Set IP address defaults with respect to IPV6 support # # Set this to enable debugging output -let $my_socket_debug=0; +let $my_socket_debug= 0; # # Determine if IPV6 supported # -let $check_ipv6_just_check=1; +let $check_ipv6_just_check= 1; --source include/check_ipv6.inc # # Determine if IPV4 mapped to IPV6 supported # -let $check_ipv4_mapped_just_check=1; +let $check_ipv4_mapped_just_check= 1; --source include/check_ipv4_mapped.inc # # Set the localhost IP default to use when establishing connections @@ -50,10 +50,10 @@ if($check_ipv4_mapped_supported) let $my_localhost=::ffff:127.0.0.1; } # -let $my_socket_debug=0; +let $my_socket_debug= 0; if($my_socket_debug) { - --echo IPV6=$check_ipv6_supported, IPV4_MAPPED=$check_ipv4_mapped_supported, LOCALHOST=$my_localhost + --echo IPV6=$check_ipv6_supported, IPV4_MAPPED = $check_ipv4_mapped_supported, LOCALHOST = $my_localhost } #=================================== @@ -83,7 +83,8 @@ let $print_details= 1; # # Number of attempts within the test checking the stability of counter increments. # -let $loop_rounds= 3; +# let $loop_rounds= 10; +let $loop_rounds= 1; # # Additional SCHEMA used for @@ -95,6 +96,14 @@ CREATE SCHEMA mysqltest; CREATE SCHEMA mysqlsupertest; # +# Disable the instrumentation for connection default. +# This connection observes the impact of the acting connections +# and should not have an impact on statistics. +# +# UPDATE performance_schema.threads +# SET INSTRUMENTED='NO' WHERE PROCESSLIST_ID = CONNECTION_ID(); + +# # Clear summary tables of previous entries # TRUNCATE performance_schema.socket_summary_by_instance; @@ -122,7 +131,7 @@ FROM performance_schema.socket_summary_b WHERE 1 = 2; ALTER TABLE mysqltest.socket_summary_by_instance_detail -ADD statement VARCHAR(300), ADD run INTEGER; +ADD statement VARCHAR(500), ADD run INTEGER; # # Auxiliary SQL functions used to shorten some commands. @@ -227,9 +236,30 @@ eval $truncate; eval $insert_before; --disconnect default --connect (default,localhost,root,,,,) +# --echo ########### Disconnect/Connect +# --enable_query_log eval $insert_after; eval $get_object_instance_begin; SET @default_object_instance_begin = @con1_object_instance_begin; +# SELECT @default_object_instance_begin; +# SELECT * FROM performance_schema.threads; +# SELECT * FROM performance_schema.socket_summary_by_instance +# WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin; +UPDATE performance_schema.threads +SET INSTRUMENTED='NO' WHERE PROCESSLIST_ID = CONNECTION_ID(); +TRUNCATE TABLE performance_schema.socket_summary_by_instance; +TRUNCATE TABLE performance_schema.socket_summary_by_event_name; +# TRUNCATE TABLE performance_schema.socket_summary_by_instance; +# TRUNCATE TABLE performance_schema.socket_summary_by_event_name; +# sleep 3; +# SELECT * FROM performance_schema.socket_summary_by_instance +# WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin; +# SELECT * FROM performance_schema.socket_summary_by_instance; +# SELECT * FROM mysqltest.socket_summary_by_instance_detail; +# SELECT * FROM information_schema.processlist; +# SELECT * FROM performance_schema.threads; +# exit; +--disable_query_log --echo # 1. Check the base line #============================== @@ -304,7 +334,10 @@ DROP USER 'root0123456789'@'localhost'; --source ../include/wait_till_sleep.inc --disable_query_log +# MLML: Experiment +let $loop_rounds= 10; --echo # 3 Check SELECTs +# Attention: Don't use any double quotes within the statements. let $is_connect= 0; eval $get_object_instance_begin; --echo # 3.1 Check a SELECT ending with server sending an error message. @@ -314,45 +347,78 @@ let $statement= SELECT col2 FROM does_no --source ../include/socket_event.inc --echo # 3.2 Check a SELECT ending with server sending an error message. ---echo # Error message is longer (syntax error). --echo # Now the statement is a bit longer but the error message --echo # length does again not depend on statement. #======================================================================= let $statement= SELECT col2 FROM does_not_exist WHERE col1 = 0; --source ../include/socket_event.inc ---echo # 3.3 Check a SELECT earning an empty result set. +--echo # 3.3 Check a SELECT ending with server sending an error message. +--echo # The statement has the same length like in 3.2 but the error +--echo # message is now different and much longer. +#======================================================================= +let $statement= SELECT col2 FROM does_not_exist WHERE col1 A 0; +--source ../include/socket_event.inc + +--echo # 3.4 Check a SELECT ending with server sending an error message. +--echo # Statement and error message are a bit longer than in 3.1 +--echo # because the table name is longer. +#======================================================================= +let $statement= SELECT col2 FROM does_not_exist0123; +--source ../include/socket_event.inc + +--echo # 3.5 Check a SELECT earning an empty result set. #======================================================= let $statement= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 0; --source ../include/socket_event.inc ---echo # 3.4 Check a SELECT earning an empty result set. +--echo # 3.6 Check a SELECT earning an empty result set. --echo # Short column name is replaced by longer alias. #========================================================== -let $statement= SELECT col2 "my_lovely_col" FROM mysqltest.my_aux WHERE col1 = 0; +let $statement= SELECT col2 AS my_lovely_col FROM mysqltest.my_aux WHERE col1 = 0; --source ../include/socket_event.inc ---echo # 3.5 Check a SELECT earning one row with an empty string. +--echo # 3.7 Check a SELECT earning one row with an empty string. #================================================================ let $statement= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; --source ../include/socket_event.inc ---echo # 3.6 Check a SELECT earning one row with one string one char long. +--echo # 3.8 Check a SELECT earning one row with one string one char long. #========================================================================= let $statement= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 2; --source ../include/socket_event.inc ---echo # 3.7 Check a SELECT earning one row with one string 1024 char long. +--echo # 3.9 Check a SELECT earning one row with one string 1024 char long. #========================================================================== let $statement= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3; --source ../include/socket_event.inc +--echo # 3.10 Check a SELECT earning two rows with an empty string +#========================================================================== +let $statement= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +--source ../include/socket_event.inc + +let $statement= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION DISTINCT +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +--source ../include/socket_event.inc + +let $statement= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3; +--source ../include/socket_event.inc + +let $statement= SELECT col2 FROM mysqltest.my_aux WHERE col1 < 3; +--source ../include/socket_event.inc + --echo # 4. Check delta details #========================================================================== # 4.0 0. Negative deltas cannot have happened because the counter columns within # socket_summary_by_instance_detail are defined as UNSIGNED BIGINT. -# = The INSERT would have been failed. ---echo # 4.1 Check that increased COUNT_* leads to increased +# = The INSERT which computes the diff would have been failed. +--echo # 4.1 Check that --echo # - increased COUNT_* leads to increased --echo # SUM_TIMER_* and SUM_NUMBER_OF_BYTES_* --echo # - no change in COUNT_* leads to no change in @@ -361,7 +427,9 @@ let $statement= SELECT col2 FROM mysqlte let $my_rules= ((COUNT_READ = 0 AND SUM_TIMER_READ = 0 AND SUM_NUMBER_OF_BYTES_READ = 0) OR - (COUNT_READ > 0 AND SUM_TIMER_READ > 0 AND SUM_NUMBER_OF_BYTES_READ > 0)) + (COUNT_READ > 0 AND SUM_TIMER_READ > 0 AND SUM_NUMBER_OF_BYTES_READ > 0) + OR + (COUNT_READ > 0 AND SUM_TIMER_READ = 0 AND SUM_NUMBER_OF_BYTES_READ > 0)) AND ((COUNT_WRITE = 0 AND SUM_TIMER_WRITE = 0 AND SUM_NUMBER_OF_BYTES_WRITE = 0) OR @@ -369,8 +437,13 @@ AND AND ((COUNT_MISC = 0 AND SUM_TIMER_MISC = 0) OR - (COUNT_MISC > 0)); -#(COUNT_MISC > 0 AND SUM_TIMER_MISC > 0)); + (COUNT_MISC > 0 AND SUM_TIMER_MISC > 0) + OR + (COUNT_MISC > 0 AND SUM_TIMER_MISC = 0)); + +# In case of SQL statements and the instance for the connection which runs the +# statement COUNT_MISC is 1 AND SUM_TIMER_MISC is 0 !! +# MLML: Ask Chris, if this is really correct. if(`SELECT COUNT(*) FROM mysqltest.socket_summary_by_instance_detail WHERE NOT ( $my_rules )`) @@ -382,15 +455,16 @@ if(`SELECT COUNT(*) FROM mysqltest.socke --echo # $my_rules --echo # eval - SELECT EVENT_NAME, lpad(OBJECT_INSTANCE_BEGIN,20,' ') as OBJECT_INSTANCE, - lpad(COUNT_READ,7, ' ') as CREAD, lpad(SUM_TIMER_READ,12,' ') as TREAD, lpad(SUM_NUMBER_OF_BYTES_READ,7,' ') as BREAD, - lpad(COUNT_WRITE,7, ' ') as CWRITE, lpad(SUM_TIMER_WRITE,12,' ') as TWRITE,lpad(SUM_NUMBER_OF_BYTES_WRITE,7,' ') as BWRITE, - lpad(COUNT_MISC,7,' ') as CMISC, lpad(SUM_TIMER_MISC,13,' ') as TMISC, - rpad(statement,50,' ') as STATEMENT, lpad(run, 5, ' ') as RUN - FROM mysqltest.socket_summary_by_instance_detail order by EVENT_NAME, OBJECT_INSTANCE_BEGIN; - - + SELECT EVENT_NAME, LPAD(OBJECT_INSTANCE_BEGIN,20,' ') AS OBJECT_INSTANCE, + LPAD(COUNT_READ,7,' ') AS CREAD, LPAD(SUM_TIMER_READ,12,' ') AS TREAD, LPAD(SUM_NUMBER_OF_BYTES_READ,7,' ') AS BREAD, + LPAD(COUNT_WRITE,7,' ') AS CWRITE, LPAD(SUM_TIMER_WRITE,12,' ') AS TWRITE,LPAD(SUM_NUMBER_OF_BYTES_WRITE,7,' ') AS BWRITE, + LPAD(COUNT_MISC,7,' ') AS CMISC, LPAD(SUM_TIMER_MISC,13,' ') AS TMISC, + RPAD(statement,50,' ') AS STATEMENT, LPAD(run, 5, ' ') AS RUN + FROM mysqltest.socket_summary_by_instance_detail + WHERE NOT ( $my_rules ) + ORDER BY EVENT_NAME, OBJECT_INSTANCE_BEGIN; } + --echo # 4.2 Results must be stable --echo # Everything except "client_connection" for default connection --echo # because the default connection runs include/wait_till_sleep.inc @@ -410,24 +484,28 @@ if(`SELECT COUNT(*) FROM mysqltest.socke # AND EVENT_NAME LIKE '%client_connection' # LIMIT 1; -#let $my_rules= -#COUNT(DISTINCT COUNT_READ) = 1 AND -#COUNT(DISTINCT SUM_NUMBER_OF_BYTES_READ) = 1 AND -#COUNT(DISTINCT COUNT_WRITE) = 1 AND -#COUNT(DISTINCT SUM_NUMBER_OF_BYTES_WRITE) = 1 AND -#COUNT(DISTINCT COUNT_MISC) = 1; - +# MLML: IMHO the most reasonable rule +let $my_rules= +COUNT(DISTINCT COUNT_READ) = 1 AND +COUNT(DISTINCT SUM_NUMBER_OF_BYTES_READ) = 1 AND +COUNT(DISTINCT COUNT_WRITE) = 1 AND +COUNT(DISTINCT SUM_NUMBER_OF_BYTES_WRITE) = 1 AND +COUNT(DISTINCT COUNT_MISC) = 1; + +# Comment(ML): +# In case we do not get the results somehow deterministic than we +# we should go with the less strict check based on CV. +# # Compute coefficient of variation (CV) to detect 'notable' variances in the # byte count and operation counts. The acceptable range for the CV is purely # subjective, however, the CV is a dimensionless quantity therefore valid # across platforms. - -let $my_rules= -STD(COUNT_READ)/AVG(COUNT_READ) <= 0.2 AND -STD(SUM_NUMBER_OF_BYTES_READ)/AVG(SUM_NUMBER_OF_BYTES_READ) <= 0.2 AND -STD(COUNT_WRITE)/AVG(COUNT_WRITE) <= 0.2 AND -STD(SUM_NUMBER_OF_BYTES_WRITE)/AVG(SUM_NUMBER_OF_BYTES_WRITE) <= 0.2 AND -STD(COUNT_MISC)/AVG(COUNT_MISC) <= 0.4; +# let $my_rules= +# STD(COUNT_READ)/AVG(COUNT_READ) <= 0.2 AND +# STD(SUM_NUMBER_OF_BYTES_READ)/AVG(SUM_NUMBER_OF_BYTES_READ) <= 0.2 AND +# STD(COUNT_WRITE)/AVG(COUNT_WRITE) <= 0.2 AND +# STD(SUM_NUMBER_OF_BYTES_WRITE)/AVG(SUM_NUMBER_OF_BYTES_WRITE) <= 0.2 AND +# STD(COUNT_MISC)/AVG(COUNT_MISC) <= 0.4; let $part= FROM mysqltest.socket_summary_by_instance_detail @@ -444,10 +522,25 @@ if(`SELECT COUNT(statement) $part`) --echo # $my_rules --echo # for GROUP BY EVENT_NAME, statement select @default_object_instance_begin as 'Default Object Instance'; + # eval + # SELECT EVENT_NAME, statement + # $part + # ORDER BY EVENT_NAME, statement; + + --echo MLML: Experiment eval - SELECT EVENT_NAME, statement + SELECT EVENT_NAME, statement, + $my_rules AS my_col $part ORDER BY EVENT_NAME, statement; + + # eval + # SELECT * FROM mysqltest.socket_summary_by_instance_detail + # WHERE EVENT_NAME, statement IN + # (SELECT EVENT_NAME, statement + # $part) + # ORDER BY EVENT_NAME, statement; + eval SELECT object_instance_begin, $counter_column_list, EVENT_NAME, statement, run FROM mysqltest.socket_summary_by_instance_detail t1 @@ -457,12 +550,12 @@ if(`SELECT COUNT(statement) $part`) ORDER BY EVENT_NAME, statement, run; --echo Debug 4.2a - Dump mysqltest.socket_summary_by_instance_detail - SELECT EVENT_NAME, lpad(OBJECT_INSTANCE_BEGIN,20,' ') as OBJECT_INSTANCE, - lpad(COUNT_READ,7,' ') as CREAD, lpad(SUM_TIMER_READ,12,' ') as TREAD, lpad(SUM_NUMBER_OF_BYTES_READ,7,' ') as BREAD, - lpad(COUNT_WRITE,7,' ') as CWRITE, lpad(SUM_TIMER_WRITE,12,' ') as TWRITE,lpad(SUM_NUMBER_OF_BYTES_WRITE,7,' ') as BWRITE, - lpad(COUNT_MISC,7,' ') as CMISC, lpad(SUM_TIMER_MISC,13,' ') as TMISC, - rpad(statement,50,' ') as STATEMENT, lpad(run, 5, ' ') as RUN - FROM mysqltest.socket_summary_by_instance_detail order by EVENT_NAME, statement, run; + SELECT EVENT_NAME, LPAD(OBJECT_INSTANCE_BEGIN,20,' ') AS OBJECT_INSTANCE, + LPAD(COUNT_READ,7, ' ') AS CREAD, LPAD(SUM_TIMER_READ,12,' ') AS TREAD, LPAD(SUM_NUMBER_OF_BYTES_READ,7,' ') AS BREAD, + LPAD(COUNT_WRITE,7, ' ') AS CWRITE, LPAD(SUM_TIMER_WRITE,12,' ') AS TWRITE,LPAD(SUM_NUMBER_OF_BYTES_WRITE,7,' ') AS BWRITE, + LPAD(COUNT_MISC,7,' ') AS CMISC, LPAD(SUM_TIMER_MISC,13,' ') AS TMISC, + RPAD(statement,50,' ') AS STATEMENT, LPAD(run, 5, ' ') AS RUN + FROM mysqltest.socket_summary_by_instance_detail ORDER BY EVENT_NAME, statement, run; --echo Debug 4.2b - Std dev and coefficient of variation for mysqltest.socket_summary_by_instance_detail select rpad(EVENT_NAME,39,' ') as EVENT_NAME1, rpad(statement,49,' ') as STATEMENT1, @@ -477,12 +570,218 @@ if(`SELECT COUNT(statement) $part`) group by EVENT_NAME1, STATEMENT1; } +# Initialize variables +let $my_rules= my_rules_not_set; +let $stmt1= stmt1_not_set; +let $stmt2= stmt2_not_set; +# $title_prefix is used for the generation of titles +let $title_prefix= 4.3; +# $check_num is used for the generation of titles and gets incremented after +# every call of the current script. +let $check_num= 1; +# $column_list is used for the generation of error information and valid for +# every sub test. +let $column_list= +t2.COUNT_READ - t1.COUNT_READ AS D_COUNT_READ, +t2.COUNT_READ AS S2_COUNT_READ, +t1.COUNT_READ AS S1_COUNT_READ, +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ AS D_SUM_NUMBER_OF_BYTES_READ, +t2.SUM_NUMBER_OF_BYTES_READ AS S2_SUM_NUMBER_OF_BYTES_READ, +t1.SUM_NUMBER_OF_BYTES_READ AS S1_SUM_NUMBER_OF_BYTES_READ, +t2.COUNT_WRITE - t1.COUNT_WRITE AS D_COUNT_WRITE, +t2.COUNT_WRITE AS S2_COUNT_WRITE, +t1.COUNT_WRITE AS S1_COUNT_WRITE, +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE AS D_UM_NUMBER_OF_BYTES_WRITE, +t2.SUM_NUMBER_OF_BYTES_WRITE AS S2_SUM_NUMBER_OF_BYTES_WRITE, +t1.SUM_NUMBER_OF_BYTES_WRITE AS S1_SUM_NUMBER_OF_BYTES_WRITE, +t2.COUNT_MISC - t1.COUNT_MISC AS D_COUNT_MISC, +t2.COUNT_MISC AS S2_COUNT_MISC, +t1.COUNT_MISC AS S1_COUNT_MISC; +# $part is used for the generation of "check" statements + error information +# and valid for every sub test. +let $part= +FROM mysqltest.socket_summary_by_instance_detail t1 +JOIN mysqltest.socket_summary_by_instance_detail t2 +USING (EVENT_NAME, OBJECT_INSTANCE_BEGIN, run) +WHERE OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin + AND EVENT_NAME LIKE ('%client_connection') + AND run = 1; + +--echo # $title_prefix Check the differences caused by SQL statements +# --> Statement NOT LIKE '%Connect%' + +let stmt1= SELECT col2 FROM does_not_exist; +let stmt2= SELECT col2 FROM does_not_exist WHERE col1 = 0; +# +# CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement +# 3 36 1 59 1 SELECT col2 FROM does_not_exist +# 3 51 1 59 1 SELECT col2 FROM does_not_exist WHERE col1 = 0 +# The string of the statement gets charged into SUM_NUMBER_OF_BYTES_READ. +# The server error message gets charged into SUM_NUMBER_OF_BYTES_WRITE. +# +let $my_rules= +t2.COUNT_READ - t1.COUNT_READ = 0 AND +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ = LENGTH('$stmt2') - LENGTH('$stmt1') AND +t2.COUNT_WRITE - t1.COUNT_WRITE = 0 AND +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE = 0 AND +t2.COUNT_MISC - t1.COUNT_MISC = 0; +--source ../include/socket_check1.inc + +let $stmt1= SELECT col2 FROM does_not_exist WHERE col1 = 0; +let $stmt2= SELECT col2 FROM does_not_exist WHERE col1 A 0; +# +# CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement +# 3 51 1 59 1 SELECT col2 FROM does_not_exist WHERE col1 = 0 +# 3 51 1 162 1 SELECT col2 FROM does_not_exist WHERE col1 A 0 +# Both statements have the same length and fail. But the second statement +# caused a longer error message. +let $my_rules= +t2.COUNT_READ - t1.COUNT_READ = 0 AND +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ = LENGTH('$stmt2') - LENGTH('$stmt1') AND +t2.COUNT_WRITE - t1.COUNT_WRITE = 0 AND +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE > 0 AND +t2.COUNT_MISC - t1.COUNT_MISC = 0; +--source ../include/socket_check1.inc + +let $stmt1= SELECT col2 FROM does_not_exist; +let $stmt2= SELECT col2 FROM does_not_exist0123; +# CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement +# 3 36 1 59 1 SELECT col2 FROM does_not_exist +# 3 40 1 63 1 SELECT col2 FROM does_not_exist0123 +# Statements differ in table name length and table name is part of error message. +let $my_rules= +t2.COUNT_READ - t1.COUNT_READ = 0 AND +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ = LENGTH('$stmt2') - LENGTH('$stmt1') AND +t2.COUNT_WRITE - t1.COUNT_WRITE = 0 AND +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE = LENGTH('$stmt2') - LENGTH('$stmt1') AND +t2.COUNT_MISC - t1.COUNT_MISC = 0; +--source ../include/socket_check1.inc + +# How to enforce the debug info is printed? +# let $my_rules= 0; +# This will cause that suite/perfschema/include/socket_check1.inc conclude that +# check failed and it will print debug information. +# let $stmt1= SELECT col2 FROM does_not_exist WHERE col1 = 0; +# let $stmt2= SELECT col2 FROM does_not_exist WHERE col1 A 0; +# let $my_rules= 0; +# --source ../include/socket_check1.inc + +let $stmt2= SELECT col2 AS my_lovely_col FROM mysqltest.my_aux WHERE col1 = 0; +let $stmt1= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 0; +# CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement +# 3 53 1 78 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 0 +# 3 70 1 87 1 SELECT col2 AS my_lovely_col FROM mysqltest.my_aux WHERE col1 = 0 +# Both statements get an empty result set. But the length of the statements and +# the result set column names differs. +let $my_rules= +t2.COUNT_READ - t1.COUNT_READ = 0 AND +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ = LENGTH('$stmt2') - LENGTH('$stmt1') AND +t2.COUNT_WRITE - t1.COUNT_WRITE = 0 AND +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE = LENGTH('my_lovely_col') - LENGTH('col2') AND +t2.COUNT_MISC - t1.COUNT_MISC = 0; +--source ../include/socket_check1.inc + +let $stmt2= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +let $stmt1= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 0; +# CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement +# 3 53 1 78 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 0 +# 3 53 1 83 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# stmt1 gets an empty result set +# stmt1 gets one row containing an empty result string +let $my_rules= +t2.COUNT_READ - t1.COUNT_READ = 0 AND +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ = LENGTH('$stmt2') - LENGTH('$stmt1') AND +t2.COUNT_WRITE - t1.COUNT_WRITE = 0 AND +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE > 0 AND +t2.COUNT_MISC - t1.COUNT_MISC = 0; +--source ../include/socket_check1.inc + +let $stmt2= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 2; +let $stmt1= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +# CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement +# 3 53 1 83 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# 3 53 1 84 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 2 +# stmt2 one row containing a string 1 byte long +# stmt1 one row containing an empty string +let $my_rules= +t2.COUNT_READ - t1.COUNT_READ = 0 AND +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ = LENGTH('$stmt2') - LENGTH('$stmt1') AND +t2.COUNT_WRITE - t1.COUNT_WRITE = 0 AND +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE = 1 AND +t2.COUNT_MISC - t1.COUNT_MISC = 0; +--source ../include/socket_check1.inc + +let $stmt2= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3; +let $stmt1= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +# CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement +# 3 53 1 83 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# 3 53 1 1109 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +# stmt2 one row containing a string 1024 byte long +# stmt1 one row containing an empty string +let $my_rules= +t2.COUNT_READ - t1.COUNT_READ = 0 AND +t2.SUM_NUMBER_OF_BYTES_READ - t1.SUM_NUMBER_OF_BYTES_READ = LENGTH('$stmt2') - LENGTH('$stmt1') AND +t2.COUNT_WRITE - t1.COUNT_WRITE = 0 AND +t2.SUM_NUMBER_OF_BYTES_WRITE - t1.SUM_NUMBER_OF_BYTES_WRITE = 1024 + 2 AND +t2.COUNT_MISC - t1.COUNT_MISC = 0; +--source ../include/socket_check1.inc + +let $stmt2= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +let $stmt1= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +# CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement +# 3 53 1 83 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# 3 112 1 67 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# UNION ALL +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# MLML: The BYTES_WRITE seem to be wrong. +let $my_rules= 0; +--source ../include/socket_check1.inc + +let $stmt2= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +UNION DISTINCT +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +let $stmt1= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +# CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement +# 3 53 1 83 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# 3 117 1 62 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# UNION DISTINCT +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# MLML: The BYTES_WRITE seem to be wrong. +let $my_rules= 0; +--source ../include/socket_check1.inc + +let $stmt2= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +UNION ALL +SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3; +let $stmt1= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3; +# CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement +# 3 53 1 1109 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +# 3 112 1 2119 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +# UNION ALL +# SELECT col2 FROM mysqltest.my_aux WHERE col1 = 3 +let $my_rules= 0; +--source ../include/socket_check1.inc + +let $stmt2= SELECT col2 FROM mysqltest.my_aux WHERE col1 < 3; +let $stmt1= SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1; +# CNT_READ BYTES_READ CNT_WRITE BYTES_WRITE CNT_MISC statement +# 3 53 1 83 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 = 1 +# 3 53 1 89 1 SELECT col2 FROM mysqltest.my_aux WHERE col1 < 3 +# stmt2 Gives one row with string 1 byte long and one row with an empty string. +# stmt1 Gives one row with an empty string. +# BYTES_WRITE might be ok here. +let $my_rules= 0; +--source ../include/socket_check1.inc + +exit; +if(0) +{ --echo # 4.3 Check the connects --echo # 4.3.1 Successful connects with different length of user name # --> t2.statement LIKE 'Connect%root0123456789,%' # --> t1.statement LIKE 'Connect%root012345,%' -if(1) -{ # There is no client_connection entry for a connect which fails. let $my_val= @@ -502,7 +801,7 @@ WHERE t2.OBJECT_INSTANCE_BEGIN <> @defau AND t1.OBJECT_INSTANCE_BEGIN <> @default_object_instance_begin AND t2.statement LIKE 'Connect%root0123456789,%' AND t1.statement LIKE 'Connect%root012345,%' - AND t1.EVENT_NAME NOT LIKE '%server_unix_socket%' + AND t1.EVENT_NAME LIKE '%client_connection%' AND run = 1; #eval @@ -610,7 +909,9 @@ if($print_details) --horizontal_results --echo # Dump detailed differences after - before statement execution --echo # 1. The statement executing connection and hopefully noone else - SELECT EVENT_NAME, + SELECT @default_object_instance_begin; + # SELECT EVENT_NAME, + SELECT EVENT_NAME, OBJECT_INSTANCE_BEGIN, COUNT_READ, SUM_NUMBER_OF_BYTES_READ, COUNT_WRITE, SUM_NUMBER_OF_BYTES_WRITE, COUNT_MISC, statement === modified file 'storage/perfschema/pfs.cc' --- a/storage/perfschema/pfs.cc 2011-08-11 16:07:45 +0000 +++ b/storage/perfschema/pfs.cc 2011-08-15 06:26:10 +0000 @@ -2850,49 +2850,61 @@ get_thread_socket_locker_v1(PSI_socket_l if (unlikely(pfs_thread == NULL)) return NULL; + /* + If instrumentation for this thread has been disabled, then return a null + locker *unless* this is a socket close, in which case end_socket_wait() + will later call destroy_socket(). + */ if (!pfs_thread->m_enabled) - return NULL; - - state->m_thread= reinterpret_cast (pfs_thread); - flags= STATE_FLAG_THREAD; - - /* Sockets in IDLE state are timed separately */ - if (pfs_socket->m_timed) - flags|= STATE_FLAG_TIMED; - - if (flag_events_waits_current) { - if (unlikely(pfs_thread->m_events_waits_count >= WAIT_STACK_SIZE)) - { - locker_lost++; + if (op == PSI_SOCKET_CLOSE) + flags= 0; + else return NULL; - } - PFS_events_waits *wait= &pfs_thread->m_events_waits_stack[pfs_thread->m_events_waits_count]; - state->m_wait= wait; - flags|= STATE_FLAG_EVENT; + } + else + { + state->m_thread= reinterpret_cast (pfs_thread); + flags= STATE_FLAG_THREAD; - PFS_events_waits *parent_event= wait - 1; - wait->m_event_type= EVENT_TYPE_WAIT; - wait->m_nesting_event_id= parent_event->m_event_id; - wait->m_nesting_event_id= parent_event->m_event_type; - wait->m_thread= pfs_thread; - wait->m_class= pfs_socket->m_class; - wait->m_timer_start= 0; - wait->m_timer_end= 0; - wait->m_object_instance_addr= pfs_socket->m_identity; - wait->m_weak_socket= pfs_socket; - wait->m_weak_version= pfs_socket->get_version(); - wait->m_event_id= pfs_thread->m_event_id++; - wait->m_operation= socket_operation_map[static_cast(op)]; - wait->m_wait_class= WAIT_CLASS_SOCKET; + /* Sockets in IDLE state are timed separately */ + if (pfs_socket->m_timed) + flags|= STATE_FLAG_TIMED; - pfs_thread->m_events_waits_count++; + if (flag_events_waits_current) + { + if (unlikely(pfs_thread->m_events_waits_count >= WAIT_STACK_SIZE)) + { + locker_lost++; + return NULL; + } + PFS_events_waits *wait= &pfs_thread->m_events_waits_stack[pfs_thread->m_events_waits_count]; + state->m_wait= wait; + flags|= STATE_FLAG_EVENT; + + PFS_events_waits *parent_event= wait - 1; + wait->m_event_type= EVENT_TYPE_WAIT; + wait->m_nesting_event_id= parent_event->m_event_id; + wait->m_nesting_event_id= parent_event->m_event_type; + wait->m_thread= pfs_thread; + wait->m_class= pfs_socket->m_class; + wait->m_timer_start= 0; + wait->m_timer_end= 0; + wait->m_object_instance_addr= pfs_socket->m_identity; + wait->m_weak_socket= pfs_socket; + wait->m_weak_version= pfs_socket->get_version(); + wait->m_event_id= pfs_thread->m_event_id++; + wait->m_operation= socket_operation_map[static_cast(op)]; + wait->m_wait_class= WAIT_CLASS_SOCKET; + + pfs_thread->m_events_waits_count++; + } } } else { /* Sockets in IDLE state are counted but not timed */ - if (pfs_socket->m_timed) + if (pfs_socket->m_timed) { flags= STATE_FLAG_TIMED; } @@ -3173,7 +3185,7 @@ start_idle_wait_v1(PSI_idle_locker_state /** Implementation of the mutex instrumentation interface. - @sa PSI_v1::end_mutex_wait. + @sa PSI_v1::end_idle_wait. */ static void end_idle_wait_v1(PSI_idle_locker* locker) { @@ -4657,6 +4669,7 @@ static void end_socket_wait_v1(PSI_socke PFS_byte_stat *byte_stat; register uint flags= state->m_flags; size_t bytes= ((int)byte_count > -1 ? byte_count : 0); + bool misc_op=false; switch (state->m_operation) { @@ -4682,11 +4695,13 @@ static void end_socket_wait_v1(PSI_socke case PSI_SOCKET_SHUTDOWN: case PSI_SOCKET_SELECT: byte_stat= &socket->m_socket_stat.m_io_stat.m_misc; + misc_op=true; break; case PSI_SOCKET_CLOSE: byte_stat= &socket->m_socket_stat.m_io_stat.m_misc; /* This socket will no longer be used by the server */ socket_closed= true; + misc_op=true; break; default: @@ -4723,6 +4738,9 @@ static void end_socket_wait_v1(PSI_socke byte_stat->aggregate_counted(bytes); } + if (misc_op && wait_time==0) + __debugbreak(); + /** Global thread aggregation */ if (flags & STATE_FLAG_THREAD) { No bundle (reason: useless for push emails).