首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动存档MariaDB10数据库表

自动存档MariaDB10数据库表
EN

Database Administration用户
提问于 2019-08-19 14:59:51
回答 1查看 171关注 0票数 0

我试图使用MariaDB10中的存储过程和事件自动归档活动数据库表以存档数据库表。以下是我要采取的步骤:

  1. 每天午夜前在归档数据库中创建新表。
  2. 将活动表中的行复制到存档表。
  3. 从活动表中删除所有行。

除了一个问题外,这似乎基本上奏效了。PLC每秒钟写一次活动数据库表。当发生上述过程时,存档表的最后一项与活动表的第一项之间存在2分钟的间隔(这意味着active表正在松散2分钟的数据,即120行)。根据我的理解,这2分钟的间隔是将行复制到arch表并从活动表中删除的时候。每天大约生成87K行(256 in )。

问题是如何减少这2分钟的间隔(行/数据丢失)?任何帮助或指示都会很有帮助。

我刚刚注意到,对于步骤2,我使用INSERT INTO with,这可能是锁定活动表的行,因此PLC无法将新行插入到active表中,从而松开了2分钟的数据/行。这是innoDB引擎。这个想法正确吗?如果是的话,有什么办法可以绕过它吗?

PS:我有仪表工程背景(和最少的DBA经验),我继承了这个PLC-MariaDB的设置。原始数据库没有索引,也没有自动存档发生.因此,当对DB执行任何查询时,DB的大小都在增加,并且会影响性能。我现在已经建立了数据库的索引,并执行自动存档。

EN

回答 1

Database Administration用户

发布于 2019-08-19 15:47:06

也许显而易见的解决方案是修改步骤3:不要只删除活动表中的所有行。相反,找到一个列,您可以使用它来指示这些行是新的还是旧的,而不是要复制到归档表/数据库的最近的行。

该列可以是例如用于主键列的整数,或者如果没有,则可能是时间戳列。

因此,与其删除每一行,不如执行以下操作:

代码语言:javascript
复制
DELETE FROM active_table WHERE id <= @maxIdThatWasArchived; 

或者类似于:

代码语言:javascript
复制
DELETE FROM active_table WHERE ts <= @maxTimeStampThatWasArchived; 
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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