mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			432 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			432 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # This test used to be duplicated in the following:
 | |
| # sys_vars.innodb_monitor_reset_basic
 | |
| # sys_vars.innodb_monitor_reset_all_basic
 | |
| # sys_vars.innodb_monitor_disable_basic
 | |
| # sys_vars.innodb_monitor_enable_basic
 | |
| 
 | |
| --source include/have_innodb.inc
 | |
| set global innodb_monitor_disable = All;
 | |
| # Test turn on/off the monitor counter  with "all" option
 | |
| # By default, they will be off.
 | |
| select name, status from information_schema.innodb_metrics;
 | |
| 
 | |
| # Turn on all monitor counters
 | |
| set global innodb_monitor_enable = all;
 | |
| 
 | |
| # status should all change to "enabled"
 | |
| select name from information_schema.innodb_metrics where status!='enabled';
 | |
| 
 | |
| # Test wrong argument to the global configure option
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set global innodb_monitor_enable = aaa;
 | |
| 
 | |
| # We require a valid monitor counter/module name. There is no default
 | |
| # counter name or module. A warning will be printed asking user to
 | |
| # specify a valid counter name.
 | |
| #--disable_warnings
 | |
| #set global innodb_monitor_enable = default;
 | |
| #--enable_warnings
 | |
| 
 | |
| # Turn off all monitor counters, option name should be case
 | |
| # insensitive
 | |
| set global innodb_monitor_disable = All;
 | |
| 
 | |
| # status should all change to "disabled"
 | |
| select name from information_schema.innodb_metrics where status!='disabled';
 | |
| 
 | |
| # Reset all counter values
 | |
| set global innodb_monitor_reset_all = all;
 | |
| 
 | |
| # count should all change to 0
 | |
| select name from information_schema.innodb_metrics where count!=0;
 | |
| 
 | |
| # Test wildcard match, turn on all counters contain string "lock"
 | |
| set  global innodb_monitor_enable = "%lock%";
 | |
| 
 | |
| # All lock related counter should be enabled
 | |
| select name from information_schema.innodb_metrics
 | |
| where status != IF(name like "%lock%", 'enabled', 'disabled');
 | |
| 
 | |
| # Disable them
 | |
| set  global innodb_monitor_disable = "%lock%";
 | |
| 
 | |
| # All lock related counter should be disabled
 | |
| select name, status from information_schema.innodb_metrics
 | |
| where name like "%lock%";
 | |
| 
 | |
| # No match for "%lock*"
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set global innodb_monitor_enable = "%lock*";
 | |
| 
 | |
| # All counters will be turned on with wildcard match string with all "%"
 | |
| set global innodb_monitor_enable="%%%%%%%%%%%%%%%%%%%%%%%%%%%";
 | |
| 
 | |
| select name from information_schema.innodb_metrics where status!='enabled';
 | |
| 
 | |
| # Turn off all counters
 | |
| set global innodb_monitor_disable="%%%%%";
 | |
| 
 | |
| select name from information_schema.innodb_metrics where status!='disabled';
 | |
| 
 | |
| # One more round testing. All counters will be turned on with
 | |
| # single wildcard character "%"
 | |
| set global innodb_monitor_enable="%";
 | |
| 
 | |
| select name from information_schema.innodb_metrics where status!='enabled';
 | |
| 
 | |
| # Turn off all the counters with "%_%"
 | |
| set global innodb_monitor_disable="%_%";
 | |
| 
 | |
| select name from information_schema.innodb_metrics where status!='disabled';
 | |
| 
 | |
| # Turn on all counters start with "log"
 | |
| set global innodb_monitor_enable="log%%%%";
 | |
| 
 | |
| select name from information_schema.innodb_metrics
 | |
| where status != IF(name like "log%", 'enabled', 'disabled');
 | |
| 
 | |
| # Turn on counters "os_data_fsync" with wildcard match "os_%a_fs_ncs", "_"
 | |
