Mysql:使用自动增量主键重复键错误

时间:2014-04-03 13:40:44

标签: mysql sql

我有一个表'记录',其中我们记录了访客记录。我们一天有1400万的综合浏览量,因此我们在一天内插入1400万条记录,下午流量最高。从某天开始,我们面临着重复键输入'id'的问题,根据我不应该这样,因为 id是自动增量字段,我们没有在插入查询中显式传递id 。以下是详细信息

logging (MyISAM)
----------------------------------------
| id                 | int(20)         |
| virtual_user_id    | varchar(1000)   |
| visited_page          | varchar(255) |
| /* More such columns are there */    |
----------------------------------------

请告诉我这里有什么问题。在这里将表格保留在MyISAM中是一个问题。

1 个答案:

答案 0 :(得分:3)

问题1:主键大小

http://dev.mysql.com/doc/refman/5.0/en/integer-types.html

INT的最大大小,无论您给出的大小是2147483647,如果是无符号,则是两倍。 这意味着你每153天就会遇到一个问题。

为了防止您可能希望将数据类型更改为unsigned bigint。 或者对于甚至更加可笑的大卷甚至是unix时间戳+ microtime作为复合键。或者完全不同的数据库解决方案。

问题2:实际错误

它可能是并发性的,即使我没有发现它非常合理。 您必须为此提供插入ID /错误。你使用交易吗?

另一种可能性是腐败的表格。 不知道你的mysql版本,但这可能有效:

CHECK TABLE tablename

看看是否有任何抱怨。

REPAIR TABLE tablename

一般建议:

这是一个合理数量的数据要插入到数据库中,并且它无论如何都不会减慢一切的速度吗? 我想知道你的数据库在锁定期间如何执行锁定,以及在删除期间所有数据库,例如alter table。

完成这项工作的正确方法完全取决于我不了解的系统目标和要求,但这里有一个想法:

将日志行记录到日志中。在我们自己的时间导入日志文件。当您的数据库遇到问题或需要执行一些锁定所有操作的大型操作时,不要让访问者因错误或延迟而烦恼。