- ベストアンサー
トランザクション中にSELECTした場合について
InnoDBを使っているのですが、 以下の1.から5.の処理の間に、サーバー1.の「テーブルA」へ SELECTを掛けた場合、何か遅い気がします・・原因は何でしょうか? 1.サーバー1でトランザクション開始 2.サーバー1の「テーブルA」をDELETEでを全削除 3.サーバー2から「テーブルA」の新しいデータを取得 4.3.で取得したデータをサーバー1の「テーブルA」へINSERT 5.サーバー1でトランザクション終了 他のトランザクションでDELETEされたレコードに対し、 SELECTすると結果が返るのは遅いでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一般的に、トランザクション中(DB更新中)の場合、Selectのクエリは、その処理を待ってから、実行されます。 1~5までの処理にどれほどの時間がかかっているかわかりませんが、単にその処理が遅いため、Selectも遅く感じているのではないでしょうか?
その他の回答 (1)
- equinox2
- ベストアンサー率48% (321/660)
回答No.2
DBの経験はDB2とOracleのみでMySQLは経験ありませんが、以下の マニュアルを参照した限りは、InnoDBはORACLEと同じような方式を 採用しているようなので、トランザクション中にも待ちにならない ように思えます。 #DB2は待ちになりますが・・ http://mysql.telepac.pt/doc/refman/4.1/ja/innodb-transaction-model.html トランザクション処理中に並行してテーブルAにアクセスする処理では、 LOCK IN SHARE MODE とか FOR UPDATE は使用していますか? これらを使用していればトランザクションの終了まで待たされるでしょう。
お礼
マニュアルまで探していただきありがとうございます。 デフォルト設定なので、lock in share modeでないと思われます。 for update もつかっておらず結局、 負荷をかけている処理開始時間を5分ずらすことで滞留が だいぶ回避でき軽くなりきました。ありがとうございます。