Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-33935

Innodb_deadlocks status variable counts wrong

Details

    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

          Activity

            oli Oli Sennhauser created issue -
            oli Oli Sennhauser made changes -
            Field Original Value New Value
            serg Sergei Golubchik made changes -
            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}
            serg Sergei Golubchik made changes -
            Assignee Thirunarayanan Balathandayuthapani [ thiru ]
            oli Oli Sennhauser made changes -
            TheLinuxJedi Andrew Hutchings (Inactive) made changes -
            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}
            serg Sergei Golubchik made changes -
            Assignee Thirunarayanan Balathandayuthapani [ thiru ] Sergei Golubchik [ serg ]
            serg Sergei Golubchik made changes -
            Fix Version/s 10.5 [ 23123 ]
            Fix Version/s 10.6 [ 24028 ]
            serg Sergei Golubchik made changes -
            Status Open [ 1 ] Confirmed [ 10101 ]
            serg Sergei Golubchik made changes -
            Status Confirmed [ 10101 ] In Progress [ 3 ]
            serg Sergei Golubchik made changes -
            Assignee Sergei Golubchik [ serg ] Marko Mäkelä [ marko ]
            Status In Progress [ 3 ] In Review [ 10002 ]
            serg Sergei Golubchik made changes -
            Priority Major [ 3 ] Critical [ 2 ]
            marko Marko Mäkelä made changes -
            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 ]

            People

              marko Marko Mäkelä
              oli Oli Sennhauser
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.