All Products
Search
Document Center

PolarDB:Multi-tenancy

Last Updated:Aug 21, 2026

Topik ini menjelaskan fitur konfigurasi resource multi-tenant dari PolarDB for PostgreSQL.

Konsep

Tenant: Dalam arsitektur multi-tenancy, tenant adalah entitas logis yang merepresentasikan unit alokasi data dan resource. Tenant berada pada level di bawah kluster tetapi di atas user dan database. Beberapa akun atau database dapat termasuk dalam satu tenant. Tenant tidak sama dengan user atau database, dan dibagi menjadi dua kategori:

  • System tenant: Entitas administratif khusus. Sebuah kluster biasanya hanya memiliki satu system tenant. System tenant memiliki akses prioritas ke resource dan dapat menggunakan resource dari regular tenant. Ketika user dari system tenant terhubung ke database dan memiliki izin akses kluster yang diperlukan, mereka dapat mengakses resource dari semua tenant.

  • Regular tenant: Resource setiap regular tenant sepenuhnya terisolasi dari tenant lain. Regular tenant harus dibuat dalam konteks system tenant.

Resource configuration: Melibatkan alokasi resource tertentu, seperti CPU dan memori, ke tenant tertentu. Metode ini memungkinkan Akun istimewa menetapkan batas resource untuk setiap tenant sesuai kebutuhan.

Fitur konfigurasi resource tenant dirancang untuk membatasi jumlah resource yang digunakan oleh satu atau beberapa proses. Di PolarDB for PostgreSQL, satu session berkorespondensi dengan satu proses tunggal, dan dalam session tersebut, hanya satu user yang dapat login ke satu database. Sistem memungkinkan Anda memetakan proses, user, atau database ke tenant tertentu. Namun, satu proses hanya dapat dimiliki oleh satu tenant, sehingga mencegah penghitungan ganda penggunaan resource. Proses anak dari kueri paralel termasuk dalam tenant dari proses yang memulai kueri tersebut. Oleh karena itu, batas resource dapat dibagi ke dalam tiga dimensi berdasarkan atribut proses:

  • Proses: Proses koneksi (proses session) yang secara aktif diprakarsai oleh user. Ini mencakup proses kueri paralel terkait, tetapi tidak termasuk proses bantu sistem.

  • User: Semua proses koneksi (proses session) yang diprakarsai oleh user yang sama. Ini mencakup proses kueri paralel terkait, tetapi tidak termasuk proses bantu sistem.

  • Database: Semua proses koneksi (proses session) yang mengakses database yang sama. Ini mencakup proses kueri paralel terkait, tetapi tidak termasuk proses bantu sistem.

Catatan

Secara default, tidak ada batas resource yang diterapkan pada proses sistem karena fungsi khususnya.

Cakupan

Versi PolarDB for PostgreSQL berikut didukung: PostgreSQL 14 dengan versi mesin minor 2.0.14.12.24.0 atau lebih baru.

Catatan

Anda dapat melihat nomor versi mesin minor di Konsol atau dengan menjalankan pernyataan SHOW polardb_version;. Jika kluster Anda tidak memenuhi persyaratan versi, Anda dapat upgrade versi mesin minor.

Parameter

Parameter

Deskripsi

Kapan berlaku

polar_max_tenants

Jumlah maksimum tenant. Nilainya harus berada dalam rentang 0 hingga 65536. Nilai default adalah 32.

Berlaku setelah restart.

polar_resource_manager.enable_resource_manager

Menentukan apakah akan mengaktifkan proses Resource Manager untuk pembatasan memori dan pencegahan kehabisan memori (OOM). Nilai default adalah on.

Berlaku setelah restart.

polar_resource_manager.database_name

Nama database yang menyimpan metadata tenant. Nilai default adalah polardb_admin.

Berlaku setelah restart.

polar_resource_manager.stat_interval

Interval pengumpulan data. Satuan: milidetik. Nilainya harus berada dalam rentang 10 hingga 10000. Nilai default adalah 500 ms.

Berlaku setelah RELOAD.

SELECT pg_reload_conf();

polar_resource_manager.total_mem_request_rate

Ambang batas eviksi aktif. Nilainya harus berada dalam rentang 50% hingga 100%. Nilai default adalah 80%.

Berlaku setelah RELOAD.

SELECT pg_reload_conf();

polar_resource_manager.total_mem_limit_rate

Ambang batas eviksi paksa. Nilainya harus berada dalam rentang 50% hingga 100%. Nilai default adalah 95%.

Berlaku setelah RELOAD.

SELECT pg_reload_conf();

polar_resource_manager.total_mem_limit_remain_size

Ukuran memori yang dicadangkan. Nilainya harus berada dalam rentang 131072 hingga INT_MAX (nilai maksimum tipe data integer). Satuan: KB. Nilai default adalah 256000 KB.

