All Products
Search
Document Center

Database Autonomy Service:Pembatasan SQL

Last Updated:Mar 28, 2026

SQL throttling memungkinkan Anda membatasi jumlah pernyataan SQL konkuren yang dijalankan terhadap sebuah database, sehingga lonjakan tiba-tiba pada satu jenis kueri tidak menghabiskan sumber daya permintaan lain atau menyebabkan database down.

Cara kerja

Saat Anda membuat aturan throttling, Database Autonomy Service (DAS) memantau semua pernyataan SQL masuk dan memeriksa setiap pernyataan tersebut terhadap kriteria pencocokan aturan—berupa kata kunci atau templat SQL. Ketika jumlah pernyataan yang sesuai dan berjalan secara bersamaan mencapai batas konkurensi maksimum yang dikonfigurasi, pernyataan tambahan yang sesuai akan masuk ke antrian atau ditolak segera, tergantung pada versi instans dan konfigurasinya.

Alur permintaan:

  1. Pernyataan SQL tiba di database.

  2. DAS memeriksa apakah pernyataan tersebut sesuai dengan aturan throttling (berdasarkan kata kunci, templat, ID templat, atau waktu eksekusi).

  3. Jika pernyataan tersebut sesuai dan batas konkurensi belum tercapai, pernyataan tersebut dijalankan secara normal.

  4. Jika batas konkurensi telah tercapai:

    • Maximum concurrency = bilangan bulat positif: Pernyataan masuk ke antrian tunggu. Jika panjang antrian melebihi ccl_max_waiting_count, database mengembalikan error.

    • Maximum concurrency = 0: Pernyataan langsung ditolak dan database mengembalikan kesalahan.

Kasus penggunaan

SkenarioContoh
Lonjakan konkurensi pada jenis kueri tertentuPenetrasi cache atau panggilan aplikasi abnormal menyebabkan lonjakan tiba-tiba dalam konkurensi SQL.
Kueri yang menyebabkan data skewSering melakukan kueri terhadap data hot selama promosi penjualan menyebabkan sistem secara keseluruhan menjadi kelebihan beban.
Pemindaian full-table akibat indeks yang hilangVolume tinggi panggilan SQL pada tabel tanpa indeks menyebabkan sistem secara keseluruhan menjadi lambat.

Database yang didukung

Mesin databaseVersi yang didukung
ApsaraDB RDS for MySQL5.6, 5.7, 8.0
ApsaraDB RDS for PostgreSQL13 (minor engine version 20250430 atau lebih baru), 14 (minor version 20230330 atau lebih baru), 15 (minor version 20230330 atau lebih baru), versi di atas 15 (tidak ada persyaratan minor version)
PolarDB for MySQL5.6, 5.7, 8.0
PolarDB-X 2.0

Mode throttling

Pilih mode yang sesuai dengan cara Anda ingin mengidentifikasi pernyataan SQL yang akan dibatasi.

ModeDeskripsiDatabase yang didukung
Throttle by keywordMembatasi kecepatan pernyataan SQL yang memuat semua kata kunci yang ditentukan. Catatan: mode ini tidak dapat menargetkan satu pernyataan spesifik — mode ini sesuai dengan semua pernyataan yang memuat seluruh kata kunci yang terdaftar.ApsaraDB RDS for MySQL, PolarDB for MySQL, PolarDB-X 2.0
Throttle by SQL templateMasukkan contoh pernyataan SQL. DAS mengonversinya menjadi templat dan menerapkan pembatasan kecepatan pada semua pernyataan yang sesuai dengan templat tersebut.ApsaraDB RDS for MySQL 8.0 (versi mesin minor 20230630 atau lebih baru); ApsaraDB RDS for PostgreSQL 13 (versi minor 20250430 atau lebih baru), 14/15 (versi minor 20230330 atau lebih baru), dan versi di atas 15; PolarDB for MySQL 8.0.1 (versi minor 8.0.1.1.31 atau lebih baru) dan 8.0.2 (versi minor 8.0.2.2.12 atau lebih baru)
Throttle by SQL template IDMasukkan ID templat SQL secara langsung. Dapatkan ID tersebut dari log SQL, sesi, atau hasil EXPLAIN. ID templat merupakan string heksadesimal sepanjang 8 karakter.PolarDB-X 2.0 Enterprise Edition
Throttle by execution timeTetapkan ambang batas waktu eksekusi. DAS secara otomatis menambahkan ID templat dari pernyataan yang melebihi ambang batas tersebut ke dalam aturan pembatasan kecepatan dan menerapkan batas konkurensi yang telah dikonfigurasi.PolarDB-X 2.0 Enterprise Edition

