1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-8297: information_schema.innodb_sys_tablestats.modified_counter doesn't change on UPDATE

Update modified-counter also if update effects non-indexed columns.
This commit is contained in:
Jan Lindström
2015-12-15 11:27:08 +02:00
parent e9b4a041af
commit 98c9fbfa21
5 changed files with 61 additions and 0 deletions

View File

@ -0,0 +1,20 @@
set global innodb_stats_auto_recalc=off;
CREATE TABLE t1 (i int) ENGINE=InnoDB;
SELECT NAME, STATS_INITIALIZED, NUM_ROWS, MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME = 'test/t1';
NAME STATS_INITIALIZED NUM_ROWS MODIFIED_COUNTER
test/t1 Initialized 0 0
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (2);
SELECT NAME, STATS_INITIALIZED, NUM_ROWS, MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME = 'test/t1';
NAME STATS_INITIALIZED NUM_ROWS MODIFIED_COUNTER
test/t1 Initialized 2 2
DELETE FROM t1 WHERE i = 1;
SELECT NAME, STATS_INITIALIZED, NUM_ROWS, MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME = 'test/t1';
NAME STATS_INITIALIZED NUM_ROWS MODIFIED_COUNTER
test/t1 Initialized 1 3
UPDATE t1 SET i = 4 WHERE i = 2;
SELECT NAME, STATS_INITIALIZED, NUM_ROWS, MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME = 'test/t1';
NAME STATS_INITIALIZED NUM_ROWS MODIFIED_COUNTER
test/t1 Initialized 1 4
DROP TABLE t1;
set global innodb_stats_auto_recalc=default;

View File

@ -0,0 +1 @@
--loose-innodb-sys-tablestats

View File

@ -0,0 +1,28 @@
-- source include/have_innodb.inc
#
# MDEV-8297: information_schema.innodb_sys_tablestats.modified_counter doesn't change on UPDATE
#
set global innodb_stats_auto_recalc=off;
CREATE TABLE t1 (i int) ENGINE=InnoDB;
SELECT NAME, STATS_INITIALIZED, NUM_ROWS, MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME = 'test/t1';
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (2);
SELECT NAME, STATS_INITIALIZED, NUM_ROWS, MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME = 'test/t1';
DELETE FROM t1 WHERE i = 1;
SELECT NAME, STATS_INITIALIZED, NUM_ROWS, MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME = 'test/t1';
UPDATE t1 SET i = 4 WHERE i = 2;
SELECT NAME, STATS_INITIALIZED, NUM_ROWS, MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME = 'test/t1';
DROP TABLE t1;
set global innodb_stats_auto_recalc=default;

View File

@ -1861,6 +1861,12 @@ run_again:
columns would not affect statistics. */
if (node->is_delete || !(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) {
row_update_statistics_if_needed(prebuilt->table);
} else {
/* Update the table modification counter even when
non-indexed columns change if statistics is initialized. */
if (prebuilt->table->stat_initialized) {
prebuilt->table->stat_modified_counter++;
}
}
trx->op_info = "";

View File

@ -1870,6 +1870,12 @@ run_again:
columns would not affect statistics. */
if (node->is_delete || !(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) {
row_update_statistics_if_needed(prebuilt->table);
} else {
/* Update the table modification counter even when
non-indexed columns change if statistics is initialized. */
if (prebuilt->table->stat_initialized) {
prebuilt->table->stat_modified_counter++;
}
}
trx->op_info = "";