このトピックでは、PolarDBが提供するインベントリヒント機能について説明します。 この機能は、ステートメントキュー機能と一緒に使用できます。 これにより、トランザクションをすばやくコミットまたはロールバックできます。
サポートされているバージョン
PolarDBクラスターは、次のいずれかのバージョン要件を満たしています。
- カーネルのマイナーバージョンが8.0.1.1.1以降のPolarDB for MySQL 8.0のクラスター。
- エンジンマイナーバージョンが5.7.1.0.17以降のPolarDB for MySQL 5.7クラスター
- PolarDB for MySQL 5.6クラスター。
背景情報
フラッシュ販売などのシナリオでは、在庫削減は高い同時実行性とシリアル化を必要とする一般的なタスクモデルです。 このモデルでは、PolarDBはキューとトランザクションヒントを使用して同時実行を制御し、トランザクションをコミットまたはロールバックします。 これにより、ビジネスのスループットが向上します。
注意事項
PolarDB For MySQL 8.0クラスターの場合、
COMMIT_ON_SUCCESS
およびROLLBACK_ON_FAIL
ヒントは自動コミット
モードでは実行できません。 例: UPDATE /* + ROLLBACK_ON_FAIL */ T
SET c = c - 1
WHERE id = 1
エラー7531 (HY000): 自動コミットモード
ではインベントリのトランザクションヒントが許可されませんでした構文
PolarDBが提供するインベントリヒント機能は、SELECT、UPDATE、INSERT、およびDELETEステートメントをサポートしています。
次のインベントリヒントが使用されます。
COMMIT_ON_SUCCESS
: 現在のステートメントが正常に実行された場合、トランザクションをコミットします。例:
- PolarDB for MySQLの5.6クラスター
UPDATE COMMIT_ON_SUCCESS T SET c = c - 1 WHERE id = 1;
- PolarDB for MySQLの5.7または8.0クラスター
の更新 /* + COMMIT_ON_SUCCESS */ T SET c = c - 1 WHERE id = 1;
- PolarDB for MySQLの5.6クラスター
ROLLBACK_ON_FAIL
: 現在のステートメントの実行に失敗した場合、トランザクションをロールバックします。例:
- PolarDB for MySQL 5.6クラスター
の更新ROLLBACK_ON_FAIL T SET c = c - 1 WHERE id = 1;
- PolarDB for MySQLの5.7または8.0クラスター
の更新 /* + ROLLBACK_ON_FAIL */ T SET c = c - 1 WHERE id = 1;
- PolarDB for MySQL 5.6クラスター
TARGET_AFFECT_ROW number
: 現在のステートメントの影響を受ける行数が指定された行数と一致する場合、実行は成功します。 それ以外の場合、実行は失敗します。Target Affect Rowを1に設定できます。 UPDATE文が少なくとも1つのレコードにヒットした場合、更新操作は成功します。 レコードが更新されない場合、更新操作は失敗します。
例:- PolarDB for MySQL 5.6クラスター
の更新TARGET_AFFECT_ROW 1 T SET c = c - 1 WHERE id = 1; ERROR HY000: 影響を受ける行番号がユーザー指定の行番号と一致しません。
- PolarDB for MySQLの5.7または8.0クラスター
のUPDATE /* + TARGET_AFFECT_ROW (1) */ T SET c = c - 1 WHERE id = 1; ERROR HY000: 影響を受ける行番号がユーザー指定の行番号と一致しません。
- PolarDB for MySQL 5.6クラスター
ステートメントキュー機能の操作
UPDATE、INSERT、およびDELETEステートメントのCOMMIT_ON_SUCCESS
、ROLLBACK_ON_FAIL
、およびTARGET_AFFECT_ROW番号
のヒントは、ステートメントキューでステートメントをキューに使用できます。
PolarDB for MySQL 5.6クラスターの例:
UPDATE COMMIT_ON_SUCCESS POLARDB_STATEMENT_CONCURRENT_QUEUE id ROLLBACK_ON_FAIL TARGET_AFFECT_ROW 1 t
SET col1 = col1 + 1
WHERE id = 1;
クエリOK、影響を受ける1行 (0.00秒)
一致した行: 1変更: 1警告: 0
UPDATE COMMIT_ON_SUCCESS POLARDB_STATEMENT_CONCURRENT_QUEUE 1 ROLLBACK_ON_FAIL TARGET_AFFECT_ROW 1 t
SET col1 = col1 + 1
WHERE id = 1;
クエリOK、影響を受ける1行 (0.00秒)
一致した行: 1変更: 1警告: 0
PolarDB for MySQLの5.7または8.0クラスターの例:
UPDATE /* + COMMIT_ON_SUCCESS ROLLBACK_ON_FAIL TARGET_AFFECT_ROW (1) CCL_QUEUE_VALUE('id') */ t
SET col1 = col1 + 1
WHERE id = 1;
クエリOK、影響を受ける1行 (0.00秒)
一致した行: 1変更: 1警告: 0
UPDATE /* + COMMIT_ON_SUCCESS ROLLBACK_ON_FAIL TARGET_AFFECT_ROW(1) CCL_QUEUE_VALUE(1) */ t
SET col1 = col1 + 1
WHERE id = 1;
クエリOK、影響を受ける1行 (0.00秒)
一致した行: 1変更: 1警告: 0