Bug #35537 Innodb doesn't increment handler_update and handler_delete
Submitted: 24 Mar 2008 22:44 Modified: 13 Mar 16:41
Reporter: Eric Bergen (SCA)
Status: Closed
Category:Server: InnoDB Severity:S3 (Non-critical)
Version:4.1, 5.0, 5.1, 6.0 OS:Any
Assigned to: Calvin Sun Target Version:5.0+
Tags: Contribution, handler_update, handler_delete, v6
Triage: Triaged: D3 (Medium)

[24 Mar 2008 22:44] Eric Bergen
Description:
In ha_innodb.cc delete_row and update_row methods don't update handler statistics like
myisam and other storage engines do. This patch is a quick fix. I would rather see the
statistics management moved above the storage engine layer so this doesn't happen with
other engines in the future.

How to repeat:
mysql> create table t (t int) engine=innodb;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t set t=1;
Query OK, 1 row affected (0.00 sec)

mysql> show status like 'handler%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Handler_commit             | 10    |
| Handler_delete             | 0     |
| Handler_discover           | 0     |
| Handler_prepare            | 10    |
| Handler_read_first         | 2     |
| Handler_read_key           | 4     |
| Handler_read_next          | 0     |
| Handler_read_prev          | 0     |
| Handler_read_rnd           | 0     |
| Handler_read_rnd_next      | 62    |
| Handler_rollback           | 0     |
| Handler_savepoint          | 0     |
| Handler_savepoint_rollback | 0     |
| Handler_update             | 0     |
| Handler_write              | 67    |
+----------------------------+-------+
15 rows in set (0.00 sec)

mysql> delete from t where t = 1;
Query OK, 1 row affected (0.00 sec)

mysql> show status like 'handler%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Handler_commit             | 12    |
| Handler_delete             | 0     |
| Handler_discover           | 0     |
| Handler_prepare            | 12    |
| Handler_read_first         | 3     |
| Handler_read_key           | 6     |
| Handler_read_next          | 0     |
| Handler_read_prev          | 0     |
| Handler_read_rnd           | 0     |
| Handler_read_rnd_next      | 80    |
| Handler_rollback           | 0     |
| Handler_savepoint          | 0     |
| Handler_savepoint_rollback | 0     |
| Handler_update             | 0     |
| Handler_write              | 82    |
+----------------------------+-------+
15 rows in set (0.00 sec)

Suggested fix:
diff -urN mysql-5.0.51a-orig/sql/ha_innodb.cc mysql-5.0.51a/sql/ha_innodb.cc
--- mysql-5.0.51a-orig/sql/ha_innodb.cc 2008-01-11 06:43:39.000000000 -0800
+++ mysql-5.0.51a/sql/ha_innodb.cc      2008-03-24 14:29:46.000000000 -0700
@@ -3495,6 +3495,9 @@
        int             error = 0;

        DBUG_ENTER("ha_innobase::update_row");
+
+        statistic_increment(current_thd->status_var.ha_update_count,
+                           &LOCK_status);

        ut_ad(prebuilt->trx ==
                 (trx_t*) current_thd->ha_data[innobase_hton.slot]);
@@ -3578,6 +3581,9 @@

        DBUG_ENTER("ha_innobase::delete_row");

+        statistic_increment(current_thd->status_var.ha_delete_count,
+                           &LOCK_status);
+
        ut_ad(prebuilt->trx ==
                 (trx_t*) current_thd->ha_data[innobase_hton.slot]);
[24 Mar 2008 23:40] Sveta Smirnova
Thank you for the report.

Verified as described.

You can relay on Handler_commit value though.
[25 Mar 2008 17:29] Heikki Tuuri
Calvin,

please fix this in 5.1 and 6.0.

--Heikki
[14 Apr 2008 19:41] Eric Bergen
Taso Du Val wants me to note that he actually found the bug. I just fixed it. :)
[25 Apr 2008 21:26] Calvin Sun
Pushed into InnoDB 5.1 repository.
[14 May 2008 17:21] Bugs System
Pushed into 5.1.25-rc
[15 May 2008 3:19] Paul DuBois
Noted in 5.1.25 changelog.

InnoDB was not updating the Handler_delete or Handler_update status
variables. 

Setting report to Patch queued pending push into 6.0.x.
[15 May 2008 17:53] Paul DuBois
Setting report to Need Doc Info pending push into 6.0.x.
[19 May 2008 22:18] Paul DuBois
Setting report to Patch queued pending re-push of this patch.
[22 May 2008 11:50] Bugs System
Pushed into 6.0.6-alpha
[27 May 2008 20:33] Paul DuBois
The push into 5.1 was reverted, so there is no 5.1.x changelog entry.
[27 May 2008 20:39] Paul DuBois
The push into 6.0.x was a null merge that changed nothing. Resetting report to Patch
Approved pending further push of patch into 6.0.x.

The "parent" report for this set of bugs is Bug#32440.
[24 Jun 2008 23:49] Calvin Sun
Merged into 6.0.6-alpha, according to Tim. But the patch has not been pushed into 5.1
yet.
[25 Jun 2008 3:47] Paul DuBois
Noted in 6.0.6 changelog.

Setting report to Need Doc Info pending push into 5.1.x.
[5 Oct 2008 18:51] Jon Stephens
Hello,

Has this in fact been pushed to 5.1? May we please have the correct 3-part version number
for the 5.1 fix so we can document and close?

Thanks!
[13 Jan 23:54] Gary Pendergast
Could we get an update on this? Has the patched been pushed into 5.1 yet? Will it be
pushed into 5.0 as well?
[12 Mar 22:41] Paul DuBois
Noted in 5.1.31 changelog.

Setting report to NDI pending possible push into 5.0.x.
[13 Mar 16:41] Calvin Sun
Close the bug and there is no plan to push the fix into 5.0.