0

食事の哲学者の問題を innodb に適用し、select for update を使用します。

1) 単一の主キー (フォーク) を持つ innodb テーブルによって表される、100,000 のフォークを持つテーブル

2) フォークのグラブは、このテーブルの 2 から 20 個のプライマリ キーのランダム リストを指定する更新用の選択であり、「グラブ」は、100,000 の異なるプライマリ キーに対するこのランダム フォーク リストの更新用の 1 つの選択です。 . ところで、select 文のキーのリストの順序はランダムです。

3) 5 つ以上の思想家が存在し、交差するフォークをつかむ最大 50 の「同時」トランザクションなどがあります。

4) 思考時間は、手順 2 で主キーの行の他の列を更新しています。思考時間は決して長くはありません。

質問: innodb を使用すると、上記のシナリオで不公平によるデッドロックや飢餓が発生する可能性はありますか? 注意することはありますか?(分離レベルの読み取りがコミットされました。)

目的: このテーブルとロック行の主キーを使用して、複雑な更新シナリオの依存関係を表します。これにより、さまざまな関連テーブル (一貫した順序のテーブル) とその中の行に対して一連の更新を行う前に、依存関係のセットを決定します。ステップ 1 の主キーのセットと同等であり、トランザクションの開始時に select for update を使用してこれらの依存関係をロックします。(もちろん、更新を選択した後、依存関係を再クエリして、変更されていないことを確認します。)

4

1 に答える 1

0

「不公平」とはどういう意味かわかりませんが、そうです、デッドロックが発生する可能性があります。例:2人の思想家が同じフォーク、たとえば1と2を取り込もうとしますが、順序が逆になります。つまり、思想家1はフォーク1を「取り」、思想家2はフォーク2を取ります。その後、両方が「永遠に」2番目のフォークを待ちます...

フォークへのアクセスを注文することで、この問題を簡単に克服できます。そうすれば、最初の思想家はフォーク1を取り、2番目の思想家は最初の思想家が終了するのを待たなければならず、すべてが順調です。

于 2013-02-13T14:47:51.050 に答える