MySQL 8.0 リファレンスマニュアル


15.7.6 トランザクションスケジューリング

InnoDB では、競合対応トランザクションスケジューリング (CATS) アルゴリズムを使用して、ロックを待機しているトランザクションに優先順位を付けます。 複数のトランザクションが同じオブジェクトのロックを待機している場合、CATS アルゴリズムは最初にロックを受信するトランザクションを決定します。

CATS アルゴリズムは、トランザクションがブロックするトランザクションの数に基づいて計算されるスケジューリング加重を割り当てることで、待機中のトランザクションに優先順位を付けます。 たとえば、2 つのトランザクションが同じオブジェクトのロックを待機している場合、ほとんどのトランザクションをブロックするトランザクションには、より大きなスケジューリング加重が割り当てられます。 重みが等しい場合、最も長い待機トランザクションに優先度が与えられます。

注記

MySQL 8.0.20 より前の InnoDB では、トランザクションのスケジュールに先入れ先出し (FIFO) アルゴリズムも使用され、CATS アルゴリズムはロック競合が多い場合にのみ使用されていました。 MySQL 8.0.20 の CATS アルゴリズムの拡張により、FIFO アルゴリズムが冗長になり、削除が許可されました。 FIFO アルゴリズムによって以前に実行されたトランザクションスケジューリングは、MySQL 8.0.20 の時点で CATS アルゴリズムによって実行されます。 場合によっては、この変更がトランザクションにロックが付与される順序に影響することがあります。

INFORMATION_SCHEMA.INNODB_TRX テーブルの TRX_SCHEDULE_WEIGHT カラムをクエリーすることで、トランザクションスケジューリング加重を表示できます。 重みは、待機中のトランザクションに対してのみ計算されます。 待機中のトランザクションは、TRX_STATE カラムでレポートされる LOCK WAIT トランザクション実行状態のトランザクションです。 ロックを待機していないトランザクションは、NULL の TRX_SCHEDULE_WEIGHT 値を報告します。

INNODB_METRICS カウンタは、コードレベルのトランザクションスケジューリングイベントを監視するために用意されています。 INNODB_METRICS カウンタの使用の詳細は、セクション15.15.6「InnoDB INFORMATION_SCHEMA メトリックテーブル」 を参照してください。

  • lock_rec_release_attempts

    レコードロックの解放の試行回数。 単一の構造にゼロ個以上のレコードロックが存在する可能性があるため、単一の試行によってゼロ個以上のレコードロックが解放される場合があります。

  • lock_rec_grant_attempts

    レコードロックの付与を試行する回数。 単一回試行すると、ゼロ個以上のレコードロックが付与される場合があります。

  • lock_schedule_refreshes

    スケジュール済トランザクションの重みを更新するために待機グラフが分析された回数。


関連キーワード:  InnoDB, テーブル, トランザクション, ロック, 構成, 圧縮, INFORMATION, SCHEMA, スペース, 待機