用于优化分区 MySQL 表的磁盘使用情况
Posted
技术标签:
【中文标题】用于优化分区 MySQL 表的磁盘使用情况【英文标题】:Disk usage for optimizing a partitioned MySQL-Table 【发布时间】:2015-11-11 03:13:56 【问题描述】:我有一个包含 300 万行的大型 MyISAM 表,由于每行中有 10KB 的 blob,因此大小为 31 GB。该表已经有 30 个分区。我想优化表,因为我要删除包含一些旧数据的行并调整 blob 的大小。 我的问题是关于优化时的磁盘使用情况:
如果我对整个表进行优化,mysql 是否会逐步遍历分区并一次只优化一个分区,因此只需要一个小分区的额外空间?或者我是否必须优化一个或几个分区,以便在优化时不会有太多额外的磁盘空间。
【问题讨论】:
大概,this会给你答案,简要说明;partition
优化有 separate 命令,因此,很可能,明显的 optimize table
将为整个表保留空间,而不是为每个分区保留空间
【参考方案1】:
仅优化 s 大小约为 1 GB 的分区只需要几秒钟,而且我看不到任何大量磁盘使用情况。
【讨论】:
【参考方案2】:(我的回答假设 InnoDB。即使我过于悲观,“解决方案”应该适用于 MyISAM。)
对于 InnoDB,请记住 innodb_file_per_table
的问题。
OPTIMIZE
将构建整个表的副本。
解决方案:如果空间紧张,可以一次优化一个分区
ALTER TABLE REORGANIZE PARTITION ...
( INTO PARTITION ... );
是的,您需要一次为一个分区构建...
,并一次执行一个。
(不要做OPTIMIZE PARTITION
,那会优化整个表格。)
您想详细说明一下您的桌子是什么样的吗?我可能想劝你不要进行分区,或者劝你采用不同的分区方式。
【讨论】:
以上是关于用于优化分区 MySQL 表的磁盘使用情况的主要内容,如果未能解决你的问题,请参考以下文章