0

キューイング システム用のテーブルを使用する必要があります。表は随時更新予定です。

たとえば、私の Web サイトで複数のユーザーが処理のためにファイルを追加しますが、複数のユーザーから同時に更新が行われると、テーブルが応答しなくなるなどの現象が発生すると聞きました。

この状況でテーブルをロックする必要がありますか? mysql テーブルにロックを適用するにはどうすればよいですか?

4

3 に答える 3

2

常に更新されるということは、1 秒あたり 10,000 回追加されるということですか? 中規模のサーバーであっても、他のユーザーがテーブルを共有する機会は 1 秒あたり 10,000 回あります。

テーブルをロックする必要があるのは、複数の依存操作を 1 つの単位として実行する必要がある場合のみです。ほとんどの場合、一連の操作をデータベーストランザクションに含めるだけで十分です。「定期的な更新」が単純insert sometable values ( ...)であれば、トランザクションの一貫性を保証するのは簡単です。

于 2010-01-03T20:47:22.710 に答える
1

この状況でテーブルをロックする必要がありますか?

すべてのテーブルをロックできます。特別なタイプのテーブルはありません。とはいえ、デッドロックが発生した場合は問題に対処してください。 分離レベルも密接に関連するトピックです。

mysql テーブルにロックを適用するにはどうすればよいですか?

LOCK TABLES 構文があります。この記事では、テーブルをロックする方法と理由について説明します。

于 2010-01-03T20:45:18.660 に答える
0

一度に複数の更新を行うと、デッドロック状態になる可能性があります。InnoDB などのエンジンはこれを検出し、トランザクションの 1 つを失敗させます (再試行できますが、トランザクション全体のみです)。

テーブルをロックすることでこれを回避できますが、同時実行性が低下します。

MyISAM (いずれにしても MVCC やトランザクションをサポートしない) などのエンジンは、テーブル ロックを暗黙的に使用します。このようなテーブル ロックは、クエリの間だけ存在します。テーブルが不要になった後、すぐに自動的に解放されます (必ずしもできるだけ早くではありませんが、すぐに解放されます)。

本当に必要だと感じない限り、LOCK TABLE を使用しないことをお勧めします。デッドロックが発生した場合は、トランザクションを再試行してください。

于 2010-01-03T22:16:08.333 に答える