我是 mysql 新手,不确定是否有办法计算 mysql 表空间/磁盘空间的百分比利用率。我知道 mysql 不提供上限或可用空间(如 Oracle DB),而只是索引表和数据表所占用的空间。我决定将这两个值相加,然后除以 mysql 的“datadir”属性中提到的挂载点可用的总空间。我的查询是:
- 这是正确的做法吗?
- 如果在不同的挂载点上创建数据库/表会怎么样?那么有没有办法监视 mysql 实例的可用空间?
答案1
此查询将返回表名及其拥有的记录数。
SELECT
TABLE_SCHEMA AS `Database`,
TABLE_NAME AS `Table`,
TABLE_ROWS AS `Rows`
FROM
information_schema.TABLES ;
此查询将返回服务器上的数据库 wrt 大小 */
SELECT
TABLE_SCHEMA AS `Database`,
SUM((data_length + index_length) / (1024 * 1024)) AS `Database_Size`
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY `Database_Size` DESC
LIMIT 5 ;
答案2
您可以尝试使用这个查询:
select
TABLE_SCHEMA,
TABLE_NAME,
(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 AS SIZE
from information_schema.TABLES
但您会注意到此大小小于磁盘上 *.ibd 和 *.frm 文件的总和。这是因为当您从表中删除行时,数据不会从文件中删除。要清理 *.ibd 文件,您必须运行查询:
optimize table table_name
对此最好的解决方案是检查每个表的文件大小并与磁盘大小进行比较。