Buat aturan throttling

Penting

SQL throttling merupakan tindakan darurat. Tetapkan durasi throttling yang singkat dan nonaktifkan aturan segera setelah situasi teratasi.

  1. Login ke Konsol DAS.

  2. Di panel navigasi kiri, klik Intelligent O&M Center > Instance Monitoring.

  3. Temukan instans target, lalu klik ID instans untuk membuka halaman detail instans.

  4. Di panel navigasi kiri, klik Instance Sessions.

  5. Di halaman Session Management, klik SQL Throttling.

  6. Pada kotak dialog yang muncul, klik Create Throttling Rule.

  7. Pada kotak dialog Create Throttling Rule, konfigurasikan parameter sesuai mesin database Anda.

ApsaraDB RDS for MySQL

ParameterDeskripsi
Throttling modePilih mode throttling.
SQL typePilih jenis pernyataan SQL yang akan dibatasi: SELECT, UPDATE, DELETE, atau INSERT. Wajib diisi saat Throttling mode diatur ke Throttle by keyword.
Catatan

Pernyataan INSERT hanya dapat dibatasi pada ApsaraDB RDS for MySQL 8.0, PolarDB for MySQL 5.7 dan 8.0, serta PolarDB-X 2.0. Pernyataan INSERT...SELECT... tidak dapat dibatasi.

DatabaseDatabase tempat aturan throttling diterapkan. Wajib diisi saat Throttling mode diatur ke Throttle by SQL template.
Maximum concurrencyJumlah maksimum pernyataan SQL yang dapat berjalan secara konkuren. Nilai minimum: 0. Pembatasan dipicu ketika jumlah pernyataan yang sesuai dan berjalan secara konkuren mencapai angka ini.
Throttling durationDurasi aturan throttling tetap aktif. Nonaktifkan aturan secara manual jika situasi telah teratasi sebelum durasi berakhir.
SQL keywordWajib diisi saat Throttling mode diatur ke Throttle by keyword. Masukkan kata kunci yang mengidentifikasi pernyataan yang akan dibatasi. Pisahkan beberapa kata kunci dengan tilde (~). Pernyataan hanya dibatasi jika memuat semua kata kunci yang ditentukan—urutan tidak penting.
Catatan

Kata kunci bersifat case-sensitive pada sebagian besar versi. Anda tidak dapat menggunakan hanya SELECT, INSERT, UPDATE, atau DELETE sebagai kata kunci. Contoh: Untuk pernyataan SELECT min(id), max(id) FROM task_event WHERE gmt_modified < '2020-06-21' AND begin_time > '2020-07-09' AND source IN (527) AND id >= 15673 AND id <= 8015673, kata kuncinya adalah: SELECT~min~id~max~id~FROM~task_event~WHERE~gmt_modified~AND~begin_time~AND~source~IN~AND~id~AND~id.

SQL sampleWajib diisi saat Throttling mode diatur ke Throttle by SQL template. Masukkan pernyataan SQL representatif. DAS mengonversinya menjadi templat dengan mengganti nilai literal dengan placeholder. Misalnya, select name from das where name = \das\ and age = 21 limit 20 menjadi templat select name from das where name = ? and age = ? limit ?. Efek pembatasan tidak dipengaruhi oleh cara DAS menormalisasi sampel tersebut.

ApsaraDB RDS for PostgreSQL

ApsaraDB RDS for PostgreSQL hanya mendukung mode Throttle by SQL template.

ParameterDeskripsi
DatabaseDatabase tempat aturan throttling diterapkan.
Search pathPath pencarian skema untuk aturan throttling. Pisahkan beberapa path dengan koma (,). Default: information_schema,public.
Maximum concurrencyJumlah maksimum pernyataan SQL yang dapat berjalan secara konkuren. Nilai minimum: 0. Pembatasan dipicu ketika jumlah pernyataan yang sesuai dan berjalan secara konkuren mencapai angka ini.
Maximum waiting queriesJumlah maksimum pernyataan yang diizinkan menunggu dalam antrian.
Throttling durationDurasi aturan throttling tetap aktif. Nonaktifkan aturan secara manual jika situasi telah teratasi sebelum durasi berakhir.
SQL sampleMasukkan pernyataan SQL representatif. DAS mengonversinya menjadi templat dengan mengganti nilai literal dengan placeholder. Misalnya, select name from das where name = "das" and age = 21 limit 20 menjadi select name from das where name = ? and age = ? limit ?.

