我们的Web服务器将一些跟踪信息写入MySQL数据库(使用INSERT DELAYED到MyISAM表中)。 当在这个表上执行一个巨大的SELECT查询或者由于其他原因而被locking时,Web服务器进程(使用INSERT DELAYED)正在等待数据库,并且在某些情况下MaxPlanet的限制在Apaches中到达,所以它们将停止服务请求。
我们使用INSERT DELAYED,因为
INSERT语句的DELAYED选项是对标准SQL的MySQL扩展,如果您的客户端不能或不需要等待INSERT完成,那么它非常有用。 当您使用MySQL进行日志logging时,这是一种常见的情况,并且您还会定期运行需要很长时间才能完成的SELECT和UPDATE语句。
从MySQL文档引用。
我想知道为什么Apache进程正在等待INSERT DELAYED完成。 我可以做些什么来发送数据,并忘记它。 (因为这是日志logging数据,我不在乎是否丢失了一些条目。)即使表被locking,PHP脚本也应该继续,不应该等待MySQL的回答。
(我们不想为这个表设置主从,但是我们正在考虑将这些数据移到一些NoSQL数据库,但是现在我想知道为什么INSERT DELAYED没有按预期工作。)
这听起来像你正在做正确的事情来得到你想要的,而你所描述的是它应该工作的方式。 思考: