2014-03-26 22 views

Antwort

9
SELECT NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; 

Die SPACE werden 0 für die globalen Tabellen (ibdata1) und einige größere Anzahl für Datei-per-Tabelle Tabellen sein.

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


Da Sie MySQL 5.5, die obige Lösung verwenden wird nicht funktionieren. In MySQL 5.5 können Sie verwenden:

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

Wieder SPACE 0 für den globalen Tabellen ist und eine größere ganze Zahlen für Datei-per-Tabelle.

Mit dem Vorbehalt, dass es nur über Tabellen berichtet, die Seiten im Pufferpool haben. Wenn Sie keine Tabelle abgefragt haben, werden keine Seiten im Pufferpool-LRU vorhanden sein, und die Abfrage meldet kein Ergebnis für diese Tabelle. Die einzige andere Lösung besteht darin, ls im Datenverzeichnis zu verwenden. :-)

+1

bekommen Fehler 'ERROR 1109 (42S02): Unbekannte Tabelle 'INNODB_SYS_TABLES' in information_schema' –

+0

Es wurde in MySQL 5.6 und in Percona Server 5.1 eingeführt. –

+0

Hey ich will Lösung in 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

Dies sagt Ihnen nur, wenn die Einstellung aktiviert ist. Alle Tabellen, die vor dem Aktivieren von file_per_table erstellt wurden, befinden sich weiterhin im globalen Tabellenbereich. Meine Interpretation der Frage ist, dass sie wissen wollen, welche Tabellen tatsächlich ihre eigene Datei haben (sie wurden nach dem Aktivieren von file_per_table erstellt). – antriver