PolarDB for MySQL

ParameterDeskripsi
Throttling modePilih mode throttling.
SQL typePilih jenis pernyataan SQL yang akan dibatasi: SELECT, UPDATE, DELETE, atau INSERT.
Catatan

Pernyataan INSERT hanya dapat dibatasi pada ApsaraDB RDS for MySQL 8.0, PolarDB for MySQL 5.7 dan 8.0, serta PolarDB-X 2.0. Pernyataan INSERT...SELECT... tidak dapat dibatasi.

Maximum concurrencyJumlah maksimum pernyataan SQL yang dapat berjalan secara konkuren. Nilai minimum: 0.
DatabaseDatabase tempat aturan throttling diterapkan. Wajib diisi saat Throttling mode diatur ke Throttle by SQL template.
Throttling durationDurasi aturan throttling tetap aktif.
SQL keywordWajib diisi saat Throttling mode diatur ke Throttle by keyword. Aturan yang sama berlaku seperti pada ApsaraDB RDS for MySQL. Pisahkan beberapa kata kunci dengan ~. Pernyataan harus memuat semua kata kunci yang ditentukan agar dibatasi.
SQL sampleWajib diisi saat Throttling mode diatur ke Throttle by SQL template. DAS mengonversi sampel menjadi templat dengan mengganti nilai literal dengan placeholder.

PolarDB-X 2.0

ParameterDeskripsi
Throttling modePilih mode throttling.
SQL typePilih jenis pernyataan SQL yang akan dibatasi: SELECT, UPDATE, DELETE, atau INSERT.
Catatan

Pernyataan INSERT hanya dapat dibatasi pada ApsaraDB RDS for MySQL 8.0, PolarDB for MySQL 5.7 dan 8.0, serta PolarDB-X 2.0. Pernyataan INSERT...SELECT... tidak dapat dibatasi.

Maximum concurrencyJumlah maksimum pernyataan SQL yang dapat berjalan secara konkuren. Nilai minimum: 0.
Throttling durationDurasi aturan throttling tetap aktif.
SQL keywordWajib diisi saat Throttling mode diatur ke Throttle by keyword. Pisahkan beberapa kata kunci dengan ~. Pernyataan harus memuat semua kata kunci yang ditentukan agar dibatasi.
SQL template IDWajib diisi untuk PolarDB-X 2.0 Enterprise Edition saat Throttling mode diatur ke Throttle by SQL template. Masukkan satu atau beberapa ID templat heksadesimal 8 karakter, dipisahkan dengan koma (,). Dapatkan ID templat dari log SQL, session, atau hasil EXPLAIN.
Minimum SQL execution durationWajib diisi untuk PolarDB-X 2.0 Enterprise Edition saat Throttling mode diatur ke Throttle by execution time. Ambang batas waktu eksekusi. Saat pernyataan melebihi ambang batas ini, DAS secara otomatis menambahkan ID templatnya ke aturan throttling.
Maximum throttled SQL IDsWajib diisi untuk PolarDB-X 2.0 Enterprise Edition saat Throttling mode diatur ke Throttle by execution time. Jumlah maksimum ID templat SQL yang dapat dibatasi. Setelah batas ini tercapai, DAS berhenti menambahkan ID templat baru meskipun lebih banyak pernyataan melebihi ambang batas.
Database account with throttled queriesWajib diisi saat Throttling mode diatur ke Throttle by keyword atau Throttle by SQL template. Akun database yang pernyataan SQL-nya dikenai pembatasan.
  1. Klik Submit untuk membuat aturan.

Perilaku throttling dan kode kesalahan

Saat aturan throttling dipicu, database mengembalikan error ke aplikasi. Kode error yang tepat bergantung pada versi instans dan nilai maximum concurrency yang dikonfigurasi.

