268 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			268 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								--source include/have_community_features.inc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Verify that the protocol isn't violated if we ask for profiling info
							 | 
						||
| 
								 | 
							
								# before profiling has recorded anything.
							 | 
						||
| 
								 | 
							
								show profiles;
							 | 
						||
| 
								 | 
							
								show profile all;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# default is OFF
							 | 
						||
| 
								 | 
							
								show session variables like 'profil%';
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# setting global variable is an error
							 | 
						||
| 
								 | 
							
								--error ER_LOCAL_VARIABLE
							 | 
						||
| 
								 | 
							
								set global profiling = ON;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# But size is okay
							 | 
						||
| 
								 | 
							
								set @start_value= @@global.profiling_history_size;
							 | 
						||
| 
								 | 
							
								set global profiling_history_size=100;
							 | 
						||
| 
								 | 
							
								show global variables like 'profil%';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# turn on for testing
							 | 
						||
| 
								 | 
							
								set session profiling = ON;
							 | 
						||
| 
								 | 
							
								set session profiling_history_size=30;  # small enough to overflow
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# verify it is active
							 | 
						||
| 
								 | 
							
								show session variables like 'profil%';
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   Profiling is a descriptive look into the way the server operated
							 | 
						||
| 
								 | 
							
								#   in retrospect.  Chad doesn't think it's wise to include the result
							 | 
						||
| 
								 | 
							
								#   log, as this creates a proscriptive specification about how the 
							 | 
						||
| 
								 | 
							
								#   server should work in the future -- or it forces everyone who 
							 | 
						||
| 
								 | 
							
								#   changes the server significantly to record the test results again,
							 | 
						||
| 
								 | 
							
								#   and that violates the spirit of our tests.  Please don't include
							 | 
						||
| 
								 | 
							
								#   execution-specific data here, as in all of the "show profile" and
							 | 
						||
| 
								 | 
							
								#   information_schema.profiling results.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								create table t1 (
							 | 
						||
| 
								 | 
							
								  a int,
							 | 
						||
| 
								 | 
							
								  b int
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								insert into t1 values (1,1), (2,null), (3, 4);
							 | 
						||
| 
								 | 
							
								insert into t1 values (5,1), (6,null), (7, 4);
							 | 
						||
| 
								 | 
							
								insert into t1 values (1,1), (2,null), (3, 4);
							 | 
						||
| 
								 | 
							
								insert into t1 values (5,1), (6,null), (7, 4);
							 | 
						||
| 
								 | 
							
								select max(x) from (select sum(a) as x from t1 group by b) as teeone;
							 | 
						||
| 
								 | 
							
								insert into t1 select * from t1;
							 | 
						||
| 
								 | 
							
								select count(*) from t1;
							 | 
						||
| 
								 | 
							
								insert into t1 select * from t1;
							 | 
						||
| 
								 | 
							
								insert into t1 select * from t1;
							 | 
						||
| 
								 | 
							
								insert into t1 select * from t1;
							 | 
						||
| 
								 | 
							
								select count(*) from t1;
							 | 
						||
| 
								 | 
							
								insert into t1 select * from t1;
							 | 
						||
| 
								 | 
							
								insert into t1 select * from t1;
							 | 
						||
| 
								 | 
							
								insert into t1 select * from t1;
							 | 
						||
| 
								 | 
							
								select count(*) from t1;
							 | 
						||
| 
								 | 
							
								select sum(a) from t1;
							 | 
						||
| 
								 | 
							
								select sum(a) from t1 group by b;
							 | 
						||
| 
								 | 
							
								select sum(a) + sum(b) from t1 group by b;
							 | 
						||
| 
								 | 
							
								select max(x) from (select sum(a) as x from t1 group by b) as teeone;
							 | 
						||
| 
								 | 
							
								select '012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890' as big_string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--enable_result_log
							 | 
						||
| 
								 | 
							
								--replace_column 2 #
							 | 
						||
| 
								 | 
							
								show profiles;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--disable_result_log
							 | 
						||
| 
								 | 
							
								###--replace_column 2 # 3 # 4 #
							 | 
						||
| 
								 | 
							
								show profile for query 15;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 # 3 # 4 #
							 | 
						||
| 
								 | 
							
								show profile cpu for query 15;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 # 3 # 4 # 5 # 6 #
							 | 
						||
| 
								 | 
							
								show profile cpu, block io for query 15;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 # 3 # 4 #
							 | 
						||
| 
								 | 
							
								show profile cpu for query 9 limit 2 offset 2;
							 | 
						||
| 
								 | 
							
								show profile cpu for query 10 limit 0;
							 | 
						||
| 
								 | 
							
								--error 0,ER_WRONG_ARGUMENTS
							 | 
						||
| 
								 | 
							
								show profile cpu for query 65534;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 #
							 | 
						||
| 
								 | 
							
								show profile memory;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 # 3 # 4 #
							 | 
						||
