All Products
Search
Document Center

ApsaraDB RDS:Mesin Sequence

Last Updated:Jun 25, 2025

AliSQL menyediakan fitur mesin sequence yang memungkinkan Anda menggunakan mesin Sequence pada instance RDS untuk menghasilkan nilai sequence secara efisien.

Pengenalan

Nilai sequence unik yang meningkat secara monoton sering diperlukan untuk kunci utama dalam sistem database persisten satu node, pengidentifikasi unik global (GUID) dalam sistem terdistribusi, dan untuk idempotensi di antara beberapa sistem database. Setiap mesin database memiliki metode unik untuk memastikan nilai sequence unik. Sebagai contoh, MySQL menggunakan atribut AUTO_INCREMENT, sedangkan Oracle dan SQL Server menyediakan atribut SEQUENCE.

Dalam MySQL, proses menggunakan atribut AUTO_INCREMENT untuk mengenkapsulasi nilai sequence unik seperti tanggal atau nama pengguna dapat memakan waktu. Berikut adalah metode alternatif untuk menghasilkan nilai sequence secara efisien:

  • Gunakan aplikasi atau proxy untuk menghasilkan nilai sequence. Namun, pendekatan ini mengalihkan status nilai sequence ke aplikasi, sehingga membuat penskalaan lebih kompleks.

  • Gunakan tabel simulasi untuk menghasilkan nilai sequence. Metode ini memerlukan instalasi middleware untuk mengenkapsulasi dan menyederhanakan logika yang digunakan untuk mendapatkan nilai sequence.

Mesin Sequence kompatibel dengan berbagai mesin database dan membantu menghasilkan nilai sequence secara lebih efisien.

Mesin Sequence juga kompatibel dengan berbagai mesin penyimpanan yang digunakan dengan MySQL. Data persisten tetap disimpan menggunakan mesin penyimpanan yang ada, seperti InnoDB dan MyISAM, sehingga memastikan kompatibilitas dengan alat pihak ketiga seperti XtraBackup. Oleh karena itu, mesin Sequence hanya berfungsi sebagai mesin logis.

Mesin Sequence menggunakan Sequence Handler untuk mengakses objek sequence. Dengan cara ini, Anda dapat menambah nilai sequence menggunakan operator NEXTVAL dan mengelola data yang di-cache. Data dikirim ke mesin tabel dasar dan dapat diakses sesuai kebutuhan bisnis Anda.

Prasyarat

Instance RDS harus menjalankan salah satu versi MySQL berikut:

  • MySQL 8.0 dalam versi mesin minor 20190816 atau lebih baru

  • MySQL 5.7 dalam versi mesin minor 20210430 atau lebih baru

  • MySQL 5.6 dalam versi mesin minor 20170901 atau lebih baru

Catatan

Instance RDS yang menjalankan Edisi Perusahaan RDS Tiga Node tidak didukung.

Batasan

  • Mesin Sequence tidak mendukung subquery atau query JOIN.

  • Anda dapat menggunakan SHOW CREATE TABLE untuk mengakses sequence.

  • Saat membuat tabel, Anda tidak dapat menentukan mesin Sequence. Jika ingin menentukan mesin Sequence untuk tabel, Anda harus mengeksekusi pernyataan yang dijelaskan dalam bagian Buat sequence dari topik ini.

Buat sequence

Untuk membuat sequence, eksekusi pernyataan berikut:

CREATE SEQUENCE [IF NOT EXISTS] <Nama Database>.<Nama Sequence>
   [START WITH <konstanta>]
   [MINVALUE <konstanta>]
   [MAXVALUE <konstanta>]
   [INCREMENT BY <konstanta>]
   [CACHE <konstanta> | NOCACHE]
   [CYCLE | NOCYCLE]
  ;
Catatan

Saat mengeksekusi pernyataan di atas, Anda harus mengonfigurasi parameter yang diapit tanda kurung siku ([]).

Tabel berikut menjelaskan parameter tersebut.

Parameter

Deskripsi

START WITH

Nilai awal sequence.

MINVALUE

Nilai minimum sequence.

MAXVALUE

Nilai maksimum sequence.

Catatan

Jika opsi NOCYCLE ditentukan untuk sequence, kesalahan berikut dilaporkan saat nilai maksimum tercapai:

