有时我得到一个错误,如“表被标记为损坏,应该被修复”。该DB (表)正在使用MyISAM。最近,这种情况一直在发生。可能的原因是什么?最近,我正在执行一个批量插入
INSERT INTO table (..., ..., ...) VALUES (...), (...), (...) ...
然后它就挂起来了。或者花了很长时间才完成,这在我看来是悬而未决的。第二天,当我检查该表时,它又被标记为损坏。当我尝试使用mysqlcheck -r时,当它到达那个“损坏的”表时,它再次挂在那里时,它显示所有的表都正常。
那么,我能做些什么来防止这种情况。以及可能的原因是什么。数据库是托管的第三方,我如何调试这个?
InnoDB是一个更可靠的引擎吗?我听说MyISAM更快,但也有人说InnoDB也可以更快,但它需要更多的优化。我是否可以得出结论,InnoDB更可靠,但即使进行了优化,总体上也会稍微慢一些?
发布于 2009-09-05 03:44:19
好的,所以问题是公司的数据库超出了托管公司允许的存储空间。所以很明显没有人告诉公司他们超出了使用量...我想是糟糕的主人吧。
顺便说一句,mysql怎么可能知道这件事呢?
发布于 2009-06-13 15:05:50
如果表损坏,可以使用repair table命令进行修复:
REPAIR TABLE table;如果您在服务器仍在运行时运行myisamchk (并且插入/选择正在命中表),这可能是损坏您的表的原因。我遇到的大多数损坏问题都是在服务器仍在运行的情况下尝试在服务器外部执行操作(复制文件等)。
对于只读数据库,InnoDB的速度较慢,因为它具有MyISAM遗漏的特性(符合ACID、行级锁定)。但是,如果您混合进行读和写操作,则InnoDB可以提供显著的性能改进,因为它不需要锁定整个表来进行写操作。你也不会遇到腐败问题。
发布于 2009-06-13 20:16:07
使用InnoDB。
https://stackoverflow.com/questions/990780
复制相似问题