2011-06-24 17 views
137

有沒有一種快速確定特定MySQL表佔用多少磁盤空間的方法?該表可能是MyISAM或Innodb。如何確定特定MySQL表佔用了多少磁盤空間?

+0

在PHPMyAdmin中,只需點擊ob表即可看到空間使用情況。 –

+0

這個問題的答案幫助我得到我的解決方案。徹底搜索一個工具,可以幫助我,而不用每次執行相同的查詢來獲取數據,使我通過[MONyog](https://www.webyog.com/product/monyog),[MySQL企業監視器](http ://www.mysql.com/trials/),[Percona工具包](https://www.percona.com/software/mysql-tools/percona-toolkit)。他們都提供了關於磁盤信息的詳細信息,但最終選擇了MONyog來獲得更好的圖形圖表和簡單的GUI。 – Mathew

回答

263

對於表mydb.mytable運行本作:

BYTES

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

KILOBYTES

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

MEGABYTES

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

GIGABYTES

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

GENERIC

下面是一個通用查詢,其中最大單元顯示爲TB(兆兆字節)

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; 

試試看!!!

+4

'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'的所有表的列表,按尺寸。 – guaka

+1

將「DESC」附加到ORDER BY子句以查看首先佔用更多磁盤空間的表。 ;) – mvsagar

+0

準確地說,當使用二進制前綴時,您可能需要調用單位ki ** bi **字節(KiB),me ** bi **字節(MiB)和gi ** bi **字節(GiB) (乘以2的冪)。或者,您可能希望使用小數前綴(乘以1000的冪),然後調用單位ki ** lo **字節(KB),me ** ga **字節(MB)和gi ** ga **字節(GB)。 查看更多:https://en.wikipedia.org/wiki/Binary_prefix –

0

How do I check how much disk space my database is using?

兩者您可以通過點擊數據庫名稱在左框架 和讀取尺寸表中那裏看着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'; 
+0

這個假設安裝了phpMyAdmin – thebigjc

0

也許你可以看看文件的大小相同的信息...

每個表存儲在幾個單獨的文件在命名爲您所謂的數據庫的文件夾內。這些文件夾存儲在mysql數據目錄中。

從那裏你可以做一個'du -sh。*'來獲得磁盤上表的大小。

+0

這隻適用於MyISAM數據庫。 OP要求提供與InnoDB協同工作的解決方案。 – Bgs

2

在Linux中默認安裝的MySQL:

[[email protected]]$ ls -lha /var/lib/mysql/<databasename> 

基於NIXCRAFT's mysql db location

+0

不會工作,如果使用innodb –

+0

問題是要問如何測量空間被某個特定的桌子佔用*。 – Flimm

+0

@ShariqueAbdullah如果你使用的是innodb_file_per_table,這不是默認的,但是我認爲它很常見和/或推薦(有人可以很容易證明我錯了,只是我的印象)。 – Seaux

1

基礎上RolandMySQLDBA的答案,我想我們可以用上面得到每個模式的尺寸表:

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

真的很喜歡它!

-1

我只想用「mysqldiskusage」工具,遵循SQL的

$ mysqldiskusage --server=user:[email protected] 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 
+0

OP詢問特定MySQL表的磁盤空間,而不是整個數據庫 – machineaddict

8

快一點,以獲得以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; 

希望對某人有用!

+1

非常有幫助!謝謝Ben! – aero

相關問題