快速数据档案在MySQL中使用分区空间约束一直是没完没了的和艰苦的过程对我们许多人来说,尤其是在系统有大量的事务和数据增长超过数百GBs在几天内。在这个博客中,我将分享一个解决方案来消除这种空间和从表中删除行几秒钟无论大小的表不会造成任何额外的数据库上的负载使用表分区。

第一种方法为删除行,任何人的思想是在SQL中使用删除查询。假设,一个想要从一个表中删除行,比一个查询等操作是这样的:

上面的查询非常简单但有几个事项:

  • 服务器业务将呈现指数级增长,可能会影响服务器上通常的交通。
  • 加快上面的查询我们需要创建一个适当的索引,查询可以最小执行时间和减少对服务器性能的影响。
  • 如果我们使用binlog_format行,大量本日志将被创建可能阻塞I / O服务器和需要额外的清理。
  • 即使删除所有的行,空间不会被释放。MySQL不会缩小表空间和存储不会被释放到文件系统。释放文件系统,我们需要重新创建表通过运行分析或改变。

为了解决这个问题的方法之一是使用Percona雷竞技下载官网pt-archiver。有一个优秀的博客你可以遵循mysql数据档案的破坏最小。但文档过程需要时间,因为它还考虑系统负载,副本滞后和指定参数节流归档过程不影响正在进行的交通。

我在这里提出的是使用MySQL分区,这是一种更快的方法。

分区是什么?

在MySQL中,InnoDB存储引擎一直支持表空间和MySQL服务器的概念,甚至引入分区前,可以配置为使用不同的物理目录来存储不同的数据库。分区将这个概念进一步,允许用户保存的部分表根据用户定义的规则。用户选择规则的数据可分为称为分区功能,这可能是一个简单的规则对一组范围或值列表,一个内部哈希函数,或一个线性哈希函数。

当我们分区表数据文件是跨越多个分区较小的数据文件。操作我们针对特定范围的数据,不会影响整个表只有一个数据文件是感动。

没有分区的表:

表分区:

分区将如何帮助在快速删除行和释放空间?

档案旧分区表中的数据,我们将创建一个空表,是相同的原始表的结构,但不像原始表有多个分区。创建这个表之后我们将交换新创建的空表的原始表的分区在几秒钟。

在这个例子中,我们使用一个表分区的基础上一个日期范围。

这个表的大小大约是105 GB。

我们将创建一个表,分区表相同,但我们会从这个新创建的表删除分区。

在这个时刻,这个分区表的所有数据,占用空间在文件系统。

空间保留的文件系统:

交换分区,我们需要执行一个查询,需要元数据锁在桌子上,几乎瞬间完成。

由于此操作需要元数据锁和非常快,它是建议在低流量运行这个操作时间。

交换后,新表的所有数据分区的分区表是空的。

空间释放文件系统:

现在,您可以继续降低交换表没有锁定的主要表或也可以使用这种技术来加速下降:加快你的MySQL表下降

结论

我们所做的是使用MySQL partitioning-related函数来回答客户的挑战清除数据比x天。但是,分区不是一刀切的解决方案,分区有自己的警告。如果有很多二级索引表和搜索查询不仅限于分区键,查询性能恶化可能成倍增长。如果分区表不是一个选择,pt-archiver是一个伟大的工具,它会自动删除语句在数据库以最小的监控。raybet雷竞技竞猜在线官网

进一步的参考:

https://dev.mysql.com/doc/refman/5.7/en/partitioning.html

https://dev.mysql.com/doc/refman/5.7/en/partitioning-management-exchange.html

想要存档表吗?使用Pe雷竞技下载官网rcona工具包pt-archiver

订阅
通知的
客人

0评论
内联反馈
查看所有评论