| # is single character wildcard match word
 | |
| set global innodb_monitor_enable="os_%a_fs_ncs";
 | |
| 
 | |
| # Turn on counters whose name contains "os" and "pending" with
 | |
| # wildcard match "os%pending%"
 | |
| set global innodb_monitor_enable="os%pending%";
 | |
| 
 | |
| select name, status from information_schema.innodb_metrics
 | |
| where name like "os%";
 | |
| 
 | |
| # Empty string is an invalid option
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set global innodb_monitor_enable="";
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set global innodb_monitor_enable="_";
 | |
| 
 | |
| SET global innodb_monitor_disable = module_metadata;
 | |
| SET global innodb_monitor_reset_all = module_metadata;
 | |
| 
 | |
| # Only turn on "table_open" counter
 | |
| set global innodb_monitor_enable = metadata_table_handles_opened;
 | |
| 
 | |
| # Create a new table to test "metadata_table_handles_opened" counter
 | |
| create table monitor_test(col int) engine = innodb;
 | |
| 
 | |
| # This will open the monitor_test table
 | |
| select * from monitor_test;
 | |
| 
 | |
| # "metadata_table_handles_opened" should increment by 1
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name = "metadata_table_handles_opened";
 | |
| 
 | |
| # Reset the counter value while counter is still on (started)
 | |
| # This will reset value "count_reset" but not
 | |
| # "count"
 | |
| set global innodb_monitor_reset = metadata_table_handles_opened;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name = "metadata_table_handles_opened";
 | |
| 
 | |
| # re-create table again to increment "metadata_table_handles_opened" again
 | |
| drop table monitor_test;
 | |
| 
 | |
| # Create a new table to test "metadata_table_handles_opened" counter
 | |
| create table monitor_test(col int) engine = innodb;
 | |
| 
 | |
| select * from monitor_test;
 | |
| 
 | |
| # "metadata_table_handles_opened" should increment
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name = "metadata_table_handles_opened";
 | |
| 
 | |
| # Cannot reset all monitor value while the counter is on
 | |
| set global innodb_monitor_reset_all = metadata_table_handles_opened;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name = "metadata_table_handles_opened";
 | |
| 
 | |
| # Turn off the counter "metadata_table_handles_opened"
 | |
| set global innodb_monitor_disable = metadata_table_handles_opened;
 | |
| 
 | |
| # Reset the counter value while counter is off (disabled)
 | |
| set global innodb_monitor_reset = metadata_table_handles_opened;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name = "metadata_table_handles_opened";
 | |
| 
 | |
| # re-create table again. Since monitor is off, "metadata_table_handles_opened"
 | |
| # should not be incremented
 | |
| drop table monitor_test;
 | |
| 
 | |
| # Create a new table to test "metadata_table_handles_opened" counter
 | |
| create table monitor_test(col int) engine = innodb;
 | |
| 
 | |
| # "metadata_table_handles_opened" should increment
 | |
| select * from monitor_test;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name = "metadata_table_handles_opened";
 | |
| 
 | |
| # Reset all the counters, include those counter *_since_start
 | |
| set global innodb_monitor_reset_all = metadata_table_handles_opened;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name = "metadata_table_handles_opened";
 | |
| 
 | |
| # Turn on "table_open" counter again
 | |
| set global innodb_monitor_enable = metadata_table_handles_opened;
 | |
| 
 | |
| # Test metadata_table_handles_opened again to see if it is working correctly
 | |
| # after above round of turning on/off/reset
 | |
| drop table monitor_test;
 | |
| 
 | |
| # Create a new table to test "metadata_table_handles_opened" counter
 | |
| create table monitor_test(col int) engine = innodb stats_persistent=0;
 | |
| 
 | |
| select * from monitor_test;
 | |
| 
 | |
| # "metadata_table_handles_opened" should increment
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name = "metadata_table_handles_opened";
 | |
