MySQL MYISAM并发问题有两个进程

时间:2009-04-29 09:31:15

标签: mysql myisam

我可能忽略了一些简单的事情,但我一直试图了解这里出现的问题几个星期,我需要一双新的眼睛。

我有一个处理Paypal付款通知的CGI应用程序。当有人订阅我实际上获得了订阅IPN,然后是支付IPN。 On就在另一个后面,所以我推出了两个CGI流程。我为每个创建了一个单独的日志,并且时间戳是相同的(对于时间戳的分辨率 - 秒)。

CGii应用程序旨在为新订户创建用户帐户,然后付款IPN将信息添加到新创建的帐户。很简单。

问题是第二个IPN无法找到该帐户。我认为这是因为它在第二个IPN寻找它时已经完成了创建,所以我将第二个IPN延迟了5秒。

现在,时间戳显示在第二个IPN开始查找之前,为第一个IPN创建帐户的函数已经返回,这意味着在发出第一个SELECT之前INSERT已完成。没有运气。

我想知道它是否是缓存问题: http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html 但我不这么认为。

我在这里根本没有使用TRANSACTIONS,但是在第二次发出SELECT之前我还没有释放第一个CGI应用程序的句柄,但这并不重要。我想我可以尝试发一个我可能忽略了一些简单的东西,但我一直试图了解这里出了什么问题几周,我需要一双新的眼睛。

我有一个处理Paypal付款通知的CGI应用程序。当有人订阅我实际上获得了订阅IPN,然后是支付IPN。 On就在另一个后面,所以我推出了两个CGI流程。我为每个创建了一个单独的日志,并且时间戳是相同的(对于时间戳的分辨率 - 秒)。

CGii应用程序旨在为新订户创建用户帐户,然后付款IPN将信息添加到新创建的帐户。很简单。

问题是第二个IPN无法找到该帐户。我认为这是因为它在第二个IPN寻找它时已经完成了创建,所以我将第二个IPN延迟了5秒。

现在,时间戳显示在第二个IPN开始查找之前,为第一个IPN创建帐户的函数已经返回,这意味着在发出第一个SELECT之前INSERT已完成。没有运气。

我想知道它是否是缓存问题: http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html 但我不这么认为。

我没有使用TRANSACTIONS,但我没有尝试在INSERT之后发出COMMIT。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

MYISAM表不支持交易,所以它不会成为问题。没有任何代码可以看,它老实说听起来像你的第二个查询使用错误的ID。除了时间戳之外你还记录什么?我会记录整个查询并确保id对应,第二个查询正在寻找正确的记录。也许尝试仅使用SQL手动重现这种情况,并在测试查询时将脚本保留在其中。