Berlaku setelah RELOAD.

SELECT pg_reload_conf();

polar_resource_manager.enable_log

Menentukan apakah akan mengaktifkan catatan log. Nilai yang valid:

  • ON (default): mengaktifkan catatan log.

  • OFF: menonaktifkan catatan log.

Berlaku setelah RELOAD.

SELECT pg_reload_conf();

Penggunaan

Untuk menggunakan fitur multi-tenancy, Anda harus menginstal ekstensi polar_resource_manager di database yang ditentukan oleh parameter polar_resource_manager.database_name.

Penting

Jika Anda mengubah nilai polar_resource_manager.database_name, semua informasi konfigurasi multi-tenancy yang ada menjadi tidak valid.

CREATE EXTENSION polar_resource_manager;

Buat konfigurasi sumber daya

Gunakan fungsi polar_create_resource_config untuk membuat konfigurasi resource.

SELECT polar_resource_manager.polar_create_resource_config('resource_config_name');

Parameter resource_config_name harus mematuhi batasan nama objek basis data. Nama dapat memiliki panjang hingga 64 byte dan akan dipotong secara otomatis jika melebihi batas ini.

Hapus konfigurasi sumber daya

Gunakan fungsi polar_drop_resource_config untuk menghapus konfigurasi resource.

SELECT polar_resource_manager.polar_drop_resource_config('resource_config_name');

Ubah konfigurasi sumber daya

Anda dapat menggunakan fungsi polar_alter_resource_config untuk mengubah konfigurasi resource.

SELECT polar_resource_manager.polar_alter_resource_config('resource_config_name', 'config_name', value);

config_name mendukung tipe berikut:

  • cpu_rate_limit: Menentukan batas CPU dalam core.

  • mem_limit: Menentukan batas memori dalam byte.

Buat penyewa

Anda dapat menggunakan fungsi polar_create_tenant untuk membuat tenant.

SELECT polar_resource_manager.polar_create_tenant('tenant_name', 'resource_config_name');

Di mana:

  • Parameter tenant_name harus mematuhi Konvensi penamaan untuk objek basis data. Nama dapat memiliki panjang hingga 64 byte dan akan dipotong secara otomatis jika melebihi batas ini.

  • Anda harus terlebih dahulu membuat konfigurasi resource untuk resource_config_name. Jika tidak, Anda tidak dapat membuat tenant.

Hapus penyewa

Anda dapat menggunakan fungsi polar_drop_tenant untuk menghapus tenant. Menghapus tenant tidak menghapus konfigurasi resourcenya.

SELECT polar_resource_manager.polar_drop_tenant('tenant_name');

Ubah penyewa

Anda dapat menggunakan fungsi polar_alter_tenant untuk mengubah tenant.

SELECT polar_resource_manager.polar_alter_tenant('tenant_name', 'config_name', 'value');

Parameter config_name mendukung tipe berikut:

  • name: Nama tenant.

  • resource_config: Konfigurasi resource.

Kepemilikan tenant database

Anda dapat menggunakan fungsi polar_tenant_add_database untuk menetapkan database ke tenant. Satu database hanya dapat ditetapkan ke satu tenant. Upaya menetapkan database ke tenant lain akan gagal.

SELECT polar_resource_manager.polar_tenant_add_database('tenant_name', 'database_name');

Lihat database dan tenant

Anda dapat melakukan kueri terhadap Tampilan polar_tenants_dbs untuk melihat database dan tenant yang ditetapkan.

SELECT dbsname, tenantname FROM polar_resource_manager.polar_tenants_dbs;

Tetapkan pengguna ke penyewa

Anda dapat menggunakan fungsi polar_tenant_add_user untuk menetapkan user ke tenant. Satu user hanya dapat ditetapkan ke satu tenant. Jika Anda mencoba menetapkan user ke tenant lain, operasi tersebut akan gagal.

SELECT polar_resource_manager.polar_tenant_add_user('tenant_name', 'user_name');

Lihat user dan tenant

Gunakan Tampilan polar_tenants_users untuk memeriksa penetapan user-tenant.

SELECT username, tenantname FROM polar_resource_manager.polar_tenants_users;

Tetapkan proses ke penyewa

Anda dapat menggunakan fungsi polar_tenant_add_process untuk menetapkan proses ke tenant. Satu proses hanya dapat ditetapkan ke satu tenant. Jika Anda menetapkan proses ke beberapa tenant, hanya penetapan terakhir yang berlaku.

SELECT polar_resource_manager.polar_tenant_add_process('tenant_name', pid);

Lihat informasi resource tenant

Anda dapat melihat informasi resource tenant dari Tampilan polar_all_resource_configs_detail.

SELECT * FROM polar_resource_manager.polar_all_resource_configs_detail;

Tampilan tersebut berisi informasi berikut:

Nama kolom

