MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 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 メトリックテーブル」 を参照してください。