Maximum concurrencyInstanceKode kesalahanPesan error
0 atau bilangan bulat positifApsaraDB RDS for MySQL 5.61317query execution was interrupted
0 atau bilangan bulat positifApsaraDB RDS for MySQL 5.7 (minor version sebelum 20200630)1317query execution was interrupted
0 atau bilangan bulat positifPolarDB for MySQL 5.61317query execution was interrupted
Bilangan bulat positifApsaraDB RDS for MySQL 5.7 (minor version 20200630 atau lebih baru)5041Concurrency control waiting count exceed max waiting count
Bilangan bulat positifApsaraDB RDS for MySQL 8.07534Concurrency control waiting count exceed max waiting count
Bilangan bulat positifPolarDB for MySQL 5.73277Concurrency control waiting count exceed max waiting count
Bilangan bulat positifPolarDB for MySQL 8.07533Concurrency control waiting count exceed max waiting count
0ApsaraDB RDS for MySQL 5.7 (minor version 20200630 atau lebih baru)5042Concurrency control refuse to execute query
0ApsaraDB RDS for MySQL 8.07535Concurrency control refuse to execute query
0PolarDB for MySQL 5.73278Concurrency control refuse to execute query
0PolarDB for MySQL 8.07534Concurrency control refuse to execute query

Parameter tambahan untuk instans yang didukung:

  • `ccl_max_waiting_count` (ApsaraDB RDS for MySQL 5.7 minor version 20200630 atau lebih baru, ApsaraDB RDS for MySQL 8.0): Menetapkan panjang maksimum antrian. Jika diatur ke 0, DAS menggunakan nilai default 10.

  • `ccl_wait_timeout` (ApsaraDB RDS for MySQL 5.7 minor version 20200630 atau lebih baru, ApsaraDB RDS for MySQL 8.0): Menetapkan timeout untuk pernyataan yang menunggu, jika didukung oleh versi instans. Pernyataan yang melebihi timeout ini tetap dijalankan dan tidak lagi dikenai pembatasan.

  • `ccl_mode` (PolarDB for MySQL 8.0): Mengontrol perilaku saat batas konkurensi terlampaui. Parameter ini hanya tersedia pada versi instans yang didukung.

    • WAIT (default): Pernyataan menunggu dalam antrian.

    • REFUSE: Pernyataan ditolak segera tanpa menunggu.

Lihat dan kelola aturan throttling

Setelah Anda membuat aturan, aturan tersebut muncul di tab Running dengan detail berikut.

Kolom yang ditampilkan bervariasi tergantung pada mesin database dan mode throttling.
KolomDeskripsi
Throttling modeMode yang dipilih saat membuat aturan.
Throttling ruleKonfigurasi aturan: kata kunci (mode keyword), ID templat (mode templat), atau ambang batas waktu eksekusi dan jumlah pernyataan yang dibatasi (mode execution time).
Maximum concurrencyBatas konkurensi yang dikonfigurasi.
Maximum waiting queriesPanjang maksimum antrian. Ditampilkan untuk ApsaraDB RDS for PostgreSQL dengan mode SQL template.
Throttling duration (min)Durasi aktif yang dikonfigurasi.
Start timeWaktu aturan mulai berlaku.
Remaining time (s)Waktu tersisa sebelum aturan kedaluwarsa.
Sample SQLSampel SQL yang digunakan untuk menghasilkan templat. Ditampilkan untuk mode SQL template.
Throttling template IDID templat yang sesuai dengan sampel SQL yang dibatasi. Ditampilkan untuk mode SQL template.
StatusAturan yang sedang berjalan menampilkan Enabled.
DatabaseDatabase tempat aturan diterapkan. Ditampilkan untuk mode SQL template.
Search pathPath pencarian skema. Ditampilkan untuk ApsaraDB RDS for PostgreSQL dengan mode SQL template.
Matched SQL queryJumlah pernyataan SQL yang sesuai dengan aturan. Ditampilkan untuk mode SQL template.
Waiting SQL queryJumlah pernyataan SQL yang sedang menunggu dalam antrian. Ditampilkan untuk mode SQL template.
ActionsDisable atau Modify aturan.

Langkah berikutnya

Referensi API

APIDeskripsi
EnableSqlConcurrencyControlMengaktifkan SQL throttling.
DisableSqlConcurrencyControlMenonaktifkan aturan throttling tertentu.
DisableAllSqlConcurrencyControlRulesMenonaktifkan semua aturan throttling yang sedang berjalan.
GetRunningSqlConcurrencyControlRulesMendapatkan aturan throttling yang sedang berjalan.
GetSqlConcurrencyControlRulesHistoryMendapatkan aturan throttling yang sedang berjalan atau telah dipicu.
GetSqlConcurrencyControlKeywordsFromSqlTextMenghasilkan kata kunci throttling dari pernyataan SQL.