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