2014-03-26 57 views

回答

9
SELECT NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; 

SPACE爲0,爲全球表空間(ibdata1中)和文件的每個表的表空間更大一些數字。

http://dev.mysql.com/doc/refman/5.6/en/innodb-sys-tables-table.html


既然你正在使用MySQL 5.5,上述方案將無法工作。在MySQL 5.5中,你可以使用這個:

SELECT DISTINCT TABLE_NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU 
WHERE TABLE_NAME IS NOT NULL AND TABLE_NAME NOT LIKE 'SYS%'; 

再次,空間爲0,爲全球的表空間,併爲文件每個表的整數。

需要注意的是,它只報告緩衝池中有頁面的表。如果您尚未查詢表,則緩衝池LRU中將沒有頁面,查詢將不會報告該表的任何結果。

唯一的另一種解決方案是在數據目錄中使用ls。 :-)

+1

得到錯誤'ERROR 1109(42S02):在information_schema' –

+0

未知表 'INNODB_SYS_TABLES' 這是在MySQL 5.6和Percona的服務器5.1引入的。 –

+0

嘿,我想MySQL 5.5中的解決方案 –

31
mysql> show variables like 'innodb_file_per_table'; 
+-----------------------+-------+ 
| Variable_name   | Value | 
+-----------------------+-------+ 
| innodb_file_per_table | ON | 
+-----------------------+-------+ 
1 row in set (0.00 sec) 
+4

這只是告訴你,如果設置啓用。在啓用file_per_table之前創建的任何表仍將位於全局表空間中。 我對這個問題的解釋是他們想知道哪些表實際上有它們自己的文件(它們是在啓用file_per_table後創建的)。 – antriver

相關問題