我试图使用MariaDB10中的存储过程和事件自动归档活动数据库表以存档数据库表。以下是我要采取的步骤:
除了一个问题外,这似乎基本上奏效了。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的大小都在增加,并且会影响性能。我现在已经建立了数据库的索引,并执行自动存档。
发布于 2019-08-19 15:47:06
也许显而易见的解决方案是修改步骤3:不要只删除活动表中的所有行。相反,找到一个列,您可以使用它来指示这些行是新的还是旧的,而不是要复制到归档表/数据库的最近的行。
该列可以是例如用于主键列的整数,或者如果没有,则可能是时间戳列。
因此,与其删除每一行,不如执行以下操作:
DELETE FROM active_table WHERE id <= @maxIdThatWasArchived; 或者类似于:
DELETE FROM active_table WHERE ts <= @maxTimeStampThatWasArchived; https://dba.stackexchange.com/questions/245682
复制相似问题