2009-07-25 16 views
0

私は、mysql(5.0.51a-3ubuntu5.4-log)に接続しているubuntuで実行されているcプログラムを持っています。削除された行が再表示されます

プログラムの主なタスクは、小さな(< 5000行)myisamテーブルのレコードを処理することです。行が正常に処理されると、その行は削除されます。そうでない場合は、後日再試行されます。試行に失敗した後、その試行は削除されます。この削除ではテーブルの主キーが使用され、明示的であるため、low_priority、quickまたはignoreは指定されません。 プログラムは、読み取りと書き込みに別々の接続を使用します。

処理が必要な行について、次回のポーリングによって削除されたレコードが返されることがあります。これは、再試行の制限に達したために削除された行にのみ発生します。より驚くべきことに、次のポーリングは何も返されず、それ以降のポーリングは削除された行を返します。

これは、読み取りと書き込みに異なる接続を使用することに関連していますか?私は、myisamが削除のためにテーブルロックを使用していたと考えて以来、すべての接続によってすぐに尊重される削除を期待していました。

答えて

1

「トランザクション」問題のような疑いがあると思われます。削除直後に明示的にコミットした場合、何が起こるか試しましたか?