MyISAMストレージエンジンで使用されるテーブルレベルロックの利点は何ですか?行レベルのロックには、同時更新やテーブルをロックしない読み取りなど、多くの利点があります。
編集テーブルレベルのロックはデッドロックを防ぐと広く考えられています。しかし、同時実行性を犠牲にしてデッドロックを防止することには、どのような価値がありますか?
MyISAMにはデッドロックはありませんが、ある意味でデッドロックは、テーブルレベルのロックを改善したものです。
ロックされたテーブルからINSERT/UPDATE/DELETEを行おうとする場合、テーブルが利用可能になるか、タイムアウトになるまで(デフォルトでは28800秒)待つ必要があります。行レベルのロックエンジンでデッドロックを使用すると、空きがなく、サーバーが一種の「無限ループ」(2つの接続が行をあきらめない)を検出した場合、少し待ってから、両方の接続をすばやく拒否します。デッドロックを与える。
デッドロックを解決しようとしている場合は、次の点を検討することをお勧めします。
Mysqlはこの方法でクエリの実行をスケジュールするので、
メリットは何ですか?
MyISAMではデッドロックは発生しません。 MySQLサーバーは、明示的(LOCK TABLEs)または暗黙的(Any DML)のすべての競合を管理できます。
MyISAMテーブルに削除または更新されたレコードがない限り、同時挿入は自由に実行できます。それには、実際には、明示的な読み取りロックを持つテーブルに対するINSERTが含まれます。
ギャップのあるテーブルの場合、OPTIMIZE TABLEを実行すると、それらのギャップが削除され、同時挿入が再び可能になります。
詳細については、 "MySQL 5.0認定試験ガイド"ページ408-412のセクション29.2 を参照してください。
(MyISAMで使用されるような)テーブルロックには deadlock の問題はありません。
2つの利点。
a。テーブルのロックは、デッドロックの問題を解決するための ブルートフォースアルゴリズム の例です。ブルートフォースは常に適切に機能します。
Unixの共同発明者であるケントンプソンは、「疑わしい場合はブルートフォースを使用する」というエピグラムを発したと報告されています。彼はおそらくこれを単なる真面目なものとして意図していましたが、元のUnixカーネルが脆弱で「スマート」なアルゴリズムよりもシンプルで堅牢で移植性の高いアルゴリズムを好んでいたことが、そのOSの成功に大きな影響を与えたようです。ソフトウェア設計における他の多くのトレードオフと同様に、ブルートフォースと複雑で細かく調整された賢さの間の選択は、エンジニアリングに精通した繊細な審美的判断の両方を必要とする難しいものです。
b。エンジニアリングに精通し、審美的な判断を下すにつれて、間違いなくさまざまな決定を下すことになります。これは、上記の「a」の有効性には影響しません。