Bla*_*uez 5 mysql mariadb ubuntu disk-space master-slave-replication
我们有一个应用程序,我们每隔几秒接收一次信息,我们将这些信息记录在一个称为事件的表中,该表目前重达 240 GB,这是迄今为止我们拥有的最大的。
前段时间我们删除了记录以保留特定日期的记录。不久前我们发现存储数据库的服务器正在填满磁盘,删除数百万条记录后,磁盘空间保持不变。
在网上搜索我们发现执行以下查询 ALTER TABLE tablename ENGINE = Innodb; 将释放已删除记录的已用空间。
但是我们遇到的问题是,由于我们有大于200G的表,所以该命令执行时间较长,导致新信息因阻塞而无法及时插入。
我们找到的选项如下:
有没有更优化的方法来释放空间,而不必取消我们的服务并且不会丢失信息?或者如果必须在最短的时间内完成?
此查询 ALTER TABLE tablename ENGINE = Innodb 知道它是否锁定表。
生产中的环境信息: Ubuntu Ubuntu 16.04.3 LTS mysql Distribution 10.1.21-MariaDB 所有表的类型均为 Engine = Inodb
非常感谢
InnoDB 表空间文件从不收缩是正确的。删除大量行后,大文件中可能会有未使用的空间,但该文件仍然占用文件系统上的大量空间。
缩小文件的唯一方法是将剩余数据复制到新的表空间,然后删除原始表空间。这就是您所描述的 ALTER 语句的作用。该声明的替代形式是:
ALTER TABLE <name> FORCE;
OPTIMIZE TABLE <name>;
Run Code Online (Sandbox Code Playgroud)
他们都做同样的事情。我喜欢带有 FORCE 的那个,因为我最清楚它在做什么。
将大量数据复制到新表空间需要很长时间,并且会在表运行时阻止对该表的访问。
我过去在一些工作中所做的就是使用免费工具pt-online-schema-change来运行此任务,而不会阻止对表的访问。事实上,它可能比直接运行 ALTER TABLE 花费的时间更长,但由于它不会阻止访问,因此不会导致中断,因此没有人会因为花费很长时间而感到不安。我们在比您描述的大得多的桌子上运行了这个程序,大到需要几天的时间才能完成。
您使用 MariaDB。我不知道,而且我个人也从未将 pt-online-schema-change 与 MariaDB 一起使用过。但我从其他用户那里了解到,它的工作原理是相同的,因为 MariaDB 与 MySQL 非常相似,因此 pt-online-schema-change 所需的功能是相同的。MariaDB 与 MySQL 不是同一个产品,但在这种情况下它已经足够接近了。
归档时间: |
|
查看次数: |
6173 次 |
最近记录: |