All Products
Search
Document Center

PolarDB:Multi-tenancy

Last Updated:Jul 02, 2025

Tema ini menjelaskan fitur multi-tenancy dari PolarDB for PostgreSQL.

Istilah

Penyewa: Dalam multi-tenancy, penyewa adalah entitas logis yang mewakili unit alokasi data dan sumber daya. Penyewa berada di tingkat yang lebih tinggi daripada kluster dan di tingkat yang lebih rendah daripada pengguna atau basis data. Beberapa akun atau basis data dapat sesuai dengan satu penyewa. Penyewa dibagi menjadi dua kategori:

  • Penyewa sistem adalah entitas administratif khusus. Secara umum, hanya satu penyewa sistem yang dibuat. Penyewa sistem dapat menggunakan sumber daya dari penyewa biasa. Ketika pengguna dari penyewa sistem terhubung ke basis data dan memiliki izin untuk mengakses kluster, pengguna tersebut dapat mengakses kluster semua penyewa.

  • Penyewa biasa: Sumber daya mereka sepenuhnya terisolasi dari sumber daya penyewa lainnya. Penyewa biasa harus dibuat oleh penyewa sistem.

Konfigurasi Sumber Daya: Anda dapat mengalokasikan sumber daya seperti CPU dan memori untuk setiap penyewa. Akun istimewa dapat menetapkan batasan sumber daya bagi setiap penyewa sesuai dengan kebutuhan bisnis.

Fitur konfigurasi sumber daya penyewa dirancang untuk membatasi jumlah sumber daya yang digunakan oleh satu atau beberapa proses. Di PolarDB for PostgreSQL, satu sesi setara dengan satu proses. Dalam satu sesi, hanya satu pengguna yang dapat masuk ke satu basis data. Proses, pengguna, dan basis data merupakan elemen dasar dari penyewa. Setiap proses, pengguna, dan basis data dapat dipetakan ke penyewa tertentu. Sebuah proses hanya dapat dimiliki oleh satu penyewa, sehingga mencegah statistik ganda dalam penggunaan sumber daya. Proses anak dari kueri paralel termasuk dalam penyewa yang memulai kueri tersebut. Dengan demikian, sumber daya dapat dibatasi dalam tiga dimensi berdasarkan atribut proses:

  • Proses: Proses koneksi (proses sesi) yang dimulai oleh pengguna. Proses-proses ini mencakup proses kueri paralel, tetapi tidak mencakup proses pembantu sistem.

  • Pengguna: Semua proses koneksi (proses sesi) yang dimulai oleh pengguna. Mereka mencakup proses kueri paralel, tetapi tidak mencakup proses pembantu sistem.

  • Basis Data: Semua proses koneksi (proses sesi) ke satu basis data yang dimulai oleh pengguna. Mereka mencakup proses kueri paralel, tetapi tidak mencakup proses pembantu sistem.

Catatan

Secara default, tidak ada batasan sumber daya yang diberlakukan pada proses sistem karena fungsionalitas khususnya.

Prasyarat

Kluster PolarDB for PostgreSQL Anda menjalankan mesin berikut:

PostgreSQL 14 (versi revisi 14.12.24.0 atau lebih baru)

Catatan

Anda dapat menjalankan pernyataan berikut untuk menanyakan versi minor kluster PolarDB for PostgreSQL:

SELECT version();

Parameter

Parameter

Deskripsi

Mode aplikasi

polar_max_tenants

Jumlah maksimum penyewa. Nilai valid: 0 hingga 65536. Nilai default: 32.

Pengaturan ini berlaku setelah kluster di-restart.

polar_resource_manager.enable_resource_manager

Menentukan apakah akan mengaktifkan proses manajer sumber daya untuk batas memori dan pencegahan OOM. Nilai default: on.

Pengaturan ini berlaku setelah kluster di-restart.

polar_resource_manager.database_name

Nama basis data yang menyimpan metadata penyewa. Nilai default: polardb_admin.

Pengaturan ini berlaku setelah kluster di-restart.

polar_resource_manager.stat_interval

Interval pengumpulan data. Unit: ms. Nilai valid: 10 hingga 10000. Nilai default: 500 ms.

Pengaturan ini berlaku setelah operasi reload dilakukan.

SELECT pg_reload_conf();

polar_resource_manager.total_mem_request_rate

Ambang batas untuk eviksi aktif. Nilai valid: 50% hingga 100%. Nilai default: 80%.

Pengaturan ini berlaku setelah operasi reload dilakukan.

SELECT pg_reload_conf();

polar_resource_manager.total_mem_limit_rate

