すべてのプロダクト
Search
ドキュメントセンター

PolarDB:在庫ヒント

最終更新日:Jun 04, 2024

このトピックでは、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; 
  • 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; 
  • 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: 影響を受ける行番号がユーザー指定の行番号と一致しません。

ステートメントキュー機能の操作

UPDATE、INSERT、およびDELETEステートメントのCOMMIT_ON_SUCCESSROLLBACK_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