挿入、更新、読み取りが頻繁に行われるテーブル (InnoDB) があります (通常、数ミリ秒間隔でバーストします)。INSERT/UPDATE に続く SELECT ステートメントが古いデータを取得する場合があることに気付きました。これはキャッシュが原因だとSQL_NO_CACHE
思いますが、前に置いた後は実際には何もしません。
前の INSERT/UPDATE が終了するまで SELECT が常に待機し、キャッシュからデータを取得しないようにするにはどうすればよいでしょうか? これらのステートメントは、(同じコード実行内ではなく) 別の要求から実行されることに注意してください。
多分私は SQL_NO_CACHE が実際に何をするのか誤解しています...
更新:
@Uday、INSERT、SELECT、およびUPDATEステートメントは次のようになります。
INSERT myTable (id, startTime) VALUES(1234, 123456)
UPDATE myTable SET startTime = 123456 WHERE id = 1234
SELECT SQL_NO_CACHE * FROM myTable ORDER BY startTime
運がないトランザクションを使用してみました。
より更新:
これは実際にはUPDATEではなくINSERTの問題だと思います。SELECT ステートメントは常に、時間でソートされた最新の行を取得しようとします。しかし、INSERT はテーブル レベルのロックを行わないため、SELECT が古いデータを取得する可能性があります。INSERT を実行するときにテーブル レベルのロックを強制する方法はありますか?