Tipe kolom

Deskripsi

tenantname

NAME

Nama penyewa.

resource_config_name

NAME

Nama konfigurasi resource.

num_processes

INTEGER

Jumlah proses.

num_idle_processes

INTEGER

Jumlah proses idle.

num_active_processes

INTEGER

Jumlah proses aktif.

cpu_rate_limit

DOUBLE PRESISION

Batas resource CPU untuk tenant.

per_process_cpu_rate_limit

DOUBLE PRESISION

Batas CPU per proses.

mem_limit

DOUBLE PRESISION

Batas memori.

mem_usage

DOUBLE PRESISION

Penggunaan memori.

idle_processes_mem_usage

DOUBLE PRESISION

Penggunaan memori oleh proses idle.

active_processes_mem_usage

DOUBLE PRESISION

Penggunaan memori oleh proses aktif.

cpu_usage_rate

DOUBLE PRESISION

Laju penggunaan CPU.

Manajemen sumber daya CPU

Setelah Anda menetapkan proses, user, atau database ke tenant, Anda dapat mengatur batas terkait CPU dalam konfigurasi resource tenant tersebut. Saat kueri paralel dimulai, proses anak backend-nya ditetapkan ke tenant dari session yang mengeluarkan kueri tersebut. Hal ini memungkinkan proses anak backend dan proses session berbagi resource yang dibatasi oleh tenant. Saat kueri paralel selesai, proses anak backend dihapus dari tenant. Mekanisme ini menerapkan dan menghapus batas resource secara dinamis untuk kueri paralel.

Batas penggunaan CPU

Ini membatasi penggunaan CPU maksimum suatu tenant. Jika penggunaan CPU dari entitas yang ditetapkan ke tenant melebihi batas yang dikonfigurasi, kluster melakukan Pengendalian aliran terhadap proses yang bersangkutan untuk menegakkan batas tersebut.

Anda dapat mengatur cpu_rate_limit menggunakan fungsi polar_alter_resource_config. Nilai parameter bertipe float.

Catatan

Nilai parameter ini menentukan batas penggunaan CPU. Misalnya, nilai 0,3 merepresentasikan batas penggunaan 30% untuk satu core CPU, dan nilai 2 merepresentasikan batas penggunaan setara dengan dua core CPU penuh. Karena parameter ini menetapkan batas atas penggunaan CPU, jumlah nilai cpu_limit di seluruh konfigurasi resource tenant dapat melebihi kapasitas CPU fisik total (T). Artinya, cpu_limit_A + cpu_limit_B + cpu_limit_C + ... >= T.

Manajemen sumber daya memori

Karena memori merupakan resource kaku (swap dinonaktifkan), memori tidak dapat dikendalikan secara dinamis seperti halnya CPU. Jika batas keras untuk memori dilampaui, proses biasanya dihentikan untuk melepaskan resource. Manajemen memori untuk tenant mirip dengan kebijakan penanganan OOM sistem operasi. Namun, ini adalah proses OOM pada level tenant, bukan pada level seluruh database.

Batas penggunaan memori

Anda dapat mengatur mem_limit menggunakan fungsi polar_alter_resource_config. Mirip dengan batas penggunaan CPU, ini membatasi penggunaan memori maksimum. Jumlah batas tersebut dapat lebih besar dari atau sama dengan total memori yang tersedia. Ini mencakup dua kebijakan berikut:

  • Manajemen kelebihan resource aktif: Saat total penggunaan memori melebihi ambang batas eviksi aktif (total_mem_request_rate, default 80%), jika penggunaan memori tenant melebihi batas memori yang ditetapkan dalam konfigurasi resourcenya, sistem menghentikan session yang bersangkutan untuk melepaskan resource. Kesalahan kelebihan memori dikembalikan kepada user. Hal ini berlanjut hingga total penggunaan memori turun di bawah ambang batas eviksi aktif.

  • Manajemen kelebihan resource paksa: Untuk mencegah penggunaan memori berlebihan di kluster yang menyebabkan kesalahan OOM, saat total penggunaan memori melebihi ambang batas eviksi paksa (total_mem_limit_rate, default 95%), sistem melakukan traversal terhadap semua proses dan menghentikan session yang bersangkutan untuk melepaskan resource. Kesalahan kelebihan memori dikembalikan kepada user.

Saat batas memori memicu eviksi, session user dihentikan dan resource prosesnya dilepaskan. Hal ini dilakukan dengan mengirimkan sinyal SIGUSR2, dan kesalahan OOM tertentu dikembalikan kepada user. Jika proses latar belakang untuk kueri paralel melebihi batas memori, proses user yang bersangkutan dihentikan. Saat ini, hanya proses user yang dibatasi. Proses latar belakang sistem termasuk dalam system tenant dan tidak dihentikan secara aktif untuk melepaskan resource.