キューイング システム用のテーブルを使用する必要があります。表は随時更新予定です。
たとえば、私の Web サイトで複数のユーザーが処理のためにファイルを追加しますが、複数のユーザーから同時に更新が行われると、テーブルが応答しなくなるなどの現象が発生すると聞きました。
この状況でテーブルをロックする必要がありますか? mysql テーブルにロックを適用するにはどうすればよいですか?
キューイング システム用のテーブルを使用する必要があります。表は随時更新予定です。
たとえば、私の Web サイトで複数のユーザーが処理のためにファイルを追加しますが、複数のユーザーから同時に更新が行われると、テーブルが応答しなくなるなどの現象が発生すると聞きました。
この状況でテーブルをロックする必要がありますか? mysql テーブルにロックを適用するにはどうすればよいですか?
常に更新されるということは、1 秒あたり 10,000 回追加されるということですか? 中規模のサーバーであっても、他のユーザーがテーブルを共有する機会は 1 秒あたり 10,000 回あります。
テーブルをロックする必要があるのは、複数の依存操作を 1 つの単位として実行する必要がある場合のみです。ほとんどの場合、一連の操作をデータベーストランザクションに含めるだけで十分です。「定期的な更新」が単純insert sometable values ( ...)
であれば、トランザクションの一貫性を保証するのは簡単です。
この状況でテーブルをロックする必要がありますか?
すべてのテーブルをロックできます。特別なタイプのテーブルはありません。とはいえ、デッドロックが発生した場合は問題に対処してください。 分離レベルも密接に関連するトピックです。
mysql テーブルにロックを適用するにはどうすればよいですか?
LOCK TABLES 構文があります。この記事では、テーブルをロックする方法と理由について説明します。
一度に複数の更新を行うと、デッドロック状態になる可能性があります。InnoDB などのエンジンはこれを検出し、トランザクションの 1 つを失敗させます (再試行できますが、トランザクション全体のみです)。
テーブルをロックすることでこれを回避できますが、同時実行性が低下します。
MyISAM (いずれにしても MVCC やトランザクションをサポートしない) などのエンジンは、テーブル ロックを暗黙的に使用します。このようなテーブル ロックは、クエリの間だけ存在します。テーブルが不要になった後、すぐに自動的に解放されます (必ずしもできるだけ早くではありませんが、すぐに解放されます)。
本当に必要だと感じない限り、LOCK TABLE を使用しないことをお勧めします。デッドロックが発生した場合は、トランザクションを再試行してください。