テーブルレベルロックの利点


7

MyISAMストレージエンジンで使用されているテーブルレベルロックの利点は何ですか?行レベルのロックには、テーブルをロックしない同時更新および読み取りなど、多くの利点があります。

編集するその広く考えられているテーブルレベルのロックはデッドロックを防止します。しかし、同時実行性を犠牲にしてデッドロックを防止することは価値がありますか。

  0

この議論はMyISAM対InnoDBの特性についてのものですテーブルレベルロックの利点については何もありません。 14 9月. 112011-09-14 21:05:21

5

MyISAMにはデッドロックはありませんが、デッドロックはある意味でテーブルレベルのロックよりも優れています。

ロックされたテーブルからINSERT/UPDATE/DELETEを行おうとしているときは、それが利用可能になるまで、またはタイムアウトになるまで(デフォルトでは28800秒)待つ必要があります。行レベルのロックエンジンでのデッドロックでは、それがフリーではなく、サーバーがある種の「無限ループ」を検出した場合(2つの接続が行を放棄しない場合)、両方の接続をすばやく拒否し、デッドロックをかける。

あなたがデッドロックを解決しようとしているなら、私はあなたが以下のことを見ることを勧めます:

  • トランザクション内の不正なコードでデッドロックが発生しますか?計算を完了して更新するには、本当に行を「保持」する必要がありますか。
  • あなたのステートメントに条件のインデックスはありますか?そうでなければInnoDBは実際にはテーブル全体が更新されるのを待っているとマークするかもしれません。
  • サーバー上のハードディスクがInnoDBの変更を十分な速さでコミットしていない可能性がありますか?InnoDBでサーバー上のチェックポイント操作が問題を起こしたり停止したりしますか?
  • 自動インクリメントロックが原因ですか?もしそうなら、多分あなたはもっと自由度の高いオートインクリメント - 設定http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.htmlを見るべきです(そのような変更によって引き起こされる問題のいくつかを解決するために行レベルのロックも見てください)

3

テーブルロック(MyISAMで使用されるようなもの)は、 deadlock問題からdeadlockます。

  0

デッドロックに関する最初の回答はBTW + 1です。 14 9月. 112011-09-14 21:17:32


6

mysqlはこのようにしてクエリを実行するようにスケジュールします。

  • 書き込み要求(UPDATEやDELETEなど)は読み取り要求(SELECT)よりも優先されます。
  • サーバーはFIFO方式で書き込みを実行します(受信した順序で)

利点は何ですか?

MyISAMではデッドロックが発生することはありません。MySQLサーバーはこのようにしてすべての競合、明示的(LOCK TABLE)または暗黙的(Any DML)を管理できます。

MyISAMテーブルに削除または更新されたレコードがない限り、同時挿入は問題なく自由に実行できます。それは確かに、明示的な読み取りロックを持つテーブルに対するINSERTを含みます。

ギャップのあるテーブルでは、OPTIMIZE TABLEを実行するとそれらのギャップが取り除かれ、もう一度同時挿入が可能になります。

詳細については、読んでください"MySQL 5.0 Certification Study Guide" pages 408-412 Section 29.2

  0

このようにしてデッドロックは発生することはありませんが、同時実行性がないなどのデメリットと比較して、どこにメリットがあります。そして高負荷時にはデータベースのスループットが低下します。 14 9月. 112011-09-14 21:10:03

+2

@ rickjames myisamの利点は、更新の管理方法にはありません。書き込みが集中しない状況では最適です。 14 9月. 112011-09-14 21:13:01

  0

残念ながら、多くの人がWordPress、Drupal、およびMoveableTypes CMSを使用しています。デフォルトは常にMyISAMです。人身売買の多いWebサイトを誰かが持っている場合は、MyISAMから離れなければなりません。それ以外の場合は、MyISAMで十分です。 14 9月. 112011-09-14 21:13:45

  0

@Dテストは正しいですが、読み取り集中型のシステムでも、行レベルのロックと比較してどれほど有益ですか。 14 9月. 112011-09-14 21:14:38

  0

読みやすいシステムでも、MyISAMが持っているどんな利点でもただ1つのDELETEまたはUPDATEステートメントがすぐに無効になります。 14 9月. 112011-09-14 21:16:59

  0

デッドロックの@rickjames削除は、行ロックよりもテーブルロックの利点です。MyISAMにはinnodbに対する他の利点がありますが、これについての議論ではありません(innodbにはmyisamに対する多くの利点があります)。 14 9月. 112011-09-14 21:25:24

  0

これは、MySQL組織の典型的なことです。MyISAMがテーブルレベルのロックを持っているのは、単にそれらが行レベルのロックを実装できなかったからです(それは私たちにInnoDBを与えた第三者に任されました)。しかし、彼らはあたかも彼らがすべてに沿っていることを意味するかのようにそれを回すことを試みます。私は彼らがあなたが外部キーやトランザクション、ストアドプロシージャなどを必要としないと言ったのを覚えています。塩の**大**ピンチで彼らのドキュメンテーションを取りなさい。 15 9月. 112011-09-15 18:28:52


3

2つの利点

a。テーブルのロックは、デッドロックの問題を解決するためのbrute-force algorithm例です。"作品"の適切な値のために、ブルートフォースは常にうまくいきます。

Unixの共同発明者であるKen Thompsonは、「疑わしいときは総当りを使う」というエピグラムを発話したと報告されています。彼はおそらくこれを真剣に扱うことを意図していましたが、もともとのUnixカーネルが脆弱でスマートなものより単純で堅牢で移植可能なアルゴリズムを好むことは、そのOSの成功にとって重要な要因のようです。ソフトウェア設計における他の多くのトレードオフと同様に、ブルートフォースと複雑で巧妙に調整された巧妙さの間の選択は、エンジニアリングに精通していて繊細な審美的判断を必要とする難しいものです。

b。工学に精通した判断と審美的な判断の両方を得たとき、あなたは間違いなく異なる決定をするでしょう。これは上記の "a"の有効性には影響しません。