mariadb/mysql-test/suite/perfschema/t/prepared_statements.test
Sergei Golubchik 0ea717f51a P_S 5.7.28
2020-03-10 19:24:22 +01:00

210 lines
4.5 KiB
Text

# Test for prepared statement instrumentation
--source include/not_embedded.inc
--source include/have_perfschema.inc
--source include/no_protocol.inc
CREATE DATABASE db;
USE db;
--let $psi_select = SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances
--let $psi_truncate = TRUNCATE TABLE performance_schema.prepared_statements_instances
--let $eshl_select = SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db'
--let $eshl_truncate = TRUNCATE TABLE performance_schema.events_statements_history_long
--eval $psi_truncate
--eval $eshl_truncate
--source suite/perfschema/include/prepared_stmts_setup.inc
--vertical_results
--eval $psi_select
--eval $eshl_select
--horizontal_results
--source suite/perfschema/include/prepared_stmts_execution.inc
--vertical_results
--eval $psi_select
--eval $eshl_select
--horizontal_results
# Truncate to reset the statistics
--eval $psi_truncate
# check whether the statistics are reset
--vertical_results
--eval $psi_select
--horizontal_results
--source suite/perfschema/include/prepared_stmts_deallocation.inc
--vertical_results
# select query on prepared_statements_instances table must return empty set
--eval $psi_select
--eval $eshl_select
--horizontal_results
# truncate
--eval $eshl_truncate
#
# Test to check the instrumentation of prepared statements
# when all consumers in setup_consumers are disabled.
#
# Disable all consumers
UPDATE performance_schema.setup_consumers SET ENABLED = 'NO';
--source suite/perfschema/include/prepared_stmts_setup.inc
--vertical_results
--eval $psi_select
--eval $eshl_select
--horizontal_results
--source suite/perfschema/include/prepared_stmts_execution.inc
--vertical_results
--eval $psi_select
--eval $eshl_select
--horizontal_results
--source suite/perfschema/include/prepared_stmts_deallocation.inc
--vertical_results
--eval $psi_select
--eval $eshl_select
--horizontal_results
# truncate
--eval $eshl_truncate
# restore the initial set-up of consumers table
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES';
#
# Aggregation
#
PREPARE st FROM 'SELECT SUM(1000 + ?) AS total';
--vertical_results
--eval $psi_select
--horizontal_results
SET @d=100;
EXECUTE st USING @d;
--vertical_results
--eval $psi_select
--horizontal_results
let $i=5;
while($i)
{
SET @d = @d + 100;
EXECUTE st USING @d;
--vertical_results
--eval $psi_select
--horizontal_results
dec $i;
}
# truncate
--eval $psi_truncate
--vertical_results
--eval $psi_select
--horizontal_results
#
# check whether the instrumented prepared statement is removed from the
# prepared_statement_instances table after de allocation of the prepared
# statement even if instrumentation is disabled
#
# Disable prepared statement instrumentation
UPDATE performance_schema.setup_instruments SET ENABLED = 'NO'
WHERE NAME like "statement/sql/execute%";
SET @d=3274;
# COUNT_EXECUTE should remain 0. No increment must be seen.
EXECUTE st USING @d;
--vertical_results
--eval $psi_select
--horizontal_results
UPDATE performance_schema.setup_instruments SET ENABLED = 'NO'
WHERE NAME like "statement/sql/prepare%";
DEALLOCATE PREPARE st;
# should return empty set.
--vertical_results
--eval $psi_select
--horizontal_results
# Restore back teh initial set-up of setup_instruments table
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'
WHERE NAME like "statement/sql/prepare%";
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'
WHERE NAME like "statement/sql/execute%";
# Reprepare
CREATE TABLE tab(
Id INT,
name CHAR(10),
age INT
);
INSERT INTO tab VALUES(1,"Nakshatr",25),(2,"chanda",24),(3,"tejas",78);
PREPARE st FROM 'SELECT * FROM tab';
--vertical_results
--eval $psi_select
--horizontal_results
EXECUTE st;
--vertical_results
--eval $psi_select
--horizontal_results
ALTER TABLE tab DROP COLUMN age;
EXECUTE st;
--vertical_results
--eval $psi_select
--horizontal_results
ALTER TABLE tab ADD COLUMN age INT NULL;
EXECUTE st;
--vertical_results
--eval $psi_select
--horizontal_results
# check if the statistics are reset
--eval $psi_truncate
--vertical_results
--eval $psi_select
--horizontal_results
DEALLOCATE PREPARE st;
--vertical_results
--eval $psi_select
--horizontal_results
# clean up
# truncate
--eval $psi_truncate
--eval $eshl_truncate
DROP TABLE tab;
DROP DATABASE db;