| 
 | |
| # Test counter "metadata_table_handles_closed",
 | |
| # create index will close the old handle
 | |
| set global innodb_monitor_enable = metadata_table_handles_closed;
 | |
| 
 | |
| create index idx on monitor_test(col);
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name = "metadata_table_handles_closed";
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "metadata%";
 | |
| 
 | |
| # Reset counters only in "module_metadata" module
 | |
| set global innodb_monitor_disable = module_metadata;
 | |
| 
 | |
| set global innodb_monitor_reset = module_metadata;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "metadata%";
 | |
| 
 | |
| set global innodb_monitor_reset_all = module_metadata;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "metadata%";
 | |
| 
 | |
| # Test Transaction Module
 | |
| set global innodb_monitor_enable = module_trx;
 | |
| 
 | |
| begin;
 | |
| insert into monitor_test values(9);
 | |
| commit;
 | |
| 
 | |
| begin;
 | |
| insert into monitor_test values(9);
 | |
| rollback;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "trx_rollbacks" or name like "trx_active_transactions";
 | |
| 
 | |
| set global innodb_monitor_disable = module_trx;
 | |
| 
 | |
| # Test DML Module
 | |
| set global innodb_monitor_enable = module_dml;
 | |
| 
 | |
| insert into monitor_test values(9);
 | |
| 
 | |
| update monitor_test set col = 10 where col = 9;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "dml%";
 | |
| 
 | |
| delete from monitor_test;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| 	from information_schema.innodb_metrics
 | |
| 	where name like "dml%";
 | |
| 
 | |
| # test reset counter while the counter is on
 | |
| set global innodb_monitor_reset =  module_dml;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "dml%";
 | |
| 
 | |
| # insert/delete some rows after the reset
 | |
| insert into monitor_test values(9);
 | |
| insert into monitor_test values(1);
 | |
| 
 | |
| delete from monitor_test;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "dml%";
 | |
| 
 | |
| # We do not allow reset_all while the counter is on, nothing
 | |
| # should be reset here
 | |
| set global innodb_monitor_reset_all  =  module_dml;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "dml%";
 | |
| 
 | |
| # Turn off the counter
 | |
| set global innodb_monitor_disable = module_dml;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "dml%";
 | |
| 
 | |
| # Reset all counter values
 | |
| set global innodb_monitor_reset_all  = module_dml;
 | |
| 
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "dml%";
 | |
| 
 | |
| # Open individual counter "dml_inserts"
 | |
| set global innodb_monitor_enable = dml_inserts;
 | |
| 
 | |
| insert into monitor_test values(9);
 | |
| insert into monitor_test values(1);
 | |
| 
 | |
| delete from monitor_test;
 | |
| 
 | |
| # Only counter "dml_inserts" should be updated
 | |
| select name, max_count, min_count, count,
 | |
| 	max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "dml%";
 | |
| 
 | |
| set global innodb_monitor_disable = module_dml;
 | |
| 
 | |
| drop table monitor_test;
 | |
| 
 | |
| set global innodb_monitor_enable = file_num_open_files;
 | |
| 
 | |
| # Counters are unpredictable when innodb-file-per-table is on
 | |
| --replace_column 2 # 3 # 4 # 5 # 6 # 7 #
 | |
| select name, max_count, min_count, count,
 | |
|        max_count_reset, min_count_reset, count_reset, status
 | |
| from information_schema.innodb_metrics
 | |
| where name like "file_num_open_files";
 | |
| 
 | |
| set global innodb_monitor_disable = file_num_open_files;
 | |
| 
 | |
| # Test ICP module counters
 | |
| set global innodb_monitor_enable = "icp%";
 | |
| 
 | |
| create table monitor_test(a char(3), b int, c char(2),
 | |
| primary key (a(1), c(1)), key(b)) engine = innodb;
 | |
| 
 | |
