我目前正在使用 information_schema.TABLES 来计算按数据库名称分组的总磁盘空间使用量,但它运行得非常缓慢。在拥有数百个数据库的服务器上,计算可能需要几分钟时间。
按数据库计算磁盘空间使用情况的最快方法是什么?我应该只看文件系统吗?有没有加速information_schema的方法?
Aar*_*own 58
有3种情况。
du -sh /var/lib/mysql/database
.du -sh
. 它是近似的,因为ibdata1文件中还有一些数据存储,所以你会有点偏低。这种技术也适用于混合 MyISAM/InnoDB ( innodb_file_per_table
) 数据库。innodb_file_per_table set
,那么您将需要查看 INFORMATION_SCHEMA。在上述任何一种情况下,您都可以运行以下查询来获取您要查找的信息。
mysql> select table_schema, sum((data_length+index_length)/1024/1024) AS MB from information_schema.tables group by 1;
+--------------------+-----------------+
| table_schema | MB |
+--------------------+-----------------+
| prod | 298025.72448921 |
| information_schema | 0.00781248 |
| maatkit | 70.77330779 |
| mysql | 0.66873168 |
| test | 4752.31449127 |
+--------------------+-----------------+
5 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
如果您有大量的表,它可能会很慢,正如您已经发现的那样。
小智 8
您可以使用此命令获取以 GB 为单位的信息:
mysql> select table_schema "DB name (table_schema)",
sum((data_length+index_length)/1024/1024/1024) AS "DB size in GB" from
information_schema.tables group by table_schema;
+-------------------------------------+-----------------+
| table_schema DB name (table_schema) | DB size in GB |
+-------------------------------------+-----------------+
| prod | 29.72448921 |
| information_schema | 0.00781248 |
| miscDB | 0.77330779 |
| mysql | 0.66873168 |
| test | 47.31449127 |
+-------------------------------------+-----------------+
5 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
改编了Aaron Brown的答案以提供以 GB 为单位的大小。有关更多详细信息,请参阅Aaron Brown 的回答。
或包含免费/可回收空间,请使用:
mysql> SELECT table_schema "database name",
sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
sum( data_free )/ 1024 / 1024 "free reclaimable space in MB"
FROM information_schema.TABLES
GROUP BY table_schema;
+--------------------+---------------+------------------------------+
| DB name | DB size in GB | free/reclaimable space in GB |
+--------------------+---------------+------------------------------+
| prod | 1.26 | 0.03 |
| information_schema | 38.77 | 3.75 |
| miscDB | 0.00 | 0.00 |
| mysql | 0.00 | 0.00 |
| test | 0.00 | 0.00 |
+--------------------+---------------+------------------------------+
Run Code Online (Sandbox Code Playgroud)
可以使用OPTIMIZE TABLE 命令为 InnoDB、MyISAM 和 ARCHIVE 表回收空间。
另请参阅如何获取 MySQL 数据库的真实大小? 更多细节。
归档时间: |
|
查看次数: |
100495 次 |
最近记录: |