Eva*_*gas 5 mysql innodb mysql-5.5 percona-tools percona-toolkit
我继承了一个 MySQL InnoDB 表,它包含大约 200 GB 的数据,以及几个大约 500 GB 的不需要的索引。我已经在场外存档了大约 75% 的记录并从我的表中删除了这些记录,并希望回收表中的空间。我想知道我是否需要大约 200 GB 的可用空间来回收空间,或者接近 700 GB。
innodb_file_per_table 已开启。
MySQL 版本是 5.5。
我正在考虑运行 OPTIMIZE TABLE(例如从表中删除行后恢复磁盘空间)或使用 Percona Toolkit 的在线模式更改(例如http://www.percona.com/blog/2013/09/25/how-to -reclaim-space-in-innodb-when-innodb_file_per_table-is-on/)。我更愿意做后者,因为我可以避免写锁,但如果需要相当大的空间差异,我会使用 OPTIMIZE TABLE。
我是否需要接近 200 GB 或接近 700 GB 的可用空间才能从 InnoDB 回收空间?如果接近 700GB,如果我首先将表转换为 MyISAM(例如http://www.percona.com/blog/2014/08/21/the-mysql-ibdata1-disk-space-issue -and-big-tables-part-1/)?
感谢您的帮助!
SELECT FORMAT(SUM(data_length+index_length)/POWER(1024,3),2) InnoDB_DiskSpace
FROM information_schema.tables
WHERE engine='InnoDB';
Run Code Online (Sandbox Code Playgroud)
SELECT
IFNULL(tbl,'Total') table_name,
FORMAT(SUM(table_bytes)/POWER(1024,3),2) table_size
FROM
(
SELECT table_name tbl,SUM(data_length+index_length)table_bytes
FROM information_schema.tables WHERE table_schema='mydb
GROUP BY table_name WITH ROLLUP
) A ORDER BY ISNULL(tbl) DESC,table_bytes;
Run Code Online (Sandbox Code Playgroud)
SELECT FORMAT(SUM(data_length+index_length)/POWER(1024,3),2) Table_Diskspace
FROM information_schema.tables
WHERE table_schema='mydb;
AND table_name='mytable';
Run Code Online (Sandbox Code Playgroud)
这些查询将告诉您任何表、数据库和引擎需要多少空间。
如果您想模拟OPTIMIZE TABLE只是为了查看磁盘空间使用情况,请运行以下步骤mydb.mytable
use mydb
CREATE TABLE mytable_new LIKE mytable;
INSERT INTO mytable_new SELECT * FROM mytable;
ANALYZE TABLE mytable_new;
SELECT FORMAT(SUM(data_length+index_length)/POWER(1024,3),2) Table_Diskspace
FROM information_schema.tables
WHERE table_schema='mydb;
AND table_name='mytable_new';
#
# Stop Here. If you are happy with the size, do the last two commands
# If you prefer, drop table mytable_new and do do the online schema change
#
RENAME TABLE mytable TO mytable_old,mytable_newTO mytable;
DROP TABLE mytable_old;
Run Code Online (Sandbox Code Playgroud)
这样做可以让您知道.ibd运行后文件有多大OPTIMIZE TABLE。
请不要将表转换为 MyISAM。它将构建两个文件(.MYD和.MYI)。然后,您尝试再次转换为 InnoDB。它本质上与doing相同#SUGGESTION #1。由于没有适当的恢复过程,MyISAM 也更容易出现损坏。
无论如何,如果您的数据是实时的,您可以继续使用pt-online-schema-change 。我的答案只是为您提供查询来估计表的大小以及OPTIMIZE TABLE.
如果您在下班时间执行此操作,请尝试我的帖子从表中删除行后恢复磁盘空间
| 归档时间: |
|
| 查看次数: |
5004 次 |
| 最近记录: |