21

我想检查是否使用 查询为每个数据库表innodb_file_per_table设置(即创建)。.ibdMYSQL-5.5

有什么办法吗?

4

2 回答 2

61
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)
于 2015-06-19T12:28:54.250 回答
21
SELECT NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;

全局表SPACE空间 (ibdata1) 将为 0,而 file-per-table 表空间则为更大的数字。

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%';

同样,对于全局表空间,SPACE 为 0,对于每个表的文件,SPACE 为更大的整数。

需要注意的是,它只报告在缓冲池中有页面的表。如果您还没有查询过某个表,那么它在缓冲池 LRU 中将没有任何页面,并且查询不会报告该表的任何结果。

唯一的其他解决方案是ls在数据目录中使用。:-)

于 2014-03-26T04:53:23.667 回答