Topik ini menjelaskan fitur Petunjuk Inventaris yang disediakan oleh PolarDB. Fitur ini dapat digunakan bersama dengan fitur Antrian Pernyataan, memungkinkan Anda untuk melakukan commit atau rollback transaksi secara cepat.
Versi yang Didukung
- Kluster PolarDB for MySQL 8.0 dengan versi minor kernel 8.0.1.1.1 atau lebih baru.
- Kluster PolarDB for MySQL 5.7 dengan versi minor engine 5.7.1.0.17 atau lebih baru.
- Kluster PolarDB for MySQL 5.6.
Informasi Latar Belakang
Dalam skenario seperti flash sale, pengurangan inventaris adalah model tugas umum yang memerlukan konkurensi tinggi dan serialisasi. Dalam model ini, PolarDB menggunakan antrian dan petunjuk transaksional untuk mengontrol konkurensi serta melakukan commit atau rollback transaksi, sehingga meningkatkan throughput bisnis Anda.
Tindakan Pencegahan
COMMIT_ON_SUCCESS dan ROLLBACK_ON_FAIL tidak dapat dijalankan dalam mode autocommit. Contoh:UPDATE /*+ ROLLBACK_ON_FAIL */ T
SET c = c - 1
WHERE id = 1
ERROR 7531 (HY000):Petunjuk transaksional inventaris tidak diizinkan dalam mode autocommitSintaksis
Fitur Petunjuk Inventaris yang disediakan oleh PolarDB mendukung pernyataan SELECT, UPDATE, INSERT, dan DELETE.
Berikut adalah petunjuk inventaris yang digunakan:
COMMIT_ON_SUCCESS: Melakukan commit transaksi jika pernyataan saat ini berhasil dieksekusi.Contoh:
- Kluster PolarDB for MySQL 5.6
UPDATE COMMIT_ON_SUCCESS T SET c = c - 1 WHERE id = 1; - Kluster PolarDB for MySQL 5.7 atau 8.0
UPDATE /*+ COMMIT_ON_SUCCESS */ T SET c = c - 1 WHERE id = 1;
- Kluster PolarDB for MySQL 5.6
ROLLBACK_ON_FAIL: Melakukan rollback transaksi jika pernyataan saat ini gagal dieksekusi.Contoh:
- Kluster PolarDB for MySQL 5.6
UPDATE ROLLBACK_ON_FAIL T SET c = c - 1 WHERE id = 1; - Kluster PolarDB for MySQL 5.7 atau 8.0
UPDATE /*+ ROLLBACK_ON_FAIL */ T SET c = c - 1 WHERE id = 1;
- Kluster PolarDB for MySQL 5.6
TARGET_AFFECT_ROW number: Eksekusi berhasil jika jumlah baris yang terpengaruh oleh pernyataan saat ini sesuai dengan jumlah baris yang ditentukan. Jika tidak, eksekusi gagal.Anda dapat menyetel Target Affect Row ke 1. Jika pernyataan UPDATE mencocokkan setidaknya satu rekaman, operasi pembaruan berhasil. Jika tidak ada rekaman yang diperbarui, operasi pembaruan gagal.
Contoh:- Kluster PolarDB for MySQL 5.6
UPDATE TARGET_AFFECT_ROW 1 T SET c = c - 1 WHERE id = 1; ERROR HY000: Jumlah baris yang terpengaruh tidak sesuai dengan yang ditentukan pengguna. - Kluster PolarDB for MySQL 5.7 atau 8.0
UPDATE /*+ TARGET_AFFECT_ROW(1) */ T SET c = c - 1 WHERE id = 1; ERROR HY000: Jumlah baris yang terpengaruh tidak sesuai dengan yang ditentukan pengguna.
- Kluster PolarDB for MySQL 5.6
Bekerja dengan fitur antrian pernyataan
Petunjuk COMMIT_ON_SUCCESS, ROLLBACK_ON_FAIL, dan TARGET_AFFECT_ROW number dalam pernyataan UPDATE, INSERT, dan DELETE dapat digunakan dengan Antrian Pernyataan untuk menambahkan pernyataan ke antrian.
UPDATE COMMIT_ON_SUCCESS POLARDB_STATEMENT_CONCURRENT_QUEUE id ROLLBACK_ON_FAIL TARGET_AFFECT_ROW 1 t
SET col1 = col1 + 1
WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 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;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0UPDATE /*+ COMMIT_ON_SUCCESS ROLLBACK_ON_FAIL TARGET_AFFECT_ROW(1) CCL_QUEUE_VALUE('id') */ t
SET col1 = col1 + 1
WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
UPDATE /*+ COMMIT_ON_SUCCESS ROLLBACK_ON_FAIL TARGET_AFFECT_ROW(1) CCL_QUEUE_VALUE(1) */ t
SET col1 = col1 + 1
WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0