mariadb mysql.innodb-table-stats-and mysql.innodb-index-stats没有正确更新

cuxqih21  于 2023-04-20  发布在  Mysql
关注(0)|答案(1)|浏览(100)

我的DB表面临一个奇怪的问题,在MariaDB 10.6.7中,它的索引和表统计数据没有自动更新值
这个表有超过十亿条记录。在查询表的统计信息时,我看不到任何自动计算的表的统计信息,直到我们重新启动mysql或ANALYZE TABLE。
一旦触发,我们就可以看到在此表中计算和更新的索引值

127.0.0.1:3307> SELECT * FROM mysql.innodb_table_stats ;
+---------------+-------------------------------------+---------------------+---------+----------------------+--------------------------+
| database_name | table_name                          | last_update         | n_rows  | clustered_index_size | sum_of_other_index_sizes |
+---------------+-------------------------------------+---------------------+---------+----------------------+--------------------------+
| DB            |   TableStats#P#p2023_04_11_13_00_00 | 2023-04-11 12:00:11 |       0 |                    1 |                        0 |
| DB            |   TableStats#P#p2023_04_11_14_00_00 | 2023-04-11 13:00:10 |       0 |                    1 |                        0 |
| DB            |   TableStats#P#p2023_04_11_15_00_00 | 2023-04-11 14:00:04 |       0 |                    1 |                        0 |
| DB            |   TableStats#P#p2023_04_11_16_00_00 | 2023-04-11 15:00:04 |       0 |                    1 |                        0 |
+---------------+-------------------------------------+---------------------+---------+----------------------+--------------------------+
127.0.0.1:3307> SELECT * FROM mysql.innodb_index_stats;
+---------------+-------------------------------------+------------+---------------------+--------------+------------+-------------+------------------------------------------------------------+
| database_name | table_name                          | index_name | last_update         | stat_name    | stat_value | sample_size | stat_description                                           |
+---------------+-------------------------------------+------------+---------------------+--------------+------------+-------------+------------------------------------------------------------+
| DB            |   TableStats#P#p2023_04_11_16_00_00 | PRIMARY    | 2023-04-11 15:00:04 | n_diff_pfx01 |          0 |           1 | AgentId                                                    |
| DB            |   TableStats#P#p2023_04_11_16_00_00 | PRIMARY    | 2023-04-11 15:00:04 | n_diff_pfx02 |          0 |           1 | AgentId,rackNr                                             |
| DB            |   TableStats#P#p2023_04_11_16_00_00 | PRIMARY    | 2023-04-11 15:00:04 | n_leaf_pages |          1 |        NULL | Number of leaf pages in the index                          |
| DB            |   TableStats#P#p2023_04_11_16_00_00 | PRIMARY    | 2023-04-11 15:00:04 | size         |          1 |        NULL | Number of pages in the index                               |
+---------------+-------------------------------------+------------+---------------------+--------------+------------+-------------+------------------------------------------------------------+

根据文档https://mariadb.com/kb/en/innodb-persistent-statistics/,启用innodb_stats_auto_recalc参数应该自动更新索引值,这对我来说并没有发生,即使更改是10%的行在几天内受到影响。
这同样适用于其他负载较低的DB表。
是否有任何方法可以调试计算没有正确更新值的原因,或者有任何方法可以减少样本量?

dfuffjeb

dfuffjeb1#

在MariaDB Server 10.6.7发布后,该领域的两个错误已被修复。MDEV-27805修复了可能导致统计数据重新计算丢失的竞争条件。MDEV-28327改进了批量加载数据到空表后统计数据的自动计算。我建议升级到MariaDB Server 10.6.12或更高版本。

相关问题