首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大表在线DDL功能表的优化

大表在线DDL功能表的优化
EN

Database Administration用户
提问于 2020-02-16 09:51:59
回答 1查看 436关注 0票数 0

我在MySQL表上运行优化表,大小为340 is,存储引擎是InnoDB。

代码语言:javascript
复制
mysql> show variables like '%tmp%';
+----------------------------+------------------+
| Variable_name              | Value            |
+----------------------------+------------------+
| default_tmp_storage_engine | InnoDB           |
| innodb_tmpdir              |                  |
| max_tmp_tables             | 32               |
| slave_load_tmpdir          | /dbtmp/mysql_tmp |
| tmp_table_size             | 33554432         |
| tmpdir                     | /dbtmp/mysql_tmp |

tmpdir目录正在填充空间。

代码语言:javascript
复制
/dev/mapper/vgdbtmp-lvdbtmp
                      296G  231G   51G  83% /dbtmp

什么是优化表而不创建表副本的替代解决方案。

MySQL 5.6版本

代码语言:javascript
复制
mysql> select version();
+------------+
| version()  |
+------------+
| 5.6.46-log |
+------------+
1 row in set (0.01 sec)

我已经阅读了下面的MySQL链接。

https://mysqlserverteam.com/mysql-5-6-17-improved-online-optimize-table-for-innodb-and-partitioned-innodb-tables/

https://dev.mysql.com/doc/refman/5.6/en/optimize-table.html

Prior to Mysql 5.6.17, OPTIMIZE TABLE does not use online DDL. Consequently, concurrent DML (INSERT, UPDATE, DELETE) is not permitted on a table while OPTIMIZE TABLE is running, and secondary indexes are not created as efficiently.

但是,目前没有人在表上触发DDL/DML/select。

它应该在不创建表副本的情况下在线运行,对吗?

EN

回答 1

Database Administration用户

发布于 2020-09-01 23:33:36

  • OPTIMIZE TABLE对InnoDB几乎毫无用处。你为什么要运行它?
  • 有些人喜欢把磁盘分割成分区。但是,当另一个分区有空余空间时,这会导致一个分区溢出。你可以把tmpdir移动到更大的分区吗?
  • OPTIMIZE TABLE表必须复制表。ALTER TABLE的口味也是如此。因此,您必须有足够的空闲磁盘空间,与表在相同的FS中更好。
  • MySQL 8.0有一些“内联”或“就位”的ALTERs,在这里可能会有所帮助。
  • Percona的pt-online-schema-change避免了模式更改期间的阻塞写入。gh-ost也是。这些可能需要extas磁盘空间,因此可能与此无关。

这个故事的寓意..。不要让磁盘太满,以至于无法复制最大表的完整副本。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/259790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档