我目前正在使用 information_schema.TABLES 来计算按数据库名称分组的总磁盘空间使用量,但它的运行速度非常慢。在拥有数百个数据库的服务器上,计算可能需要几分钟时间。
按数据库计算磁盘空间使用量的最快方法是什么?我应该只看文件系统吗?有没有加快信息模式的方法?
我目前正在使用 information_schema.TABLES 来计算按数据库名称分组的总磁盘空间使用量,但它的运行速度非常慢。在拥有数百个数据库的服务器上,计算可能需要几分钟时间。
按数据库计算磁盘空间使用量的最快方法是什么?我应该只看文件系统吗?有没有加快信息模式的方法?
有3种情况。
du -sh /var/lib/mysql/database
.du -sh
. 这是近似值,因为 ibdata1 文件中还存储了一些数据,所以您会有点偏低。这种技术也适用于混合的 MyISAM/InnoDB (innodb_file_per_table
) 数据库。innodb_file_per_table set
,则需要查看 INFORMATION_SCHEMA。在上述任何情况下,您都可以运行以下查询来获取您要查找的信息。
如果您有大量的表,它可能会很慢,正如您已经发现的那样。
您可以使用此命令以 GB 为单位获取信息:
改编了Aaron Brown的答案以提供以 GB 为单位的大小。有关更多详细信息,请参阅Aaron Brown 的回答。
或者要包括免费/可回收空间,请使用:
对于 InnoDB、MyISAM 和 ARCHIVE 表,可以使用OPTIMIZE TABLE 命令回收空间。
另请参阅如何获取 MySQL 数据库的真实大小? 更多细节。
为了让我查看磁盘空间在哪里被用完(不管它是否在 mysql 表中),我使用了我可信赖的“du”命令。这是我找到所有空间被吃掉的地方的一个例子。
您可以看到该文件夹正在使用大部分空间。/mysql
该文件夹包含数据表。为了查看哪些表占用了所有空间,您可以使用“human”或“-h”选项进行这样的操作。我喜欢以这种方式进行磁盘空间管理,因为有时您甚至无法登录 mysql,因为您不知道密码或用户。
您可以看到所有空间都被几个包含许多 GiG 数据的表占用。希望这可以帮助。
要获取有关表名和记录数的信息,可以使用以下查询,
要获取服务器上具有各自大小的数据库的信息,可以使用以下查询,
我知道这很旧,但有人可能会觉得这很相关。
在 MySQL 中,我使用:
由于我的数据库是 InnoDB,这只是一个估计。
我将此输出与:
希望这可以帮助你
我会在您的数据字典中查找文件的大小。它的瞬时和准确。
警告:根据存储引擎,索引存储在主文件或另一个文件中,如果需要,不要忘记汇总它们。
最好的(做完之后
apt-get install ncdu
):获取 VPS 中 Mysql 数据库的所有总大小。
假设您的 MySQL 主机在 Linux 上运行。
您可以执行下面的查询来找到存储 MySQL 数据的路径
一旦知道数据存储在哪里,就可以使用
du
命令检查磁盘使用情况。例如在 Ubuntu 上
sudo du -h /var/lib/mysql
。你会得到这样的东西
来源:检查 MySQL 在 linux 上使用的存储