![]() |
1
1
试试 mysql reference manual 用于诊断和解决。听起来像是在缓存。一个可能的原因是许多客户机同时命中表,试图创建“第一个版本”(即点击“if empty insert”)。也许你可以添加一个伪随机延迟或者协调创建者,这样你就不会有很多并发的对数据库的创建调用了? 编辑:你看到了吗 this 第页?似乎您需要将my.cnf设置为使用innodb禁用每个表锁。不过,我主要建议的是,您的测试可能不具有代表性,因为它可能包含比实际情况高得多的编写者百分比。如果您用一个空表启动100个线程,它们都会在创建时立即阻塞(甚至可能为相同的值)。这比在平均情况下要糟糕得多,在这种情况下,您可以更好地分散密钥、更少的遗漏和更高的读取百分比。如果这是预期的行为(即您将使此行为处于活动状态),我建议在create语句中添加一个退避策略。 |
![]() |
2
0
您需要一次执行一个请求,所以可能停止使用该非阻塞驱动程序。或者实现自己的阻塞机制。在继续下一个之前,请等待一个完成。 你没有说过这是不合理的,或者你出于某种原因需要这些东西这么快地向前发展。 |
![]() |
3
0
我正在更改我的答案,以反映问题已被修订。现在听起来这只是并发插入的问题,而不是对查找行为的依赖。 据我所知,innodb对插入进行行锁定,您不能关闭它。但是,您[编辑]不能使用插入延迟。我刚读到InnoDB上没有这个。 http://dev.mysql.com/doc/refman/5.0/en/insert-delayed.html 也许所有写操作周围的显式锁表都会覆盖默认的锁行为。如果在写事件发生的时间间隔内,表上没有其他操作,则这可能有效。 |