mirror of
https://github.com/MariaDB/server.git
synced 2025-02-15 18:05:32 +01:00
![Marko Mäkelä](/assets/img/avatar_default.png)
Because the default build configuration of the server will remain at -DWITH_INNODB_AHI=ON, we want to test the instrumentation. We make and revert the test adjustments in separate commits on purpose, so that this commit can be easily reverted later if the default build configuration is changed to -DWITH_INNODB_AHI=OFF.
437 lines
14 KiB
Text
437 lines
14 KiB
Text
# 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`;
|
|
|
|
--replace_regex /[1-9]/NNNN/
|
|
SELECT NAME, COUNT 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;
|
|
--replace_regex /[1-9]/NNNN/
|
|
SELECT NAME, COUNT 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';
|
|
--replace_regex /[1-9]/NNNN/
|
|
SELECT NAME, COUNT 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;
|
|
--replace_regex /[1-9]/NNNN/
|
|
SELECT NAME, COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
|
|
LIKE 'buffer_page_written_index_leaf';
|
|
|
|
SET GLOBAL innodb_monitor_disable='%';
|
|
SET GLOBAL innodb_monitor_reset_all='%';
|
|
--replace_regex /[1-9]/NNNN/
|
|
SELECT NAME, COUNT 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;
|
|
--replace_regex /[1-9]/NNNN/
|
|
SELECT NAME, COUNT 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;
|