mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-34489 innodb.innodb_row_lock_time_ms fails
The test fails trying to compare (innodb/lock)_row_lock_time_avg with some limit. We can't predict (innodb/lock)_row_lock_time_avg value, because it's counted as the whole waiting time divided by the amount of waits. Both waiting time and amount of waits depend on the previous tests execution. The corresponding counters in lock_sys can't be reset with any query. Remove (innodb/lock)_row_lock_time_avg comparision from the test. information_schema.global_status.innodb_row_lock_time can't be reset, compare its difference instead of absolute value. Reviewed by: Marko Mäkelä
This commit is contained in:
@@ -1,10 +1,18 @@
|
||||
CREATE TABLE `t`(`id` INT, PRIMARY KEY(`id`)) ENGINE=InnoDB STATS_PERSISTENT=0;
|
||||
INSERT INTO t VALUES (1);
|
||||
SET GLOBAL innodb_monitor_reset = "module_innodb";
|
||||
SET GLOBAL innodb_monitor_disable="lock_row_lock_time";
|
||||
SET GLOBAL innodb_monitor_disable="lock_row_lock_time_max";
|
||||
SET GLOBAL innodb_monitor_reset_all='lock_row_lock_time';
|
||||
SET GLOBAL innodb_monitor_reset_all='lock_row_lock_time_max';
|
||||
SET GLOBAL innodb_monitor_enable="lock_row_lock_time";
|
||||
SET GLOBAL innodb_monitor_enable="lock_row_lock_time_max";
|
||||
BEGIN;
|
||||
SELECT * FROM t FOR UPDATE;
|
||||
id
|
||||
1
|
||||
SELECT @innodb_row_lock_time_before := variable_value
|
||||
FROM information_schema.global_status
|
||||
WHERE LOWER(variable_name) = 'innodb_row_lock_time';
|
||||
connect con1,localhost,root,,;
|
||||
SET innodb_lock_wait_timeout = 1;
|
||||
SELECT * FROM t FOR UPDATE;
|
||||
@@ -12,29 +20,27 @@ ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
disconnect con1;
|
||||
connection default;
|
||||
COMMIT;
|
||||
SELECT variable_value > 100 FROM information_schema.global_status
|
||||
SELECT variable_value - @innodb_row_lock_time_before > 100
|
||||
FROM information_schema.global_status
|
||||
WHERE LOWER(variable_name) = 'innodb_row_lock_time';
|
||||
variable_value > 100
|
||||
variable_value - @innodb_row_lock_time_before > 100
|
||||
1
|
||||
SELECT variable_value > 100 FROM information_schema.global_status
|
||||
SELECT variable_value > 100
|
||||
FROM information_schema.global_status
|
||||
WHERE LOWER(variable_name) = 'innodb_row_lock_time_max';
|
||||
variable_value > 100
|
||||
1
|
||||
SELECT variable_value > 100 FROM information_schema.global_status
|
||||
WHERE LOWER(variable_name) = 'innodb_row_lock_time_avg';
|
||||
variable_value > 100
|
||||
1
|
||||
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS
|
||||
WHERE NAME="lock_row_lock_time";
|
||||
SELECT count_reset > 100
|
||||
FROM INFORMATION_SCHEMA.INNODB_METRICS
|
||||
WHERE NAME='lock_row_lock_time';
|
||||
count_reset > 100
|
||||
1
|
||||
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS
|
||||
WHERE NAME="lock_row_lock_time_max";
|
||||
count_reset > 100
|
||||
1
|
||||
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS
|
||||
WHERE NAME="lock_row_lock_time_avg";
|
||||
SELECT count_reset > 100
|
||||
FROM INFORMATION_SCHEMA.INNODB_METRICS
|
||||
WHERE NAME='lock_row_lock_time_max';
|
||||
count_reset > 100
|
||||
1
|
||||
DROP TABLE t;
|
||||
SET GLOBAL innodb_monitor_reset=default;
|
||||
SET GLOBAL innodb_monitor_enable=default;
|
||||
SET GLOBAL innodb_monitor_disable=default;
|
||||
SET GLOBAL innodb_monitor_reset_all=default;
|
||||
|
@@ -5,11 +5,26 @@ CREATE TABLE `t`(`id` INT, PRIMARY KEY(`id`)) ENGINE=InnoDB STATS_PERSISTENT=0;
|
||||
|
||||
INSERT INTO t VALUES (1);
|
||||
|
||||
SET GLOBAL innodb_monitor_reset = "module_innodb";
|
||||
SET GLOBAL innodb_monitor_disable="lock_row_lock_time";
|
||||
SET GLOBAL innodb_monitor_disable="lock_row_lock_time_max";
|
||||
SET GLOBAL innodb_monitor_reset_all='lock_row_lock_time';
|
||||
SET GLOBAL innodb_monitor_reset_all='lock_row_lock_time_max';
|
||||
SET GLOBAL innodb_monitor_enable="lock_row_lock_time";
|
||||
SET GLOBAL innodb_monitor_enable="lock_row_lock_time_max";
|
||||
|
||||
BEGIN;
|
||||
SELECT * FROM t FOR UPDATE;
|
||||
|
||||
# We can't predict (innodb/lock)_row_lock_time_avg value, because it's counted
|
||||
# as the whole waiting time divided by the amount of waits. The
|
||||
# corresponding counters in lock_sys can't be reset with any query.
|
||||
|
||||
--disable_result_log
|
||||
SELECT @innodb_row_lock_time_before := variable_value
|
||||
FROM information_schema.global_status
|
||||
WHERE LOWER(variable_name) = 'innodb_row_lock_time';
|
||||
--enable_result_log
|
||||
|
||||
--connect(con1,localhost,root,,)
|
||||
SET innodb_lock_wait_timeout = 1;
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
@@ -19,24 +34,28 @@ SELECT * FROM t FOR UPDATE;
|
||||
--connection default
|
||||
COMMIT;
|
||||
|
||||
SELECT variable_value > 100 FROM information_schema.global_status
|
||||
SELECT variable_value - @innodb_row_lock_time_before > 100
|
||||
FROM information_schema.global_status
|
||||
WHERE LOWER(variable_name) = 'innodb_row_lock_time';
|
||||
SELECT variable_value > 100 FROM information_schema.global_status
|
||||
# We can't use 'variable_value - @innodb_row_lock_time_max_before' trick for
|
||||
# innodb_row_lock_time_max, because we can't reset it, and we don't know the
|
||||
# initial value at the moment of the test execution.
|
||||
SELECT variable_value > 100
|
||||
FROM information_schema.global_status
|
||||
WHERE LOWER(variable_name) = 'innodb_row_lock_time_max';
|
||||
SELECT variable_value > 100 FROM information_schema.global_status
|
||||
WHERE LOWER(variable_name) = 'innodb_row_lock_time_avg';
|
||||
|
||||
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS
|
||||
WHERE NAME="lock_row_lock_time";
|
||||
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS
|
||||
WHERE NAME="lock_row_lock_time_max";
|
||||
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS
|
||||
WHERE NAME="lock_row_lock_time_avg";
|
||||
SELECT count_reset > 100
|
||||
FROM INFORMATION_SCHEMA.INNODB_METRICS
|
||||
WHERE NAME='lock_row_lock_time';
|
||||
SELECT count_reset > 100
|
||||
FROM INFORMATION_SCHEMA.INNODB_METRICS
|
||||
WHERE NAME='lock_row_lock_time_max';
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--disable_warnings
|
||||
SET GLOBAL innodb_monitor_reset=default;
|
||||
SET GLOBAL innodb_monitor_enable=default;
|
||||
SET GLOBAL innodb_monitor_disable=default;
|
||||
SET GLOBAL innodb_monitor_reset_all=default;
|
||||
--enable_warnings
|
||||
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
Reference in New Issue
Block a user