MyISAM表变得腐败

时间:2009-06-13 14:32:00

标签: mysql innodb myisam

有时我会收到一个错误,例如“表被标记为已损坏并且需要修复”。 DB(表)正在使用MyISAM。最近这种情况一直在发生。可能是什么原因?最近我正在执行批量插入

INSERT INTO table (..., ..., ...) VALUES (...), (...), (...) ...

它只是挂了。或花了很长时间才完成它似乎挂在我身上。第二天,当我检查表时再次被标记为腐败。当我尝试使用mysqlcheck -r它表示所有表格都可以,当它到达那个“腐败”的表时它又挂在那里......

所以,我该怎么做才能防止这种情况发生。可能是什么原因。数据库是托管第三方,我该如何调试?

InnoDB是一个更可靠的引擎吗?我听说MyISAM速度更快但其他人说InnoDB也很快,但优化它需要更多。我可以得出结论,InnoDB更可靠,但即使在优化的情况下总体上也会变慢吗?

3 个答案:

答案 0 :(得分:3)

如果表损坏,可以使用repair table命令修复它们:

 REPAIR TABLE table;

如果在服务器仍在运行时运行myisamchk(并且插入/选择正在访问表),则可能是破坏表的原因。我遇到的大多数腐败问题都是在服务器外部进行操作(复制文件等)时仍在运行。

InnoDB对于只读数据库来说速度较慢,因为它具有MyISAM遗漏的功能(符合ACID,行级锁定)。但是,如果您正在混合使用读取和写入,则根据混合情况,InnoDB可以提供严重的性能改进,因为它不必锁定整个表来执行写入操作。您也不会遇到腐败问题。

答案 1 :(得分:1)

使用InnoDB。

答案 2 :(得分:0)

好的,问题是该公司的数据库超出了托管公司允许的存储空间。所以显然没有人告诉公司他们超出了使用范围......我猜是糟糕的主人。

顺便说一下,没有办法让mysql知道abt这个吗?