私はテーブルを頻繁に挿入し、更新して読み込みます(数ミリ秒間隔で)。 INSERT/UPDATEに続くSELECT文が古いデータを取得することがあることに気付きました。私はこれがキャッシュのためだと仮定しますが、それの前にSQL_NO_CACHE
を置いた後は、実際に何もしません。MySQLのSQL_NO_CACHEが動作しない
SELECTは、前回のINSERT/UPDATEが終了してキャッシュからデータを取得しなくなるまで常に待機することを確認しますか?これらのステートメントは、別々の要求(同じコード実行内ではない)から実行されることに注意してください。
は、たぶん私は
UPDATE ... 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を実行するときにテーブルレベルのロックを強制する方法はありますか?
あなたはSELECTとUPDATEのサンプルを公開します。 – Uday
[分離レベル](http://dev.mysql.com/doc/refman/5.5/en/set-transaction.html)はあなたですを使用して?これは、 'READ UNCOMMITTED'または' dirty reads 'を使用している場合に発生します。 –
@MarcusAdams InnoDBのデフォルトの分離レベルが何であっても、それがあなたの質問に答えるかどうかはわかりません。 – pixelfreak