我在磁盘上有一个大表(70Go),只有9个Go空闲空间,我需要优化这个空间(“优化表.”)。
我已经更改了"tmpdir“参数,以便在另一个磁盘上创建具有足够空间的临时文件。
但是临时文件“#sql.”仍然是在位于表所在的mysql数据文件夹中创建的。
有没有办法告诉mysql在另一个磁盘上为“优化表”创建临时文件?
如果没有,是否将表传输到另一个磁盘的唯一解决方案,在那里运行“优化表”,然后替换旧的表文件?
下面是表的“显示表状态”返回的行:
Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
InnoDB 10 Compact 218780456 176 38628507648 0 18179555328 17278435328 290029517 2016-02-25 16:33:50 NULL NULL utf8_general_ci NULL发布于 2017-02-02 22:37:04
如果您已经从表中删除了大部分行,OPTIMIZE表只需要足够的空间来构建一个新的、更小的副本。复制完成后,它将重命名,然后删除旧表。
如果表有自己的表空间(用innodb_file_per_table=ON构建),那么释放的空间将返回给操作系统。但是..。.ibd中的17 in空闲不能用于表副本。副本将放在一个单独的文件中。因此,如果结果表大于8GB (data+index),则可能会失败。
如果是=OFF,则在增加文件大小之前,OPTIMIZE将尝试使用ibdata1中的空闲空间。
有17‘t免费的地方,我不知道在哪里。
另外,检查TABLE STATUS中的其他表。Data_free用于ibdata1中的所有表都是相同的值。这个值是多少?
在狭小的空间里工作有一些技巧,但我需要回答提出的问题。
https://dba.stackexchange.com/questions/163021
复制相似问题