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:
@ -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;
|
@ -0,0 +1 @@
|
||||
--loose-innodb-sys-tablestats
|
28
mysql-test/suite/innodb/t/innodb-stats-modified-counter.test
Normal file
28
mysql-test/suite/innodb/t/innodb-stats-modified-counter.test
Normal 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;
|
@ -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 = "";
|
||||
|
@ -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 = "";
|
||||
|
Reference in New Issue
Block a user