1

マルチマスターレプリケーションセットアップで2つのMySQLサーバーを構成しています。それぞれが他のスレーブとマスターです。私のアプリケーションでは、いくつかの大きなクエリをバックグラウンドで実行する必要があり、これらのクエリの結果を使用してテーブルにデータを入力します。これらの大規模なクエリを一方のサーバーで実行し、アプリケーションのフロントエンドでもう一方のサーバーを使用できると考えました。このようにして、サーバーがこれらのクエリを実行している間、アプリケーションの速度が低下することはありません。

これらのクエリは非常に大きいINSERT .... SELECTです。私のレプリケーション設定では、1つのサーバーがクエリを終了すると、INSERTをスレーブに送信するだけでなく、スレーブに元の大きなINSERT/SELECTを実行させるようです。

これは実際に起こっているのですか?または、これが動作であることを確認するために、マスターからスレーブに送信されたコマンドを確認する方法はありますか?私が知ることができる唯一の方法は、CPUの負荷からです。

スレーブがINSERTから結果のINSERTのみを取得する方法はありますか...SELECTはマスターで実行されましたか?

4

2 に答える 2

5

これは実際に起こっていますか?

おそらく。

または、マスターからスレーブに送信されたコマンドを確認して、これが動作であることを確認する方法はありますか?

まあ、binlog を解体することもできますが、 レプリケーション形式のオプションを読むことで、頭痛の種がはるかに少なくなると思います。

おそらく、長年のデフォルトであるステートメントベースのモードになっているでしょう。これらのステートメントが面倒な場合は、行ベース モードまたはハイブリッド モードにする必要があります。INSERT INTO ... SELECTこれらのオプションは、MySQL 5.1 以降でのみ使用できます。

于 2011-03-13T21:20:14.893 に答える
0

実際のクエリが実行されます。INSERT...SELECT を回避する唯一の方法は、それらを自分で分割することです。選択を実行し、結果をメモリに保存してから、一括挿入を行います。

于 2011-03-13T21:21:10.633 に答える