| 
								 | 
							
								show profile block io;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 # 3 # 4 #
							 | 
						||
| 
								 | 
							
								show profile context switches;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 # 3 # 4 #
							 | 
						||
| 
								 | 
							
								show profile page faults;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 # 3 # 4 #
							 | 
						||
| 
								 | 
							
								show profile ipc;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 #
							 | 
						||
| 
								 | 
							
								show profile swaps limit 1 offset 2;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 # 5 #
							 | 
						||
| 
								 | 
							
								show profile source;
							 | 
						||
| 
								 | 
							
								show profile all for query 0 limit 0;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 10 # 11 # 12 # 13 # 16 #
							 | 
						||
| 
								 | 
							
								show profile all for query 15;
							 | 
						||
| 
								 | 
							
								###--replace_column 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 10 # 11 # 12 # 13 # 16 #
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								select * from information_schema.profiling;
							 | 
						||
| 
								 | 
							
								select query_id, state, duration from information_schema.profiling;
							 | 
						||
| 
								 | 
							
								select query_id, sum(duration) from information_schema.profiling group by query_id;
							 | 
						||
| 
								 | 
							
								select query_id, count(*) from information_schema.profiling group by query_id;
							 | 
						||
| 
								 | 
							
								select sum(duration) from information_schema.profiling;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Broken down into number of stages and duration of each query.
							 | 
						||
| 
								 | 
							
								select query_id, count(*), sum(duration) from information_schema.profiling group by query_id;
							 | 
						||
| 
								 | 
							
								select CPU_user, CPU_system, Context_voluntary, Context_involuntary, Block_ops_in, Block_ops_out, Messages_sent, Messages_received, Page_faults_major, Page_faults_minor, Swaps, Source_function, Source_file, Source_line from information_schema.profiling;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--enable_result_log
							 | 
						||
| 
								 | 
							
								drop table if exists t1, t2, t3;
							 | 
						||
| 
								 | 
							
								create table t1 (id int );
							 | 
						||
| 
								 | 
							
								create table t2 (id int not null);
							 | 
						||
| 
								 | 
							
								create table t3 (id int not null primary key);
							 | 
						||
| 
								 | 
							
								insert into t1 values (1), (2), (3);
							 | 
						||
| 
								 | 
							
								insert into t2 values (1), (2), (3);
							 | 
						||
