我有一个名为requests
的MySQL表。它发展得如此之快。目前,它有300万行。另外,当前的表引擎是“ InnoDB”。
几天前,我收到此错误:
错误1114(HY000):表已满
通过将其添加到MySQL配置中,我已经解决了这个问题(我猜是暂时的):
innodb_data_file_path = ibdata1:10M:autoextend
但是有时候我的发球会掉下来,我必须重新启动才能使用。最近,我将该桌子空了,摆脱了掉下去的麻烦。
但是很快就会充满。知道如何解决该问题吗?我应该为该表使用其他引擎吗?我应该使用压缩的类型行吗?还是什么?
请注意,有时我需要从该表中进行选择,并且它在列上有一个索引(除pk之外)
答案 0 :(得分:1)
您受到磁盘空间的限制。您必须注意这一点并采取行动,然后才能达到“满桌”状态。
如果将数据存储在MyISAM表中,则可以花两倍的时间才能获取“表已满”。如果您只是简单地写入磁盘文件(无数据库,无查询等),则可以在“磁盘已满”之前再进行一些压缩。
您需要“清除”旧数据吗?这样,您就可以继续接收新数据,而无需触及“表已满”。最好的方法是通过InnoDB和PARTITION BY RANGE(TO_DAYS(...))
。如果清除一个月以上的任何东西,请使用每日分区。例如,对于90天,请使用每周分区。更多讨论:http://mysql.rjweb.org/doc.php/partitionmaint
您将如何处理数据?分析一下吗?搜索一下?您打算进行哪些SQL查询?回答那些;可能还有其他提示。