MySQL5.6开始可以使用独立表空间, innodb_file_per_table=1
2016-10-20 15:58
716 查看
MySQL5.6开始可以使用独立表空间:
MySQL5.6
innodb_file_per_table=1 #使用独立表空间,动态参数。(5.6默认OFF,5.7默认ON)
1、drop/truncate table方式操作表空间能自动回收(磁盘空间)
1)、创建procedure,循环insert一定量数据 ##use test ##drop procedure pro1;
DELIMITER // create procedure pro1() begin declare i int; set i=1; while i<100000 do insert into test.cc(id,name) values(i, "aa"); set i=i+1; end while; end;//
2)、调用procedure : mysql> call pro1();
3)、查看表大小、数据量: select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows from information_schema.tables where table_schema='test' and table_name='CC';
+------------+------------+------------+ | table_name | total_mb | table_rows | +------------+------------+------------+ | cc | 3.51562500 | 100246 | +------------+------------+------------+ 1 row in set (0.31 sec)
4)、truncate清表: mysql> truncate table test.cc; Query OK, 0 rows affected (0.73 sec)
5)、再次查看表空间已经回收:
cc.ibd 由 11264KB 回收到96KB 。
mysql> select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows -> from information_schema.tables where table_schema='test' and table_name='CC'; +------------+------------+------------+ | table_name | total_mb | table_rows | +------------+------------+------------+ | cc | 0.01562500 | 0 | +------------+------------+------------+ 1 row in set (0.00 sec)
mysql>
mysql> select version(); +------------+ | version() | +------------+ | 5.7.11-log | +------------+ 1 row in set (0.08 sec)
mysql>
注:drop table test.cc ; 物理文件cc.ibd也会同时被删除。
2、独立表空间下,可以自定义表的存储位置,(有时将部分热表放在不同的磁盘可有效地提升IO性能)
create table test(id int) data directory='c:/software'; create table test1(id int,name varchar(20),primary key (id)) data directory='c:/software';
3、独立表空间下,可以回收表空间碎片(比如一个非常大的delete操作之后释放的空间)
1)创建测试表
DELIMITER // create procedure pro_test1() begin declare i int; set i=1; while i<10000 do insert into test.test1(id,name) values(i, "aa"); set i=i+1; end while; end;//
##call pro_test1();
表大小:test1.ibd 368KB
2)delete后表大小: mysql> delete from test1; test1.ibd 384KB
3)回收表空间 mysql> alter table test1 engine=innodb; test1.ibd 96KB
mysql> select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows from information_schema.tables where table_schema='test' and table_name='TEST1';
+------------+------------+------------+
| table_name | total_mb | table_rows |
+------------+------------+------------+
| test1 | 0.01562500 | 0 |
+------------+------------+------------+
1 row in set (0.00 sec)
1、drop/truncate table方式操作表空间能自动回收(磁盘空间)
1)、创建procedure,循环insert一定量数据 ##use test ##drop procedure pro1;
DELIMITER // create procedure pro1() begin declare i int; set i=1; while i<100000 do insert into test.cc(id,name) values(i, "aa"); set i=i+1; end while; end;//
2)、调用procedure : mysql> call pro1();
3)、查看表大小、数据量: select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows from information_schema.tables where table_schema='test' and table_name='CC';
+------------+------------+------------+ | table_name | total_mb | table_rows | +------------+------------+------------+ | cc | 3.51562500 | 100246 | +------------+------------+------------+ 1 row in set (0.31 sec)
4)、truncate清表: mysql> truncate table test.cc; Query OK, 0 rows affected (0.73 sec)
5)、再次查看表空间已经回收:
cc.ibd 由 11264KB 回收到96KB 。
mysql> select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows -> from information_schema.tables where table_schema='test' and table_name='CC'; +------------+------------+------------+ | table_name | total_mb | table_rows | +------------+------------+------------+ | cc | 0.01562500 | 0 | +------------+------------+------------+ 1 row in set (0.00 sec)
mysql>
mysql> select version(); +------------+ | version() | +------------+ | 5.7.11-log | +------------+ 1 row in set (0.08 sec)
mysql>
注:drop table test.cc ; 物理文件cc.ibd也会同时被删除。
2、独立表空间下,可以自定义表的存储位置,(有时将部分热表放在不同的磁盘可有效地提升IO性能)
create table test(id int) data directory='c:/software'; create table test1(id int,name varchar(20),primary key (id)) data directory='c:/software';
3、独立表空间下,可以回收表空间碎片(比如一个非常大的delete操作之后释放的空间)
1)创建测试表
DELIMITER // create procedure pro_test1() begin declare i int; set i=1; while i<10000 do insert into test.test1(id,name) values(i, "aa"); set i=i+1; end while; end;//
##call pro_test1();
表大小:test1.ibd 368KB
2)delete后表大小: mysql> delete from test1; test1.ibd 384KB
3)回收表空间 mysql> alter table test1 engine=innodb; test1.ibd 96KB
mysql> select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows from information_schema.tables where table_schema='test' and table_name='TEST1';
+------------+------------+------------+
| table_name | total_mb | table_rows |
+------------+------------+------------+
| test1 | 0.01562500 | 0 |
+------------+------------+------------+
1 row in set (0.00 sec)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27126919/viewspace-2126817/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/27126919/viewspace-2126817/
相关文章推荐
- MySQL Server参数优化 - innodb_file_per_table(独立表空间)
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- 【MySQL】InnoDB 引擎独立表空间 innodb_file_per_table
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- MySQL Server参数优化 - innodb_file_per_table(独立表空间)
- MySQL 参数- Innodb_File_Per_Table(独立表空间)
- InnoDB 引擎独立表空间 innodb_file_per_table
- InnoDB 引擎独立表空间 innodb_file_per_table
- InnoDB 引擎独立表空间 innodb_file_per_table
- [转]mysql在已有无分区表增加分区,mysql5.5才有,可以是innodb_file_per_table关闭状态.
- InnoDB 引擎独立表空间 innodb_file_per_table
- InnoDB 引擎独立表空间 innodb_file_per_table
- InnoDB 引擎独立表空间 innodb_file_per_table
- mysql在已有无分区表增加分区,mysql5.5才有,可以是innodb_file_per_table关闭状态.
- InnoDB 引擎独立表空间 innodb_file_per_table
- InnoDB 引擎独立表空间 innodb_file_per_table