您如何确定特定的MySQL表占用多少磁盘空间?


145

有没有一种快速的方法来确定特定的MySQL表占用了多少磁盘空间?该表可以是MyISAM或Innodb。


在PHPMyAdmin中,您只需单击ob表即可查看空间使用情况。
AR。

这个问题的答案帮助我获得了解决方案。对工具的彻底搜索使我无需每次都执行相同的查询即可获得数据,这使我不得不使用MONyogMySQL Enterprise MonitorPercona工具包。它们确实提供了磁盘信息的详细信息,但最终选择了MONyog以获得更好的图形图表和简单的GUI。
Mathew

Answers:


285

对于表,请mydb.mytable运行以下命令:

字节

SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

基洛比

SELECT (data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

兆字节

SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

技嘉

SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

一般

这是一个通用查询,其中最大单位显示为TB(TeraBytes)

SELECT 
    CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE,
    CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE,
    CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE
FROM
(
    SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
    FROM 
    (
        SELECT data_length DAT,index_length NDX,data_length+index_length TBL,
        FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px,
        FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py,
        FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz
        FROM information_schema.tables
        WHERE table_schema='mydb'
        AND table_name='mytable'
    ) AA
) A,(SELECT 'B KBMBGBTB' units) B;

试试看 !!!


6
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;获取mydb具有名称和大小(按大小排序)的所有表的列表。
kqw

1
将“ DESC”附加到ORDER BY子句中,可以先查看消耗更多磁盘空间的表。;)
mvsagar

确切地说,在使用二进制前缀(乘以2的幂)时,您可能需要调用单位ki bi字节(KiB),me bi字节(MiB)和gi bi字节(GiB)。或者,您可能要使用十进制前缀(乘以1000的幂),然后调用单位ki lo字节(KB),me ga字节(MB)和gi ga字节(GB)。查看更多:en.wikipedia.org/wiki/Binary_prefix
马顿陶

有人知道如何在MSSQL中执行相同的操作吗?
伊万·尤琴科

@RolandoMySQLDBA,您能在这个stackoverflow.com/questions/47976837/
davidb

15

快速掌握SQL,可以获取以MB为单位的前20大表。

SELECT table_schema, table_name,
  ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb
FROM information_schema.tables
ORDER BY tablesize_mb DESC LIMIT 20;

希望这对某人有用!



2

在默认情况下安装了mysql的linux中:

[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>

基于NIXCRAFT的mysql数据库位置


问题是要问如何衡量特定桌子占用的空间。
Flimm 2014年

@ShariqueAbdullah如果您使用的是innodb_file_per_table(这不是默认设置),则可以使用,但我认为它非常普遍和/或推荐(有人可以轻易证明我对此有误,仅是我的印象)。
Seaux

@Seaux,也许可以,但是我没有发现它在我经历过的任何推荐的服务器设置中都被使用过。因此,您可能是对的,但由于不是默认设置,因此他可能找不到。另外,我认为与MyISAM相比,innodb函数有很大不同。因此,即使您拥有文件大小,它的准确性也可能不如MyISAM。但是您是对的,这可能是一种解决方案。我个人更喜欢使用MySQL命令来获取此信息,而不是测量文件大小。
Sharique Abdullah 2014年

2

基于RolandMySQLDBA的答案,我认为我们可以使用上面的方法来获取表中每个模式的大小:

SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb 
    FROM information_schema.tables GROUP BY table_schema;

真的很喜欢!


0

您也许可以看一下文件的大小...

每个表都存储在一个文件夹内的几个单独文件中,该文件夹名为您所说的数据库。这些文件夹存储在mysql数据目录中。

从那里,您可以执行'du -sh。*'以获取磁盘上表的大小。


这仅适用于MyISAM数据库。OP要求一种也可与InnoDB一起使用的解决方案。
Bgs 2013年

0

取自如何检查数据库正在使用多少磁盘空间?

您可以通过phpMyAdmin在控制面板中通过单击左侧框架中的数据库名称并在右侧框架中读取其中的表的大小来检查MySQL表的大小。

下面的查询也将有助于获得相同的信息 bytes

select SUM(data_length) + SUM(index_length) as total_size 
from information_schema.tables 
where table_schema = 'db_name' 
and table_name='table_name';

这假定已安装phpMyAdmin
thebigjc

-1

我只用如下的“ mysqldiskusage ”工具

$ mysqldiskusage --server=user:password@localhost mydbname
# Source on localhost: ... connected.

# Database totals:
+------------+----------------+
| db_name    |         total  |
+------------+----------------+
| mydbaname  | 5,403,033,600  |
+------------+----------------+

Total database disk usage = 5,403,033,600 bytes or 5.03 GB

OP要求特定MySQL表而不是整个数据库的磁盘空间
machineaddict
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.