Ambang batas untuk pemaksaan eviksi. Nilai valid: 50% hingga 100%. Nilai default: 95%.

Pengaturan ini berlaku setelah operasi reload dilakukan.

SELECT pg_reload_conf();

polar_resource_manager.total_mem_limit_remain_size

Ukuran memori cadangan. Nilai valid: 131072 hingga INT_MAX (nilai maksimum tipe data integer). Unit: KB. Nilai default: 256000.

Pengaturan ini berlaku setelah operasi reload dilakukan.

SELECT pg_reload_conf();

polar_resource_manager.enable_log

Menentukan apakah akan mengaktifkan log. Nilai valid:

  • ON (default)

  • OFF

Pengaturan ini berlaku setelah operasi reload dilakukan.

SELECT pg_reload_conf();

Penggunaan

Untuk menggunakan multi-tenancy, Anda harus membuat ekstensi polar_resource_manager di basis data tempat Anda menentukan parameter polar_resource_manager.database_name.

Penting

Jika Anda mengubah nama polar_resource_manager.database_name basis data yang menyimpan metadata penyewa, pengaturan multi-tenancy yang ada menjadi tidak valid.

CREATE EXTENSION polar_resource_manager;

Buat konfigurasi sumber daya

Anda dapat membuat konfigurasi sumber daya dengan menggunakan fungsi polar_create_resource_config.

SELECT polar_resource_manager.polar_create_resource_config('resource_config_name');

Parameter resource_config_name harus memenuhi persyaratan untuk nama basis data: Panjangnya bisa hingga 64 karakter. Jika tidak, mereka secara otomatis dipotong.

Hapus konfigurasi sumber daya

Anda dapat membuat konfigurasi sumber daya menggunakan fungsi polar_drop_resource_config.

SELECT polar_resource_manager.polar_drop_resource_config('resource_config_name');

Ubah konfigurasi sumber daya

Anda dapat mengubah konfigurasi sumber daya dengan menggunakan fungsi polar_alter_resource_config.

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

Nilai valid untuk parameter config_name:

  • cpu_rate_limit: Batas CPU, dalam satuan inti CPU.

  • mem_limit: Batas memori, dalam byte.

Buat penyewa

Anda dapat membuat penyewa dengan menggunakan fungsi polar_create_tenant.

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

  • Parameter tenant_name harus memenuhi persyaratan untuk nama basis data: Panjangnya bisa hingga 64 karakter. Jika tidak, mereka secara otomatis dipotong.

  • Nilai resource_config_name harus merupakan konfigurasi sumber daya yang ada. Jika tidak, penyewa tidak dapat dibuat.

Hapus penyewa

Anda dapat membuat tenant menggunakan fungsi polar_drop_tenant. Setelah tenant dihapus, konfigurasi sumber dayanya tetap ada.

SELECT polar_resource_manager.polar_drop_tenant('tenant_name');

Ubah penyewa

Anda dapat membuat tenant menggunakan fungsi polar_alter_tenant.

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

Nilai valid untuk parameter config_name:

  • name: Nama penyewa.

  • resource_config: Konfigurasi sumber daya.

Tetapkan basis data ke penyewa

Anda dapat menetapkan basis data ke penyewa dengan menggunakan fungsi polar_tenant_add_database. Basis data hanya dapat ditetapkan ke satu penyewa. Anda tidak dapat menetapkan basis data ke beberapa penyewa.

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

Lihat basis data dan penyewanya

Anda dapat melihat basis data dan penyewanya dengan menggunakan fungsi polar_tenants_dbs.

SELECT dbsname, tenantname FROM polar_resource_manager.polar_tenants_dbs;

Tetapkan pengguna ke penyewa

Anda dapat menetapkan pengguna ke penyewa dengan menggunakan fungsi polar_tenant_add_user. Pengguna hanya dapat ditetapkan ke satu penyewa. Anda tidak dapat menetapkan pengguna ke beberapa penyewa.

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

Lihat pengguna dan penyewanya

Anda dapat melihat pengguna dan penyewanya dengan menggunakan fungsi polar_tenants_users.

SELECT username, tenantname FROM polar_resource_manager.polar_tenants_users;

Tetapkan proses ke penyewa

Anda dapat menetapkan proses ke penyewa dengan menggunakan fungsi polar_tenant_add_process. Proses hanya dapat ditetapkan ke satu penyewa. Jika Anda menetapkan proses ke beberapa penyewa, hanya penetapan terakhir yang valid.

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

Lihat sumber daya penyewa

Anda dapat melihat sumber daya penyewa dengan menggunakan tampilan polar_all_resource_configs_detail.

SELECT * FROM polar_resource_manager.polar_all_resource_configs_detail;

Tabel berikut menjelaskan kolom dari tampilan.

Nama kolom

Tipe kolom

Deskripsi

tenantname

NAME

Nama penyewa.

resource_config_name

NAME

Nama konfigurasi sumber daya.

num_processes

INTEGER

Jumlah proses.

num_idle_processes

INTEGER

Jumlah proses idle.

num_active_processes

INTEGER

Jumlah proses aktif.

cpu_rate_limit

DOUBLE PRESISION

Sumber daya CPU maksimum penyewa.

per_process_cpu_rate_limit

DOUBLE PRESISION

Sumber daya CPU maksimum proses.

mem_limit

DOUBLE PRESISION

Sumber daya memori maksimum.

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

Pemanfaatan CPU (%).

Manajemen sumber daya CPU

Setelah Anda menambahkan proses, pengguna, dan basis data ke penyewa, Anda dapat menetapkan batas CPU dalam konfigurasi sumber daya. Jika proses anak latar belakang dapat dialokasikan, mereka ditetapkan ke penyewa yang memulai kueri paralel, sehingga proses anak latar belakang dan proses sesi keduanya tunduk pada batas sumber daya penyewa. Ketika kueri paralel selesai, proses anak latar belakang dihapus dari penyewa. Mekanisme ini secara dinamis memberlakukan dan menghapus batas sumber daya pada penyewa.

Batas penggunaan CPU

Anda dapat menetapkan batas penggunaan CPU maksimum untuk penyewa. Jika batas tersebut terlampaui, kluster akan menurunkan konsumsi CPU agar tetap berada dalam batas yang ditentukan.

Anda dapat menetapkan nilai cpu_rate_limit (bertipe data float) menggunakan fungsi polar_resource_manager.polar_alter_resource_config.

Catatan

Nilai parameter menunjukkan penggunaan CPU selama periode waktu tertentu. Misalnya, 0.3 menunjukkan penggunaan 30% dari satu core dan 2 menunjukkan penggunaan penuh dari 2 core. Karena Anda menentukan nilai penggunaan CPU maksimum di sini, jumlah nilai cpu_limit dapat lebih besar dari nilai spesifikasi kluster T: cpu_limit_A + cpu_limit_B + cpu_limit_C + ... >= T.

Manajemen sumber daya memori

Memori merupakan sumber daya kaku yang tidak dapat dibatasi secara dinamis seperti CPU. Jika batas penggunaan memori terlampaui, sistem akan menghentikan proses untuk melepaskan sumber daya memori. Mekanisme ini serupa dengan cara sistem operasi menangani masalah OOM, tetapi batasan ini diterapkan pada tingkat penyewa, bukan seluruh basis data.

Batas penggunaan memori

Anda dapat menetapkan nilai mem_limit (bertipe data float) menggunakan fungsi polar_resource_manager.polar_alter_resource_config. Karena nilai ini menentukan penggunaan memori maksimum, jumlah nilai mem_limit dapat melebihi spesifikasi kluster. Dua kebijakan berikut dapat diterapkan:

  • Manajemen Ambang Batas Aktif: Ketika ambang batas eviksi aktif (total_mem_request_rate, default 80%) terlampaui dan penggunaan memori penyewa melebihi batas yang ditentukan, sesi akan dihentikan untuk melepaskan sumber daya memori. Kesalahan kelebihan memori akan dikembalikan. Sistem akan terus menerapkan mekanisme ini hingga penggunaan memori berada di bawah ambang batas eviksi aktif.

  • Manajemen Ambang Batas Paksa: Jika ambang batas eviksi paksa (total_mem_limit_rate, default 95%) terlampaui, sistem akan menjelajahi semua proses, melepaskan sumber daya sesi, dan mengembalikan kesalahan kelebihan memori. Ini bertujuan untuk mencegah kesalahan OOM di kluster.

Selama eviksi, sesi pengguna dihentikan dan sumber daya yang digunakan oleh proses dilepaskan. Sistem menghentikan sesi dengan mengirimkan sinyal SIGUSR2 ke proses sesi serta mengembalikan kesalahan OOM tertentu. Jika penggunaan memori proses latar belakang dari kueri paralel melebihi batas memori, proses pengguna yang terkait akan dihentikan. Saat ini, hanya proses pengguna yang dapat dihentikan. Proses latar belakang sistem milik penyewa sistem (Pro) dan tidak dapat dihentikan untuk melepaskan sumber daya memori.