ApsaraDB RDS for PostgreSQL menyediakan ekstensi pg_profile untuk membantu Anda mengumpulkan statistik aktivitas yang membebani sumber daya dalam database serta menganalisis dan mengoptimalkan database tersebut.
Deskripsi Ekstensi
Ekstensi ini didasarkan pada tampilan statistik PostgreSQL (pg_stat_statements) dan plugin komunitas (pg_stat_kcache). Seluruhnya ditulis dalam PL/pgSQL dan tidak memerlukan pustaka atau perangkat lunak eksternal apa pun. Saat digunakan bersama dengan plugin pg_cron, ekstensi ini dapat mengumpulkan statistik aktivitas yang membebani sumber daya.
Sebelum Anda Memulai
Instans RDS harus memenuhi persyaratan berikut:
Instans RDS menjalankan PostgreSQL 10 atau versi lebih baru.
CatatanPostgreSQL 17 belum didukung.
Instans RDS menjalankan versi mesin minor 20230830 atau lebih baru.
PentingAkun istimewa telah dibuat.
Catatan
Plugin ini memerlukan plugin pg_stat_statements untuk diaktifkan terlebih dahulu. Anda juga dapat mengaktifkan plugin pg_stat_kcache untuk mengumpulkan lebih banyak informasi.
Penyimpanan informasi yang dikumpulkan membutuhkan ruang disk. Ekstensi pg_profile menyediakan mekanisme pembersihan data otomatis. Pastikan data Anda disimpan dengan benar.
Ekstensi pg_profile memerlukan waktu yang lama untuk mengumpulkan statistik. Kami menyarankan Anda mengatur frekuensi pengumpulan menjadi sekali atau dua kali setiap jam.
Membuat dan Menghapus Ekstensi
Kami menyarankan Anda menggunakan akun istimewa untuk mengeksekusi pernyataan yang disediakan dalam bagian ini.
Buat ekstensi:
CREATE EXTENSION pg_profile;Hapus ekstensi:
DROP EXTENSION pg_profile;
Penggunaan
Dalam contoh ini, database bernama server dan profile dibuat.
Selama pengumpulan data, database profile mengirim permintaan ke database server. Setelah database server menerima permintaan, database server mengumpulkan informasinya sendiri dan mengembalikan hasil pengumpulan ke database profile. Database profile menyimpan hasil yang dikembalikan dalam sebuah tabel. Dengan cara ini, Anda dapat memperoleh informasi tentang database lain dari database profile.
Database profile dan database server dapat dibuat pada instans RDS yang berbeda atau pada instans RDS yang sama.
Database Server
Buat database server.
CREATE DATABASE server;Hubungkan ke database server dan buat ekstensi.
\c server CREATE EXTENSION pg_stat_statements; CREATE EXTENSION pg_stat_kcache;CatatanEkstensi pg_stat_kcache bergantung pada ekstensi pg_stat_statements. Kedua ekstensi perlu dimuat saat database mulai. Pastikan bahwa
pg_stat_statementsdanpg_stat_kcachetelah ditambahkan ke parameter shared_preload_libraries. Untuk informasi tentang cara memodifikasi parameter shared_preload_libraries, lihat Setel Parameter.Jalankan perintah
\dxuntuk melihat detail ekstensi yang dibuat.Name | Version | Schema | Description --------------------+---------+------------+------------------------------------------------------------------------ pg_stat_kcache | 2.2.1 | public | Pengumpulan statistik kernel pg_stat_statements | 1.9 | public | lacak statistik perencanaan dan eksekusi semua pernyataan SQL yang dieksekusi ...
Database Profile
Buat database profile.
CREATE DATABASE profile;Hubungkan ke database profile dan buat ekstensi.
\c profile CREATE EXTENSION plpgsql; CREATE EXTENSION dblink; CREATE EXTENSION pg_profile;Jalankan perintah
\dxuntuk melihat detail ekstensi yang dibuat.Name | Version | Schema | Description ------------+---------+------------+-------------------------------------------------------------- dblink | 1.2 | public | hubungkan ke database PostgreSQL lain dari dalam database pg_profile | 4.0 | public | Repositori profil beban PostgreSQL dan pembuat laporan plpgsql | 1.0 | pg_catalog | Bahasa prosedural PL/pgSQL ...Buat koneksi server.
SELECT create_server('server', 'host=<Titik akhir instans RDS tempat database server dibuat> dbname=server port=<nomor port> user=<Akun istimewa database server> password=<kata sandi akun>');Parameter
Contoh
Deskripsi
server
server
Nama koneksi. Anda dapat menggunakan nama kustom.
host
127.0.0.1
Titik akhir instans RDS tempat database server dibuat.
Jika database profile dan database server dibuat pada instans RDS yang sama, atur parameter ini ke
127.0.0.1.Jika database profile dan database server dibuat pada instans RDS yang berbeda dalam VPC yang sama, atur parameter ini ke titik akhir internal instans RDS tempat database server dibuat.
Jika database profile dan database server dibuat pada instans RDS yang berbeda dalam VPC yang berbeda:
Instans RDS tempat database profile dibuat harus dikonfigurasi dengan gerbang NAT dan disambungkan ke alamat IP publik.
Instans RDS tempat database server dibuat harus memiliki titik akhir publik. Atur parameter ini ke titik akhir publik instans RDS tempat database server dibuat.
CatatanUntuk informasi tentang cara memperoleh titik akhir internal dan publik instans RDS, lihat Lihat dan modifikasi titik akhir dan nomor port instans.
dbname
server
Nama database.
port
3002
Nomor port instans RDS tempat database server dibuat.
Jika database profile dan database server dibuat pada instans RDS yang sama, Anda dapat memperoleh parameter ini dengan menjalankan perintah SQL
SHOW PORT;.Jika database profile dan database server dibuat pada instans RDS yang berbeda dalam VPC yang sama, atur parameter ini ke nomor port internal instans RDS tempat database server dibuat.
Jika database profile dan database server dibuat pada instans RDS yang berbeda dalam VPC yang berbeda, atur parameter ini ke nomor port publik instans RDS tempat database server dibuat.
user
test_user
Nama pengguna akun istimewa untuk instans RDS tempat database server dibuat.
password
T123456!
Kata sandi akun.
Contoh keluaran:
show_servers --------------------------------------------------------------------------------------- (local,"dbname=profile port=3002",t,) (server,"host=127.0.0.1 dbname=server port=3002 user=test_user password=****",t,) (2 rows)CatatanSetelah Anda membuat koneksi server, koneksi ke database profile secara otomatis dibuat. Koneksi ini dinamai
localdalam contoh keluaran di atas.Ubah informasi koneksi database profile dan konfigurasikan kata sandi.
SELECT set_server_connstr('local','host=127.0.0.1 dbname=profile port=3002 user=<Akun istimewa database profile> password=<kata sandi akun>');Parameter
Contoh
Deskripsi
server
local
Nama koneksi. Anda tidak perlu mengubah nama.
host
127.0.0.1
Atur parameter ini ke 127.0.0.1.
dbname
profile
Nama database.
port
3002
Anda dapat memperoleh parameter ini dengan menjalankan perintah SQL
SHOW PORT;.user
test_user
Nama pengguna akun istimewa untuk instans RDS tempat database profile dibuat.
password
T123456!
Kata sandi akun.
Kumpulkan data untuk pertama kalinya.
SELECT take_sample();Contoh keluaran:
take_sample ------------------------- (server,OK,00:00:00.52) (local,OK,00:00:00.51) (2 rows)Lakukan uji stres pada database server dan kumpulkan data lagi.
Jalankan perintah berikut di CLI untuk melakukan uji stres pada database server.
CatatanPerintah berikut harus dijalankan di CLI. Pastikan bahwa klien PostgreSQL dan pgbench telah diinstal. pgbench adalah program sederhana yang menjalankan tes benchmark pada PostgreSQL. Untuk informasi lebih lanjut tentang cara menggunakan perintah ini, lihat Dokumentasi PostgreSQL.
pgbench -s 100 -i server -U test_user -h pgm-****.pg.rds.aliyuncs.com -p 5432Parameter
Contoh
Deskripsi
-s
100
Jumlah baris data yang ingin Anda buat. Misalnya, nilai 100 menunjukkan bahwa 10.000.000 baris data dibuat dalam tabel pgbench_accounts.
-i dbname
server
Nama database tempat Anda ingin melakukan uji stres.
-U
test_user
Nama pengguna akun istimewa untuk instans RDS tempat database server dibuat.
-h
pgm-****.pg.rds.aliyuncs.com
Titik akhir instans RDS tempat database server dibuat.
-p
5432
Port instans.
Hubungkan ke instans RDS tempat database profile dibuat dan kumpulkan data lagi.
SELECT take_sample();Lihat data yang dikumpulkan.
SELECT * FROM show_samples('server');Hasil berikut dikembalikan.
sample | sample_time | sizes_collected | dbstats_reset | bgwrstats_reset | archstats_reset --------+------------------------+-----------------+---------------+-----------------+----------------- 1 | 2022-09-30 02:14:07+00 | t | | | 2 | 2022-09-30 02:16:59+00 | t | | | 3 | 2022-09-30 02:17:58+00 | t | | |
Hasilkan laporan dari hasil pengumpulan.
Anda dapat menggunakan salah satu metode berikut untuk mengekspor hasil pengumpulan ke komputer Anda:
Jalankan perintah berikut di psql dalam database profile:
\o report_2_3.html SELECT get_report('server',2,3);Jalankan perintah berikut di CLI pada komputer Anda:
psql -Aqtc "SELECT profile.get_report('server',2,3)" -o report_server_2_3.html -d profile -h <Titik akhir instans RDS tempat database profile dibuat> -p 5432 -U <Akun istimewa instans RDS tempat database profile dibuat>