用于优化分区 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 表的磁盘使用情况的主要内容,如果未能解决你的问题,请参考以下文章

常用的MySQL数据库优化方法

千万级别数据量mysql优化策略

MySQL数据库性能优化之分区分表分库

Mysql优化-分区

MySQL优化:分区

数据库mysql的学习