通过数据库计算磁盘空间使用量的最快方法是什么?我应该只看文件系统吗?有没有可以加快information_schema的方法?
#1 楼
有3种情况。如果使用MyISAM,最简单的方法是查看文件系统并使用
du -sh /var/lib/mysql/database
。使用du -sh
回答。这是近似值,因为ibdata1文件中仍然存储了一些数据,因此您的经验不足。此技术还适用于混合的MyISAM / InnoDB(innodb_file_per_table
)数据库。如果您使用的是不带
innodb_file_per_table set
的InnoDB,那么您将需要查看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)
如果您有很多表,则可能会很慢,就像您已经发现的那样。
#2 楼
您可以使用以下命令来获取GB中的信息:有关更多详细信息,请参见Aaron Brown的答案。或包括自由/可回收空间,请使用:
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)
可使用优化表回收空间InnoDB,MyISAM和ARCHIVE表的命令。
另请参阅如何获取MySQL数据库的真实大小?有关更多详细信息。
#3 楼
为了让我看到磁盘空间被用完了(无论它是否在mysql表中),我使用了可信任的“ du”命令。这是我发现所有空间都被占用的地方的一个示例。/ mysql
该文件夹保存数据表。为了查看哪些表占用了所有空间,您可以使用“ human”或“ -h”选项像这样继续进行。我喜欢以这种方式进行磁盘空间管理,因为有时您甚至不知道密码或用户,甚至无法登录mysql。
$ sudo du -cks /* | sort -rn
954881224 total
945218092 /mysql
5299904 /usr
1781376 /opt
1166488 /var
671628 /home
343332 /run
213400 /root
93476 /lib
30784 /boot
20652 /etc
15940 /bin
13708 /sbin
12388 /tmp
24 /mnt
16 /lost+found
4 /srv
4 /snap
4 /media
4 /lib64
0 /vmlinuz
0 /sys
0 /proc
0 /initrd.img
0 /dev
您可以看到,所有存放着许多GiG数据的表都在占用所有空间。希望这可以帮助。
#4 楼
要获取有关表名及其记录数的信息,可以使用以下查询,SELECT *
FROM information_schema.TABLES ;
获取有关服务器上数据库及其信息的信息各自的大小,可以使用下面的查询,
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;
#5 楼
我会在您的数据字典中查找文件的大小。警告是即时而准确的。警告:根据存储引擎,索引存储在主文件中或其他文件中,如果需要,请不要忘记对其进行汇总。
评论
是的,那是哪里?
–镁
2014-12-10 13:24
#6 楼
我知道这很旧了,但是有人会发现这很相关。只是一个估计值。我将此输出与:
SELECT concat(table_schema) 'Database Name',
concat(round(SUM(data_length/power(1024,3)),2),'G') DATA,
concat(round(SUM(index_length/power(1024,3)),2),'G') 'INDEX',
concat(round(SUM(data_free/power(1024,3)),2),'G') 'DATA FREE',
concat(round(sum(data_free)/(SUM(data_length+index_length))*100,2)) '% FRAGMENTED',
concat(round(SUM(data_length+index_length)/power(1024,3),2),'G') TOTAL
FROM information_schema.TABLES
WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')
GROUP BY table_schema;
希望对您有帮助
#7 楼
最佳(执行apt-get install ncdu
之后):cd "/var/lib/mysql" && ncdu
获取VPS中Mysql数据库的所有总大小。
#8 楼
假设您的MySQL主机在Linux上运行。您可以执行以下查询,找到存储MySQL数据的路径
select @@datadir;
pre >
一旦知道了数据的存储位置,就可以使用du
命令检查磁盘使用情况。
例如在Ubuntusudo du -h /var/lib/mysql
上。 />来源:检查Linux在MySQL上使用的存储
评论
我在其他地方看到选项3没有考虑VARCHAR大小。
–乔
15年4月21日在10:48