All Products
Search
Document Center

ApsaraDB RDS:Kontrol konkurensi (pg_concurrency_control)

Last Updated:Mar 28, 2026

Plugin pg_concurrency_control untuk ApsaraDB RDS for PostgreSQL memungkinkan Anda membatasi jumlah pernyataan SQL konkuren berdasarkan jenisnya—kueri SELECT, pernyataan DML, kueri lambat, dan blok transaksi. Ketika suatu pernyataan mencapai batas yang dikonfigurasi, pernyataan tersebut akan menunggu dalam antrian alih-alih langsung dieksekusi, sehingga mencegah kehabisan sumber daya di bawah beban kerja dengan tingkat konkurensi tinggi.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Instans ApsaraDB RDS for PostgreSQL yang menjalankan PostgreSQL 10 atau 11

Untuk memeriksa versi instans Anda, jalankan SELECT version(); di database Anda.

Instal plugin

Jalankan perintah berikut untuk membuat ekstensi:

CREATE EXTENSION pg_concurrency_control;

Konfigurasikan batas konkurensi

Setiap parameter konkurensi memiliki nilai default 0, yang menonaktifkan kontrol konkurensi untuk jenis pernyataan tersebut. Atur parameter ke bilangan bulat positif untuk mengaktifkan batas tersebut.

Sebagai contoh, atur pg_concurrency_control.query_concurrency ke 10 untuk mengaktifkan kontrol konkurensi pada pernyataan SELECT. Gunakan pendekatan yang sama untuk jenis pernyataan lainnya.

Untuk menandai suatu pernyataan sebagai kueri lambat agar tunduk pada batas bigquery_concurrency, tambahkan petunjuk /*+bigsql*/ di awal pernyataan:

/*+bigsql*/ SELECT * FROM test;

Referensi parameter

Parameter konkurensi

ParameterDefaultNilai validDeskripsi
pg_concurrency_control.query_concurrency00–1024Jumlah maksimum pekerjaan konkuren untuk pernyataan SELECT. Nilai 0 menonaktifkan kontrol.
pg_concurrency_control.bigquery_concurrency00–1024Jumlah maksimum pekerjaan konkuren untuk kueri lambat. Nilai 0 menonaktifkan kontrol. Tandai suatu pernyataan sebagai kueri lambat menggunakan petunjuk /*+bigsql*/.
pg_concurrency_control.transaction_concurrency00–1024Jumlah maksimum pekerjaan konkuren untuk blok transaksi. Nilai 0 menonaktifkan kontrol.
pg_concurrency_control.autocommit_concurrency00–1024Jumlah maksimum pekerjaan konkuren untuk pernyataan DML. Nilai 0 menonaktifkan kontrol.

Parameter timeout

ParameterDefaultNilai validDeskripsi
pg_concurrency_control.control_timeout1s30ms–3sWaktu maksimum yang dihabiskan oleh pernyataan SELECT, pernyataan DML, atau blok transaksi dalam antrian sebelum aksi timeout dijalankan.
pg_concurrency_control.bigsql_control_timeout1s30ms–3sWaktu maksimum yang dihabiskan oleh kueri lambat dalam antrian sebelum aksi timeout dijalankan.
pg_concurrency_control.timeout_actionTCC_breakTCC_break, TCC_rollback, TCC_waitAksi yang diambil ketika pernyataan SELECT, pernyataan DML, atau blok transaksi mengalami timeout saat menunggu dalam antrian. Lihat Nilai aksi timeout.
pg_concurrency_control.bigsql_timeout_actionTCC_waitTCC_break, TCC_rollback, TCC_waitAksi yang diambil ketika kueri lambat mengalami timeout saat menunggu dalam antrian. Lihat Nilai aksi timeout.

Nilai aksi timeout

NilaiPerilaku
TCC_breakMelewatkan pernyataan yang sedang menunggu dan mengeksekusi pernyataan berikutnya.
TCC_rollbackMelaporkan error dan melakukan rollback transaksi.
TCC_waitMengatur ulang timestamp setelah timeout dan terus menunggu.

Verifikasi status antrian

Gunakan pg_concurrency_control_status() untuk memeriksa antrian pernyataan saat ini. Fungsi ini mengembalikan jumlah pernyataan yang sedang menunggu di setiap antrian.

SELECT * FROM pg_concurrency_control_status();

Output saat tidak ada pernyataan dalam antrian:

 autocommit_count | bigquery_count | query_count | transaction_count
------------------+----------------+-------------+-------------------
                0 |              0 |           0 |                 0
(1 row)

Angka hitungan bukan nol menegaskan bahwa batas aktif dan pernyataan sedang diantrikan. Setelah pernyataan dalam antrian selesai atau mengalami timeout, angka tersebut akan berkurang secara otomatis.

Contoh: verifikasi bahwa batas kueri lambat aktif

Contoh berikut menunjukkan status antrian saat kueri lambat dijalankan dengan batas bigquery_concurrency.

  1. Periksa antrian sebelum menjalankan kueri apa pun:

    SELECT * FROM pg_concurrency_control_status();
     autocommit_count | bigquery_count | query_count | transaction_count
    ------------------+----------------+-------------+-------------------
                     0 |              0 |           0 |                 0
    (1 row)
  2. Atur pg_concurrency_control.query_concurrency ke 10 untuk mengaktifkan kontrol konkurensi SELECT.

  3. Jalankan kueri lambat menggunakan petunjuk /*+bigsql*/:

    /*+ bigsql */ SELECT pg_sleep(10);
  4. Saat kueri lambat sedang berjalan, periksa antrian dari sesi kedua:

    SELECT * FROM pg_concurrency_control_status();
     autocommit_count | bigquery_count | query_count | transaction_count
    ------------------+----------------+-------------+-------------------
                     0 |              1 |           0 |                 0
    (1 row)

    Nilai bigquery_count sebesar 1 menegaskan bahwa kueri lambat tersebut sedang dilacak dalam antrian. Setelah kueri selesai, angka tersebut akan otomatis kembali ke nol.