| 
								 | 
							
								insert into t3 values (1), (2), (3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--replace_column 2 #
							 | 
						||
| 
								 | 
							
								show profiles;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								select * from t1;
							 | 
						||
| 
								 | 
							
								--replace_column 2 #
							 | 
						||
| 
								 | 
							
								show profiles;
							 | 
						||
| 
								 | 
							
								--echo This ^^ should end in "select * from t1;"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								delete from t1;
							 | 
						||
| 
								 | 
							
								insert into t1 values (1), (2), (3);
							 | 
						||
| 
								 | 
							
								insert into t1 values (1), (2), (3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								select * from t1;
							 | 
						||
| 
								 | 
							
								--replace_column 2 #
							 | 
						||
| 
								 | 
							
								show profiles;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Turning profiling off does freeze it
							 | 
						||
| 
								 | 
							
								set session profiling = OFF;
							 | 
						||
| 
								 | 
							
								select sum(id) from t1;
							 | 
						||
| 
								 | 
							
								--replace_column 2 #
							 | 
						||
| 
								 | 
							
								show profiles;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##  Verify that the various juggling of THD contexts doesn't affect profiling.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##  Functions and procedures
							 | 
						||
| 
								 | 
							
								set session profiling = ON;
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								create function f1() returns varchar(50) return 'hello';
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								select * from t1 where id <> f1();
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								set session profiling = OFF;
							 | 
						||
| 
								 | 
							
								drop table if exists profile_log;
							 | 
						||
| 
								 | 
							
								create table profile_log (how_many int);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--disable_warnings
							 | 
						||
| 
								 | 
							
								drop procedure if exists p1;
							 | 
						||
| 
								 | 
							
								drop procedure if exists p2;
							 | 
						||
| 
								 | 
							
								drop procedure if exists p3;
							 | 
						||
| 
								 | 
							
								--enable_warnings
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								delimiter //;
							 | 
						||
| 
								 | 
							
								create procedure p1 () 
							 | 
						||
| 
								 | 
							
								  modifies sql data 
							 | 
						||
| 
								 | 
							
								begin 
							 | 
						||
| 
								 | 
							
								  set profiling = ON; 
							 | 
						||
| 
								 | 
							
								  select 'This p1 should show up in profiling'; 
							 | 
						||
| 
								 | 
							
								  insert into profile_log select count(*) from information_schema.profiling; 
							 | 
						||
| 
								 | 
							
								end//
							 | 
						||
| 
								 | 
							
								create procedure p2() 
							 | 
						||
| 
								 | 
							
								  deterministic 
							 | 
						||
| 
								 | 
							
								begin 
							 | 
						||
| 
								 | 
							
								  set profiling = ON; 
							 | 
						||
| 
								 | 
							
								  call p1(); 
							 | 
						||
| 
								 | 
							
								  select 'This p2 should show up in profiling'; 
							 | 
						||
| 
								 | 
							
								end//
							 | 
						||
| 
								 | 
							
								create procedure p3 () 
							 | 
						||
| 
								 | 
							
								  reads sql data 
							 | 
						||
| 
								 | 
							
								begin 
							 | 
						||
| 
								 | 
							
								  set profiling = ON; 
							 | 
						||
| 
								 | 
							
								  select 'This p3 should show up in profiling'; 
							 | 
						||
| 
								 | 
							
								  show profile; 
							 | 
						||
| 
								 | 
							
								end//
							 | 
						||
| 
								 | 
							
								delimiter ;//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--disable_result_log
							 | 
						||
| 
								 | 
							
								--echo first call to p1
							 | 
						||
| 
								 | 
							
								call p1;
							 | 
						||
| 
								 | 
							
								select * from profile_log;
							 | 
						||
| 
								 | 
							
								--echo second call to p1
							 | 
						||
| 
								 | 
							
								call p1;
							 | 
						||
| 
								 | 
							
								select * from profile_log;
							 | 
						||
| 
								 | 
							
								--echo third call to p1
							 | 
						||
| 
								 | 
							
								call p1;
							 | 
						||
| 
								 | 
							
								select * from profile_log;
							 | 
						||
| 
								 | 
							
								set session profiling = OFF;
							 | 
						||
| 
								 | 
							
								call p2;
							 | 
						||
| 
								 | 
							
								set session profiling = OFF;
							 | 
						||
| 
								 | 
							
								call p3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--replace_column 1 # 2 #
							 | 
						||
| 
								 | 
							
								show profiles;
							 | 
						||
| 
								 | 
							
								--enable_result_log
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								drop procedure if exists p1;
							 | 
						||
| 
								 | 
							
								drop procedure if exists p2;
							 | 
						||
| 
								 | 
							
								drop procedure if exists p3;
							 | 
						||
| 
								 | 
							
								drop table if exists profile_log;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##  Triggers
							 | 
						||
| 
								 | 
							
								set session profiling = ON;
							 | 
						||
| 
								 | 
							
								drop table if exists t2;
							 | 
						||
| 
								 | 
							
								create table t2 (id int not null);
							 | 
						||
| 
								 | 
							
								create trigger t2_bi before insert on t2 for each row set @x=0;
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								insert into t2 values (1), (2), (3);
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##  ALTER TABLE
							 | 
						||
| 
								 | 
							
								set session profiling = ON;
							 | 
						||
| 
								 | 
							
								drop table if exists t1, t2;
							 | 
						||
| 
								 | 
							
								create table t1 (id int not null primary key);
							 | 
						||
| 
								 | 
							
								create table t2 (id int not null primary key, id1 int not null);
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								alter table t2 add foreign key (id1) references t1 (id) on delete cascade;
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##  Table LOCKing
							 | 
						||
| 
								 | 
							
								lock table t1 write; 
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								unlock table; 
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##  Transactions
							 | 
						||
| 
								 | 
							
								set autocommit=0;
							 | 
						||
| 
								 | 
							
								select @@profiling, @@autocommit;
							 | 
						||
| 
								 | 
							
								begin;
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								insert into t1 values (1);
							 | 
						||
| 
								 | 
							
								insert into t2 values (1,1);
							 | 
						||
| 
								 | 
							
								--echo testing referential integrity cascade
							 | 
						||
| 
								 | 
							
								delete from t1 where id = 1;
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								--echo testing rollback
							 | 
						||
| 
								 | 
							
								--disable_warnings
							 | 
						||
| 
								 | 
							
								rollback;
							 | 
						||
| 
								 | 
							
								--enable_warnings
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								--echo testing commit
							 | 
						||
| 
								 | 
							
								begin;
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								commit;
							 | 
						||
| 
								 | 
							
								select @@profiling;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								drop table if exists t1, t2, t3;
							 | 
						||
| 
								 | 
							
								drop view if exists v1;
							 | 
						||
| 
								 | 
							
								drop function if exists f1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Multiple queries in one packet.  Combo statements don't work with ps-proto.
							 | 
						||
| 
								 | 
							
								#--eval select 1; select 2; select 3;
							 | 
						||
| 
								 | 
							
								## two continuations, one starting
							 | 
						||
| 
								 | 
							
								#select state from information_schema.profiling where seq=1 order by query_id desc limit 3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## last thing in the file
							 | 
						||
| 
								 | 
							
								set session profiling = OFF;
							 | 
						||
| 
								 | 
							
								set global profiling_history_size= @start_value;
							 | 
						||
| 
								 | 
							
								##
							 | 
						||
| 
								 | 
							
								--echo End of 5.0 tests
							 |