MySQL的数据库大小可以用
SELECT table_schema AS db_name, SUM(data_length + index_length) AS size
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema != 'INFORMATION_SCHEMA'
GROUP BY db_name
但是您也可以通过查看数据目录的磁盘使用情况来计算数据库大小。这两个数字应该偏离吗?有没有理由使用其中一种方法?通过扩展,INFORMATION_SCHEMA.TABLES
'data_length
和是如何index_length
计算的?
好吧,似乎有两种表现偏差的方式,
使用(默认)查询时的统计
innodb_stats_on_metadata
信息会强制更新统计信息(如果未缓存)。您可以将其关闭,但这样做需要您进行GLOBAL
更改。从文档:缓存,否则似乎
INFORMATION_SCHEMA
正在从Table_statistics::get_stat
. 这似乎记录在information_schema_stats_expiry
. 但似乎您也可以使用ANALYZE
table (文档提到)和testing suite刷新缓存。所以缓存可以漂移那么多秒。我没有看到任何其他文档或代码中让我相信存在差异的内容。