Details
-
Bug
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
-
10.5.17, 10.6.17, 10.11.7, 11.5.1
-
Ubuntu Linux 22.04, n.a.
Description
When I provoke ONE deadlock the Innodb_deadlocks status counter is increase by TWO. This oversubscribes the number of deadlocks happening in a mariadb database.
Documentation states: Total number of InnoDB deadlocks.
https://mariadb.com/kb/en/innodb-status-variables/#innodb_deadlocks
So IMHO it should be 1 and not 2.
Reproducible:
SQL> SHOW GLOBAL STATUS LIKE '%dead%';
|
+------------------+-------+
|
| Variable_name | Value |
|
+------------------+-------+
|
| Innodb_deadlocks | 0 |
|
+------------------+-------+
|
|
Session 1> START TRANSACTION;
|
Session 2> START TRANSACTION;
|
Session 1> UPDATE test SET data = 'bla' WHERE id = 2;
|
Session 2> UPDATE test SET data = 'bla' WHERE id = 1524;
|
Session 1> UPDATE test SET data = 'bla' WHERE id = 1524;
|
Session 2> UPDATE test SET data = 'bla' WHERE id = 2;
|
|
SQL> SHOW GLOBAL STATUS LIKE '%dead%';
|
+------------------+-------+
|
| Variable_name | Value |
|
+------------------+-------+
|
| Innodb_deadlocks | 2 |
|
+------------------+-------+
|
Table:
CREATE TABLE `test` ( |
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, |
`data` varchar(128) DEFAULT NULL, |
`ts` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), |
PRIMARY KEY (`id`) |
);
|
Data:
INSERT INTO test SELECT NULL, 'Some data', NOW(); |
INSERT INTO test SELECT NULL, 'Some data', NOW() FROM test; |
...
|
Attachments
Issue Links
- blocks
-
MDEV-20043 Innodb_deadlocks status counter
-
- Closed
-
- relates to
-
MDEV-33937 Innodb_deadlocks status variable counts wrong
-
- Open
-
Activity
Field | Original Value | New Value |
---|---|---|
Link |
This issue blocks |
Description |
When I provoke ONE deadlock the Innodb_deadlocks status counter is increase by TWO. This oversubscribes the number of deadlocks happening in a mariadb database.
Documentation states: Total number of InnoDB deadlocks. https://mariadb.com/kb/en/innodb-status-variables/#innodb_deadlocks So IMHO it should be 1 and not 2. Reproducible: SQL> SHOW GLOBAL STATUS LIKE '%dead%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_deadlocks | 0 | +------------------+-------+ SQL> START TRANSACTION; -- Session 1 SQL> UPDATE test SET data = 'bla' WHERE id = 2; SQL> UPDATE test SET data = 'bla' WHERE id = 1524; SQL> START TRANSACTION; -- Session 2 SQL> UPDATE test SET data = 'bla' WHERE id = 1524; SQL> UPDATE test SET data = 'bla' WHERE id = 2; SQL> SHOW GLOBAL STATUS LIKE '%dead%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_deadlocks | 2 | +------------------+-------+ Table: CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `data` varchar(128) DEFAULT NULL, `ts` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`) ); Data: INSERT INTO test SELECT NULL, 'Some data', NOW(); INSERT INTO test SELECT NULL, 'Some data', NOW() FROM test; ... |
When I provoke ONE deadlock the Innodb_deadlocks status counter is increase by TWO. This oversubscribes the number of deadlocks happening in a mariadb database.
Documentation states: Total number of InnoDB deadlocks. https://mariadb.com/kb/en/innodb-status-variables/#innodb_deadlocks So IMHO it should be 1 and not 2. Reproducible: {noformat} SQL> SHOW GLOBAL STATUS LIKE '%dead%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_deadlocks | 0 | +------------------+-------+ SQL> START TRANSACTION; -- Session 1 SQL> UPDATE test SET data = 'bla' WHERE id = 2; SQL> UPDATE test SET data = 'bla' WHERE id = 1524; SQL> START TRANSACTION; -- Session 2 SQL> UPDATE test SET data = 'bla' WHERE id = 1524; SQL> UPDATE test SET data = 'bla' WHERE id = 2; SQL> SHOW GLOBAL STATUS LIKE '%dead%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_deadlocks | 2 | +------------------+-------+ {noformat} Table: {code:sql} CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `data` varchar(128) DEFAULT NULL, `ts` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`) ); {code} Data: {code:sql} INSERT INTO test SELECT NULL, 'Some data', NOW(); INSERT INTO test SELECT NULL, 'Some data', NOW() FROM test; ... {code} |
Assignee | Thirunarayanan Balathandayuthapani [ thiru ] |
Link | This issue relates to MDEV-33937 [ MDEV-33937 ] |
Description |
When I provoke ONE deadlock the Innodb_deadlocks status counter is increase by TWO. This oversubscribes the number of deadlocks happening in a mariadb database.
Documentation states: Total number of InnoDB deadlocks. https://mariadb.com/kb/en/innodb-status-variables/#innodb_deadlocks So IMHO it should be 1 and not 2. Reproducible: {noformat} SQL> SHOW GLOBAL STATUS LIKE '%dead%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_deadlocks | 0 | +------------------+-------+ SQL> START TRANSACTION; -- Session 1 SQL> UPDATE test SET data = 'bla' WHERE id = 2; SQL> UPDATE test SET data = 'bla' WHERE id = 1524; SQL> START TRANSACTION; -- Session 2 SQL> UPDATE test SET data = 'bla' WHERE id = 1524; SQL> UPDATE test SET data = 'bla' WHERE id = 2; SQL> SHOW GLOBAL STATUS LIKE '%dead%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_deadlocks | 2 | +------------------+-------+ {noformat} Table: {code:sql} CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `data` varchar(128) DEFAULT NULL, `ts` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`) ); {code} Data: {code:sql} INSERT INTO test SELECT NULL, 'Some data', NOW(); INSERT INTO test SELECT NULL, 'Some data', NOW() FROM test; ... {code} |
When I provoke ONE deadlock the Innodb_deadlocks status counter is increase by TWO. This oversubscribes the number of deadlocks happening in a mariadb database.
Documentation states: Total number of InnoDB deadlocks. https://mariadb.com/kb/en/innodb-status-variables/#innodb_deadlocks So IMHO it should be 1 and not 2. Reproducible: {noformat} SQL> SHOW GLOBAL STATUS LIKE '%dead%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_deadlocks | 0 | +------------------+-------+ Session 1> START TRANSACTION; Session 2> START TRANSACTION; Session 1> UPDATE test SET data = 'bla' WHERE id = 2; Session 2> UPDATE test SET data = 'bla' WHERE id = 1524; Session 1> UPDATE test SET data = 'bla' WHERE id = 1524; Session 2> UPDATE test SET data = 'bla' WHERE id = 2; SQL> SHOW GLOBAL STATUS LIKE '%dead%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_deadlocks | 2 | +------------------+-------+ {noformat} Table: {code:sql} CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `data` varchar(128) DEFAULT NULL, `ts` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`) ); {code} Data: {code:sql} INSERT INTO test SELECT NULL, 'Some data', NOW(); INSERT INTO test SELECT NULL, 'Some data', NOW() FROM test; ... {code} |
Assignee | Thirunarayanan Balathandayuthapani [ thiru ] | Sergei Golubchik [ serg ] |
Fix Version/s | 10.5 [ 23123 ] | |
Fix Version/s | 10.6 [ 24028 ] |
Status | Open [ 1 ] | Confirmed [ 10101 ] |
Status | Confirmed [ 10101 ] | In Progress [ 3 ] |
Assignee | Sergei Golubchik [ serg ] | Marko Mäkelä [ marko ] |
Status | In Progress [ 3 ] | In Review [ 10002 ] |
Priority | Major [ 3 ] | Critical [ 2 ] |
Fix Version/s | 10.6.19 [ 29833 ] | |
Fix Version/s | 10.11.9 [ 29834 ] | |
Fix Version/s | 11.1.6 [ 29835 ] | |
Fix Version/s | 11.2.5 [ 29836 ] | |
Fix Version/s | 11.4.3 [ 29837 ] | |
Fix Version/s | 11.5.2 [ 29838 ] | |
Fix Version/s | 10.5 [ 23123 ] | |
Fix Version/s | 10.6 [ 24028 ] | |
Resolution | Fixed [ 1 ] | |
Status | In Review [ 10002 ] | Closed [ 6 ] |