Database Autonomy Service (DAS) menyediakan fitur Pembatasan SQL yang memungkinkan Anda mengontrol jumlah permintaan akses database dan pernyataan SQL konkuren untuk memastikan ketersediaan layanan. Topik ini menjelaskan cara menggunakan fitur tersebut.
Prasyarat
Engine database berikut didukung:
ApsaraDB RDS for MySQL 5.6, 5.7, dan 8.0.
ApsaraDB RDS for PostgreSQL 13 dan versi yang lebih baru.
CatatanPostgreSQL 13: versi mesin minor harus 20250430 atau lebih baru.
PostgreSQL 14 atau 15: Versi mesin minor harus 20230330 atau lebih baru.
PostgreSQL versi di atas 15: Tidak ada persyaratan untuk versi mesin minor.
PolarDB for MySQL 5.6, 5.7, dan 8.0.
PolarDB-X 2.0.
Pesan pembatasan
Setelah Anda membuat aturan pembatasan SQL, sistem database akan mengembalikan pesan jika suatu aplikasi menjalankan pernyataan SQL yang berisi semua kata kunci yang ditentukan atau cocok dengan templat. Pesan yang dikembalikan bervariasi tergantung pada versi instans.
Konkurensi maksimum | Versi instance | Kode kesalahan | Pesan kesalahan |
0 atau bilangan bulat positif |
| 1317 |
|
Bilangan bulat positif | ApsaraDB RDS for MySQL 5.7 dengan versi mesin minor 20200630 atau lebih baru | 5041 |
Catatan Jika konkurensi maksimum adalah bilangan bulat positif, pernyataan SQL terkait akan masuk ke status |
ApsaraDB RDS for MySQL 8.0 | 7534 | ||
PolarDB for MySQL 5.7 | 3277 | ||
PolarDB for MySQL 8.0 | 7533 | ||
0 | ApsaraDB RDS for MySQL 5.7 dengan versi mesin minor 20200630 atau lebih baru | 5042 |
Catatan Jika konkurensi maksimum adalah 0, kesalahan akan langsung dikembalikan. |
ApsaraDB RDS for MySQL 8.0 | 7535 | ||
PolarDB for MySQL 5.7 | 3278 | ||
PolarDB for MySQL 8.0 | 7534 |
Saat DAS melakukan pembatasan pernyataan SQL, DAS memeriksa parameter
ccl_max_waiting_count. Jika parameter ini diatur ke 0, DAS menggunakan nilai default 10. Jika parameter diatur ke nilai lebih besar dari 0, DAS menggunakan nilai yang dikonfigurasi.Untuk instans ApsaraDB RDS for MySQL 5.7 dengan versi mesin minor 20200630 atau lebih baru dan instans ApsaraDB RDS for MySQL 8.0, Anda dapat mengatur parameter
ccl_wait_timeoutjika didukung oleh versi instans. Jika parameter ini diatur, pernyataan SQL dalam statusConcurrency control waitingyang melebihi batas waktu tersebut tetap dijalankan dan tidak lagi dibatasi.Untuk instans PolarDB for MySQL 8.0, Anda dapat mengatur parameter
ccl_modeuntuk mengontrol perilaku pernyataan SQL saat batas konkurensi terlampaui. Parameter ini hanya tersedia pada versi instans yang mendukung.WAIT (default): Pernyataan menunggu dalam antrean.
REFUSE: Pernyataan tidak menunggu, dan kesalahan langsung dikembalikan.
Skenario
Skenario | Deskripsi |
Kenaikan tajam pada konkurensi jenis pernyataan SQL tertentu | Penetrasi cache atau panggilan abnormal dapat menyebabkan peningkatan mendadak pada konkurensi SQL. |
Pernyataan SQL yang menyebabkan kesenjangan data | Misalnya, sering melakukan kueri data panas selama promosi penjualan dapat menyebabkan sistem secara keseluruhan menjadi sibuk. |
Tabel indeks yang hilang | Misalnya, volume tinggi panggilan SQL pada tabel tanpa indeks dapat menyebabkan sistem secara keseluruhan menjadi sibuk. |
Mode pembatasan
Mode | Deskripsi | Database yang didukung |
Keyword Throttling | Membatasi pernyataan SQL yang berisi kata kunci tertentu. Catatan Anda tidak dapat membatasi pernyataan SQL tertentu. |
|
SQL Template Throttling | Masukkan contoh SQL. Contoh tersebut diproses menjadi templat. Pernyataan SQL jenis ini kemudian dibatasi. |
|
Membatasi pernyataan SQL dengan mencocokkan ID templat SQL. Anda dapat memperoleh ID templat SQL dari log SQL, sesi, dan hasil EXPLAIN. Catatan ID templat SQL adalah string heksadesimal 8 karakter. | PolarDB-X 2.0 Edisi Perusahaan | |
Execution Time Throttling | Membatasi pernyataan SQL berdasarkan waktu eksekusinya. Setelah Anda membuat aturan untuk mode ini, jika waktu eksekusi jenis pernyataan SQL tertentu melebihi ambang batas, ID templat SQL tersebut akan secara otomatis ditambahkan ke aturan pembatasan. Pernyataan SQL tersebut kemudian dieksekusi berdasarkan konkurensi yang ditentukan dalam aturan. Catatan Anda juga dapat mengatur batas jumlah ID templat SQL yang dibatasi. Setelah batas tercapai, tidak ada aturan pembatasan tambahan yang dibuat untuk pernyataan SQL lainnya. | PolarDB-X 2.0 Edisi Perusahaan |
Prosedur
Masuk ke Konsol DAS.
Di panel navigasi sebelah kiri, klik Operation Center > Instance Monitoring.
Temukan instans target, klik ID instans, lalu buka halaman detail instans.
Di panel navigasi sebelah kiri, klik Instance Sessions.
Di halaman Session Management, klik SQL Throttling.
Di kotak dialog yang muncul, klik Create Throttling Rule.
Di kotak dialog Create Throttling Rule, konfigurasikan parameter berdasarkan engine database.
Parameter ini wajib diisi jika Anda mengatur Throttling Mode ke Keyword Throttling.
Anda hanya dapat membatasi pernyataan INSERT pada engine database berikut:
ApsaraDB RDS for MySQL 8.0
PolarDB for MySQL 5.7 dan 8.0
PolarDB-X 2.0
Anda tidak dapat membatasi pernyataan
INSERT...SELECT....Parameter ini wajib diisi jika Anda mengatur Throttling mode ke Keyword throttling.
Jika Anda menetapkan beberapa kata kunci, aturan pembatasan hanya dipicu jika pernyataan SQL berisi semua kata kunci tersebut. Pisahkan beberapa kata kunci dengan tanda tilde (~). Urutan kata kunci tidak berpengaruh.
Misalnya, pernyataan aslinya adalah
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 kunci pembatasan yang sesuai adalah
SELECT~min~id~max~id~FROM~task_event~WHERE~gmt_modified~AND~begin_time~AND~source~IN~AND~id~AND~id.Anda tidak dapat menetapkan hanya
SELECT, INSERT, UPDATE, DELETEsebagai kata kunci pembatasan. Kata kunci bersifat case-sensitive, tetapi beberapa versi instans sebelumnya tidak case-sensitive.Parameter ini wajib diisi jika Anda mengatur Throttling mode ke SQL template throttling.
Untuk pernyataan SQL kompleks, DAS mengoptimalkan contoh SQL tetapi menjaga templat SQL akhir tetap tidak berubah. Efek pembatasan tidak terpengaruh oleh optimasi tersebut.
Misalnya, jika Anda memasukkan
select name from das where name = `das` and age = 21 limit 20,templatnya menjadi
select name from das where name = ? and age = ? limit ?,kemudian ditulis ulang menjadi
select name from das where name = `param0` and age = `param1` limit 20.Parameter ini wajib diisi jika Anda mengatur Throttling Mode ke SQL Template Throttling.
Untuk pernyataan SQL kompleks, DAS membuat templat dari contoh SQL tetapi menjaga templat SQL akhir tetap tidak berubah. Efek pembatasan tidak terpengaruh oleh transformasi tersebut.
Misalnya, jika Anda memasukkan
select name from das where name = "das" and age = 21 limit 20,templatnya menjadi
select name from das where name = ? and age = ? limit ?,kemudian ditulis ulang menjadi
select name from das where name = "param0" and age = "param1" limit 20.Anda hanya dapat membatasi pernyataan
INSERTpada engine database berikut:ApsaraDB RDS for MySQL 8.0
PolarDB for MySQL 5.7 dan 8.0
PolarDB-X 2.0
Anda tidak dapat membatasi pernyataan
INSERT...SELECT....Parameter ini wajib diisi jika Anda mengatur Throttling Mode ke Keyword Throttling.
Jika Anda menetapkan beberapa kata kunci, aturan pembatasan hanya dipicu jika pernyataan SQL berisi semua kata kunci tersebut. Pisahkan beberapa kata kunci dengan tanda tilde (~). Urutan kata kunci tidak berpengaruh.
Misalnya, pernyataan aslinya adalah
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 kunci pembatasan yang sesuai adalah
SELECT~min~id~max~id~FROM~task_event~WHERE~gmt_modified~AND~begin_time~AND~source~IN~AND~id~AND~id.Anda tidak dapat menetapkan hanya SELECT, INSERT, UPDATE, atau DELETE sebagai kata kunci pembatasan. Kata kunci bersifat case-sensitive, tetapi beberapa versi instans sebelumnya tidak case-sensitive.
Parameter ini wajib diisi jika Anda mengatur Throttling Mode ke SQL Template Throttling.
Untuk pernyataan SQL kompleks, DAS membuat templat dari contoh SQL tetapi menjaga templat SQL akhir tetap tidak berubah. Efek pembatasan tidak terpengaruh oleh transformasi tersebut.
Misalnya, jika Anda memasukkan
select name from das where name = "das" and age = 21 limit 20,templatnya menjadi
select name from das where name = ? and age = ? limit ?,kemudian ditulis ulang menjadi
select name from das where name = "param0" and age = "param1" limit 20.Anda hanya dapat membatasi pernyataan
INSERTpada engine database berikut:ApsaraDB RDS for MySQL 8.0
PolarDB for MySQL 5.7 dan 8.0
PolarDB-X 2.0
Anda tidak dapat membatasi pernyataan
INSERT...SELECT....Parameter ini wajib diisi jika Anda mengatur Throttling Mode ke Keyword Throttling.
Jika Anda menetapkan beberapa kata kunci, aturan pembatasan hanya dipicu jika pernyataan SQL berisi semua kata kunci tersebut. Pisahkan beberapa kata kunci dengan tanda tilde (~). Urutan kata kunci tidak berpengaruh.
Misalnya, pernyataan aslinya adalah
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 kunci pembatasan yang sesuai adalah
SELECT~min~id~max~id~FROM~task_event~WHERE~gmt_modified~AND~begin_time~AND~source~IN~AND~id~AND~id.Anda tidak dapat menetapkan hanya SELECT, INSERT, UPDATE, atau DELETE sebagai kata kunci pembatasan. Kata kunci bersifat case-sensitive, tetapi beberapa versi instans sebelumnya tidak case-sensitive.
Klik Submit untuk membuat aturan.
Setelah aturan pembatasan SQL dibuat, Anda dapat melihat informasi tentang aturan tersebut di tab Running. Tabel berikut menjelaskan parameter-parameter tersebut.
CatatanParameter-parameter tersebut sedikit berbeda tergantung pada engine database dan mode pembatasan.
Parameter
Deskripsi
Throttling Mode
Mode yang Anda pilih.
Throttling Rule
Keyword Throttling: Konfigurasi kata kunci pembatasan.
SQL Template Throttling: ID templat yang sesuai dengan contoh yang dibatasi.
Execution Time Throttling: Ambang batas waktu eksekusi yang dikonfigurasi dan jumlah pernyataan SQL yang dibatasi berdasarkan templat.
Maximum Concurrency
Jumlah maksimum pernyataan SQL konkuren.
Maximum Waiting Count
Jumlah maksimum pernyataan yang menunggu yang dikonfigurasi dalam aturan pembatasan.
CatatanParameter ini ditampilkan jika instans database adalah ApsaraDB RDS for PostgreSQL dan Throttling Mode diatur ke SQL Template Throttling.
Throttling Duration (minutes)
Periode efektif aturan pembatasan SQL.
Start Time
Waktu saat aturan pembatasan dikonfigurasi untuk mulai berlaku.
Remaining Time
Sisa waktu sebelum aturan pembatasan kedaluwarsa.
Throttled SQL Sample
Konfigurasi contoh SQL yang dibatasi.
CatatanParameter ini ditampilkan jika Anda mengatur Throttling Mode ke SQL Template Throttling.
Throttling Template ID
ID templat yang sesuai dengan contoh SQL yang dibatasi.
CatatanParameter ini ditampilkan jika Anda mengatur Throttling Mode ke SQL Template Throttling.
Status
Aturan yang sedang berjalan memiliki status Enabled.
Database
Database tempat pernyataan SQL dibatasi.
CatatanParameter ini ditampilkan jika Anda mengatur Throttling Mode ke SQL Template Throttling.
Search Path
Jalur pencarian yang sesuai dengan pernyataan SQL yang dibatasi.
CatatanParameter ini ditampilkan jika instans database adalah ApsaraDB RDS for PostgreSQL dan Throttling Mode diatur ke SQL Template Throttling.
Number Of Matched SQL Statements
Jumlah pernyataan SQL yang cocok dengan aturan pembatasan.
CatatanParameter ini ditampilkan jika Anda mengatur Throttling Mode ke SQL Template Throttling.
Number Of Waiting SQL Statements
Jumlah pernyataan SQL yang menunggu berdasarkan aturan pembatasan.
CatatanParameter ini ditampilkan jika Anda mengatur Throttling Mode ke SQL Template Throttling.
Actions
Tombol untuk Disable atau Modify aturan pembatasan.
ApsaraDB RDS for MySQL
Parameter | Deskripsi |
Throttling Mode | Pilih mode pembatasan sesuai kebutuhan. |
SQL Type | Pilih jenis pernyataan SQL. Nilai yang valid: SELECT, UPDATE, DELETE, dan INSERT. Catatan |
Database | Database tempat pernyataan SQL dibatasi. Catatan Parameter ini wajib diisi jika Anda mengatur Throttling Mode ke SQL Template Throttling. |
Maximum Concurrency | Jumlah maksimum pernyataan SQL konkuren. Nilai minimum adalah 0. Catatan Pembatasan dipicu ketika jumlah pernyataan SQL konkuren yang sedang berjalan dan memenuhi kebijakan mencapai konkurensi maksimum. |
Throttling Duration | Periode efektif aturan pembatasan SQL. Penting Pembatasan SQL adalah tindakan darurat. Atur durasi sesuai kebutuhan dan nonaktifkan aturan ketika tidak diperlukan lagi. |
SQL Keywords | Kata kunci pernyataan SQL yang akan dibatasi. Catatan |
SQL Sample | Pernyataan SQL contoh yang akan dibatasi. Catatan |
ApsaraDB RDS for PostgreSQL
Parameter | Deskripsi |
Throttling Mode | ApsaraDB RDS for PostgreSQL hanya mendukung SQL template throttling. |
Database | Database tempat pernyataan SQL dibatasi. |
Search Path | Jalur pencarian untuk pembatasan SQL. Catatan Pisahkan beberapa jalur dengan koma ( |
Maximum Concurrency | Jumlah maksimum pernyataan SQL konkuren. Nilai minimum adalah 0. Catatan Pembatasan dipicu ketika jumlah pernyataan SQL konkuren yang sedang berjalan dan memenuhi kebijakan mencapai konkurensi maksimum. |
Maximum Waiting Count | Jumlah maksimum pernyataan yang menunggu. |
Throttling Duration | Periode efektif aturan pembatasan SQL. Penting Pembatasan SQL adalah tindakan darurat. Atur durasi sesuai kebutuhan dan nonaktifkan aturan ketika tidak diperlukan lagi. |
SQL Sample | Pernyataan SQL contoh yang akan dibatasi. Catatan |
PolarDB for MySQL
Parameter | Deskripsi |
Throttling Mode | Pilih mode pembatasan sesuai kebutuhan. |
SQL Type | Pilih jenis pernyataan SQL. Nilai yang valid: Catatan |
Maximum Concurrency | Jumlah maksimum pernyataan SQL konkuren. Nilai minimum adalah 0. Catatan Pembatasan dipicu ketika jumlah pernyataan SQL konkuren yang sedang berjalan dan memenuhi kebijakan mencapai konkurensi maksimum. |
Database | Database tempat pernyataan SQL dibatasi. Catatan Parameter ini wajib diisi jika Anda mengatur Throttling Mode ke SQL Template Throttling. |
Throttling Duration | Periode efektif aturan pembatasan SQL. Penting Pembatasan SQL adalah tindakan darurat. Atur durasi sesuai kebutuhan dan nonaktifkan aturan ketika tidak diperlukan lagi. |
SQL Keywords | Kata kunci pernyataan SQL yang akan dibatasi. Catatan |
SQL Sample | Pernyataan SQL contoh yang akan dibatasi. Catatan |
PolarDB-X 2.0
Parameter | Deskripsi |
Throttling Mode | Pilih mode pembatasan sesuai kebutuhan. |
SQL Type | Pilih jenis pernyataan SQL. Nilai yang valid: Catatan |
Maximum Concurrency | Jumlah maksimum pernyataan SQL konkuren. Nilai minimum adalah 0. Catatan Pembatasan dipicu ketika jumlah pernyataan SQL konkuren yang sedang berjalan dan memenuhi kebijakan mencapai konkurensi maksimum. |
Throttling Duration | Periode efektif aturan pembatasan SQL. Penting Pembatasan SQL adalah tindakan darurat. Atur durasi sesuai kebutuhan dan nonaktifkan aturan ketika tidak diperlukan lagi. |
SQL Keywords | Kata kunci pernyataan SQL yang akan dibatasi. Catatan |
SQL Template ID | ID templat SQL yang akan dibatasi. ID berupa string heksadesimal 8 karakter. Pisahkan beberapa ID templat SQL dengan koma ( Catatan Parameter ini wajib diisi jika instans adalah PolarDB-X Edisi Perusahaan dan Anda mengatur Throttling Mode ke SQL Template Throttling. |
Minimum SQL Running Time | Ambang batas waktu eksekusi SQL. Ketika waktu eksekusi pernyataan SQL melebihi ambang batas, sistem akan menambahkan ID templat SQL tempat pernyataan SQL tersebut berada ke aturan pembatasan. Catatan Parameter ini wajib diisi jika instans adalah PolarDB-X Edisi Perusahaan dan Anda mengatur Throttling Mode ke Execution Time Throttling. |
Maximum Number Of Throttled SQL IDs | Jumlah maksimum ID templat SQL yang dapat dibatasi berdasarkan waktu eksekusi. Setelah batas ini tercapai, sistem tidak lagi membuat aturan pembatasan untuk pernyataan SQL lain yang waktu eksekusinya melebihi ambang batas. Catatan Parameter ini wajib diisi jika instans adalah PolarDB-X Edisi Perusahaan dan Anda mengatur Throttling Mode ke Execution Time Throttling. |
Database Account For Throttled SQL | Akun database tempat pernyataan SQL yang dibatasi berasal. Catatan Parameter ini wajib diisi jika Anda mengatur Throttling Mode ke Keyword Throttling atau SQL Template Throttling. |
Referensi
Operasi API terkait
API | Deskripsi |
Mengaktifkan pembatasan SQL. | |
Menonaktifkan aturan pembatasan tertentu. | |
Menonaktifkan semua aturan pembatasan yang sedang berjalan. | |
Mendapatkan aturan pembatasan yang sedang berjalan. | |
Mendapatkan aturan pembatasan yang sedang berjalan atau telah dipicu. | |
Menghasilkan kata kunci pembatasan dari pernyataan SQL. |