| insert into monitor_test values("13", 2, "aa");
 | |
| 
 | |
| select a from monitor_test where b < 1 for update;
 | |
| 
 | |
| # should have icp_attempts = 1 and icp_out_of_range = 1
 | |
| select name, count from information_schema.innodb_metrics
 | |
| where name like "icp%";
 | |
| 
 | |
| # should have icp_attempts = 2 and icp_match = 1
 | |
| select a from monitor_test where b < 3 for update;
 | |
| 
 | |
| select name, count from information_schema.innodb_metrics
 | |
| where name like "icp%";
 | |
| 
 | |
| drop table monitor_test;
 | |
| set global innodb_monitor_disable = All;
 | |
| set global innodb_monitor_reset_all = all;
 | |
| 
 | |
| # Test for bug #13966091
 | |
| select 1 from `information_schema`.`INNODB_METRICS`
 | |
| where case (1) when (1) then (AVG_COUNT_RESET) else (1) end;
 | |
| 
 | |
| -- disable_warnings
 | |
| set global innodb_monitor_enable = default;
 | |
| set global innodb_monitor_disable = default;
 | |
| set global innodb_monitor_reset = default;
 | |
| set global innodb_monitor_reset_all = default;
 | |
| -- enable_warnings
 | |
| 
 | |
| --echo #
 | |
| --echo # Bug#22576241 SETTING INNODB_MONITOR_ENABLE TO ALL DOES NOT ENABLE ALL
 | |
| --echo # MONITORS
 | |
| --echo #
 | |
| CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
 | |
| 
 | |
| let $innodb_monitor_enable = `SELECT @@innodb_monitor_enable`;
 | |
| 
 | |
| SELECT NAME, COUNT > 0 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
 | |
| LIKE 'buffer_page_written_index_leaf';
 | |
| 
 | |
| SET GLOBAL innodb_monitor_enable='module_buffer_page';
 | |
| INSERT INTO t1 VALUES (1), (2), (3), (4); FLUSH TABLES t1 FOR EXPORT;
 | |
| UNLOCK TABLES;
 | |
| SELECT NAME, COUNT > 0 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
 | |
| LIKE 'buffer_page_written_index_leaf';
 | |
| 
 | |
| SET GLOBAL innodb_monitor_disable='module_buffer_page';
 | |
| SET GLOBAL innodb_monitor_reset_all='module_buffer_page';
 | |
| SELECT NAME, COUNT > 0 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
 | |
| LIKE 'buffer_page_written_index_leaf';
 | |
| 
 | |
| SET GLOBAL innodb_monitor_enable='%';
 | |
| INSERT INTO t1 VALUES (5), (6), (7), (8); FLUSH TABLES t1 FOR EXPORT;
 | |
| UNLOCK TABLES;
 | |
| SELECT NAME, COUNT > 0 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
 | |
| LIKE 'buffer_page_written_index_leaf';
 | |
| 
 | |
| SET GLOBAL innodb_monitor_disable='%';
 | |
| SET GLOBAL innodb_monitor_reset_all='%';
 | |
| SELECT NAME, COUNT > 0 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
 | |
| LIKE 'buffer_page_written_index_leaf';
 | |
| 
 | |
| SET GLOBAL innodb_monitor_enable='ALL';
 | |
| INSERT INTO t1 VALUES (9), (10), (11), (12); FLUSH TABLES t1 FOR EXPORT;
 | |
| UNLOCK TABLES;
 | |
| SELECT NAME, COUNT > 0 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
 | |
| LIKE 'buffer_page_written_index_leaf';
 | |
| 
 | |
| --disable_warnings
 | |
| SET GLOBAL innodb_monitor_enable=default;
 | |
| SET GLOBAL innodb_monitor_disable=default;
 | |
| SET GLOBAL innodb_monitor_reset_all=default;
 | |
| --enable_warnings
 | |
| 
 | |
| DROP TABLE t1;
 |