MySQL 不自动更新information_schema,除非我手动运行ANALYZE TABLE myTable

MySQL 不自动更新information_schema,除非我手动运行ANALYZE TABLE myTable

在本文中,我们将介绍MySQL中的information_schema和ANALYZE TABLE命令。同时,我们将讨论在MySQL中如何解决信息_schema不自动更新的问题。

阅读更多:MySQL 教程

什么是information_schema?

information_schema是MySQL中的一个数据库,它包含了当前MySQL实例中所有数据库、表、列、索引等对象的元数据信息。使用information_schema,我们可以轻松地获取有关这些对象的详细信息,比如表的行数、索引的数量等等。

information_schema提供了查询视图和表的方式,这些查询可以用来从元数据中提取所需的信息。

为什么information_schema要更新?

更新information_schema非常重要,因为它会影响到许多MySQL管理和监控工具的操作效果。如果information_schema中的数据被过时或不准确,这不仅会干扰MySQL服务器的基本操作,还会导致错误的查询计划、不必要的锁定和内存泄漏等一系列问题。

在MySQL中,更新information_schema有两种方式:

1.定期自动更新

MySQL会自动更新information_schema,但这个过程不是实时的。默认情况下,MySQL会把information_schema的数据每隔固定时间写入一个内存表(也就是“全局记录日志(GRL)”表),然后定期以固定频率flush到磁盘上对应的元数据文件里。这样做的好处是即使MySQL崩溃,information_schema的数据也不会丢失。

2.手动更新

除此之外,我们也可以手动更新information_schema。这可以通过使用ANALYZE TABLE命令来实现。

ANALYZE TABLE是MySQL的一个命令,用于分析并更新表或分区的索引和统计信息。 这有助于MySQL优化器更好地理解表的数据并选择更好的查询计划,此外它也可以确保information_schema中的数据和实际表数据同步。

ANALYZE TABLE `myTable`;
SQL

在这个例子中,我们手动更新名为“myTable”的表,并在information_schema中更新它的元数据。在没有崩溃或其它异常情况的情况下,靠这个方法手动更新information_schema通常不会有太大问题。但是,这种需要手动更新的方式也会带来一些繁琐和不安全的问题。如果我们有成百上千个表需要更新,那么手动操作可能会让我们感到非常繁琐。

如何解决information_schema不自动更新的问题?

当我们发现MySQL没有自动更新information_schema时,我们应该检查以下几个原因:

1. MySQL配置问题

首先,我们应该检查MySQL的配置文件(my.cnf或my.ini)中是否启用了全局日志记录功能。如果没有启用,MySQL在更新information_schema时不会写入日志。通过修改配置文件,可以将GRL文件保存在不同的文件夹或磁盘分区中,这样会更加安全。以下是如何检查和设置GRL的相关配置:

[mysqld]
# 启用全局日志记录功能
global_record_logs=ON

# GRL文件保存路径(默认在MySQL数据文件夹中)
global_record_log_dir=/var/log/mysql/
Ini

2. MySQL优化器的配置问题

当MySQL优化器发现缺乏充足的统计信息时,它会使用默认的统计信息来生成执行计划。这样可能会带来计划性能瓶颈,尤其是对于大型表或高并发查询的场景,解决办法是手动更新。

3. 数据库被锁定

当MySQL执行大量DDL操作,或者在备份、恢复、刷新、优化等过程中,会产生一些锁定操作,这可能会导致information_schema无法更新。因此,在进行这些操作时,我们应该谨慎并避免锁定database schema。

4. 数据库表被锁定

当一个表被锁定时,它的元数据信息可能在information_schema视图中受到影响。这也会导致我们发现information_schema没有自动更新的问题。因此,我们需要确保任何表锁都始终与相应的表更新操作同步。

总结

在MySQL中,information_schema是元数据信息库,提供有关MySQL实例中所有数据库、表、列、索引等对象的详细信息。当information_schema不自动更新时,我们应该首先检查MySQL是否正确配置,并避免因其他原因导致的数据库或表的锁定。如果information_schema不自动更新,请使用ANALYZE TABLE命令手动更新表的元数据信息。通过这些方法,我们可以维护和更新information_schema,以确保我们在MySQL中获得准确、详细的信息,并帮助我们更好地管理和操作我们的数据库。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册