ERROR HY000: Sequence 'db.seq' has been run out.

INCREMENT BY

Penambahan nilai sequence.

CACHE/NOCACHE

Ukuran cache. Anda dapat menentukan ukuran cache yang lebih besar untuk meningkatkan performa instance RDS Anda. Jika instance RDS Anda di-restart, nilai sequence yang disimpan dalam cache akan hilang.

CYCLE/NOCYCLE

Menentukan apakah nilai sequence diatur ulang ke nilai minimum yang ditentukan oleh parameter MINVALUE setelah nilai maksimum tercapai. Nilai valid:

  • CYCLE: Nilai sequence diatur ulang ke nilai minimum setelah nilai maksimum tercapai.

  • NOCYCLE: Nilai sequence tidak diatur ulang ke nilai minimum setelah nilai maksimum tercapai.

Contoh:

create sequence s
       start with 1
       minvalue 1
       maxvalue 9999999
       increment by 1
       cache 20
       cycle;

Jika Anda ingin menggunakan ekstensi mysqldump untuk mencadangkan instance RDS Anda, Anda dapat membuat tabel sequence dan menyisipkan baris awal ke dalam tabel sequence. Contoh:

CREATE TABLE schema.sequence_name (  `currval` bigint(21) NOT NULL COMMENT 'current value',
  `nextval` bigint(21) NOT NULL COMMENT 'next value',
  `minvalue` bigint(21) NOT NULL COMMENT 'min value',
  `maxvalue` bigint(21) NOT NULL COMMENT 'max value',
  `start` bigint(21) NOT NULL COMMENT 'start value',
  `increment` bigint(21) NOT NULL COMMENT 'increment value',
  `cache` bigint(21) NOT NULL COMMENT 'cache size',
  `cycle` bigint(21) NOT NULL COMMENT 'cycle state',
  `round` bigint(21) NOT NULL COMMENT 'already how many round'
) ENGINE=Sequence DEFAULT CHARSET=latin1;

INSERT INTO schema.sequence_name VALUES(0,0,1,9223372036854775807,1,1,10000,1,0);
COMMIT;

Pengenalan tabel sequence

Sequence disimpan dalam tabel yang dibuat menggunakan mesin penyimpanan default. Saat Anda meminta sequence, sistem mengembalikan tabel yang dibuat menggunakan mesin penyimpanan default. Contoh:

SHOW CREATE TABLE schema.sequence_name;

CREATE TABLE schema.sequence_name (
  `currval` bigint(21) NOT NULL COMMENT 'current value',
  `nextval` bigint(21) NOT NULL COMMENT 'next value',
  `minvalue` bigint(21) NOT NULL COMMENT 'min value',
  `maxvalue` bigint(21) NOT NULL COMMENT 'max value',
  `start` bigint(21) NOT NULL COMMENT 'start value',
  `increment` bigint(21) NOT NULL COMMENT 'increment value',
  `cache` bigint(21) NOT NULL COMMENT 'cache size',
  `cycle` bigint(21) NOT NULL COMMENT 'cycle state',
  `round` bigint(21) NOT NULL COMMENT 'already how many round'
) ENGINE=Sequence DEFAULT CHARSET=latin1

Sintaksis permintaan

Mesin Sequence mendukung sintaksis berikut:

  • SELECT nextval(<Nama Sequence>),currval(<Nama Sequence>) FROM <Nama Sequence>;

    Catatan

    Sintaksis ini didukung untuk MySQL 8.0 dan MySQL 5.7.

  • SELECT <Nama Sequence>.currval, <Nama Sequence>.nextval FROM dual;

    Catatan

    Sintaksis ini didukung untuk MySQL 8.0, MySQL 5.7, dan MySQL 5.6.

Contoh:

mysql> SELECT test.currval, test.nextval from dual;
+--------------+--------------+
| test.currval | test.nextval |
+--------------+--------------+
|           24 |           25 |
+--------------+--------------+
1 row in set (0.03 sec)
            
Catatan

Sebelum meminta nilai sequence baru, Anda harus mengeksekusi pernyataan berikut untuk memanggil NEXTVAL untuk sequence. Jika tidak, pesan kesalahan Sequence 'xxx' is not yet defined in current session akan ditampilkan.

Contoh:

SELECT <Nama Sequence>.nextval FROM dual;