0

私は毎日 MySQL/Slave セットアップを行っており、監査のためにスレーブ マシンでクエリを実行しています。その DB のテーブルには、5,000 万行を超える行があります。これらのクエリをスレーブで実行すると、スレーブはマスターの背後で実行されます。この時点で、挿入クエリがマスター DB で実行された場合。この挿入クエリは、スレーブ DB で複数回実行されます。シナリオ例: ユーザーがサインインするたびに、監査のために詳細を挿入します。テーブルに複数回挿入される以下のデータを見てください。ユーザーが同じ秒に複数回サインインする方法はありません。なぜそれが起こり、どうすればこれを解決できますか?

| Kannan | 2012-04-28 12:27:57           | 
| Kannan | 2012-04-28 12:27:57           | 
| Kannan | 2012-04-28 12:27:57           | 
| Kannan | 2012-04-28 12:27:57           | 
| Kannan | 2012-04-28 12:27:57   
4

1 に答える 1

0

リアルタイムのデータが必要な場合は、マスターから選択する必要があります。通常、マスター/スレーブ環境では挿入/選択はお勧めできません。ステートメントベースのレプリケーションを使用している場合、SELECT はスレーブでも実行する必要があります。SELECT の実行に 10 秒かかる場合、スレーブは 10 秒遅れることになります。

多くの場合、挿入は非常に高速です。SELECT を使用すると、準備時間が必要になるため、INSERT の速度が大幅に低下します。ほとんどの場合、MySQL は一度に 1 つのステートメントを複製します。そのステートメントが終了するまで、スレーブへの複製は遅れます。

直感に反しますが、多くの場合、データを SELECT し、INSERT ステートメントを (アプリケーション層で) 作成してから、INSERT を実行する方が適切です。

于 2012-06-20T07:44:14.203 に答える