我的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表。
是否有任何方法可以调试计算没有正确更新值的原因,或者有任何方法可以减少样本量?
1条答案
按热度按时间dfuffjeb1#
在MariaDB Server 10.6.7发布后,该领域的两个错误已被修复。MDEV-27805修复了可能导致统计数据重新计算丢失的竞争条件。MDEV-28327改进了批量加载数据到空表后统计数据的自动计算。我建议升级到MariaDB Server 10.6.12或更高版本。