pg_profile adalah ekstensi pihak ketiga yang didukung oleh PolarDB for PostgreSQL dan . Ekstensi ini mengumpulkan statistik mengenai aktivitas yang intensif sumber daya di database target untuk membantu Anda menganalisis dan mengoptimalkan kinerja database tersebut. Ekstensi ini dibangun berdasarkan statistical views PostgreSQL dan beberapa ekstensi komunitas, serta ditulis sepenuhnya dalam PL/pgSQL tanpa memerlukan library atau perangkat lunak eksternal. Saat digunakan bersama ekstensi pg_cron, Anda dapat mengumpulkan data secara berkala dan memantau aktivitas yang intensif sumber daya.
Cakupan
Versi PolarDB for PostgreSQL berikut ini didukung:
PostgreSQL 16 (versi mesin minor 2.0.16.9.9.0 atau lebih baru)
PostgreSQL 15 (versi mesin minor 2.0.15.14.6.0 atau lebih baru)
PostgreSQL 14 (versi mesin minor 2.0.14.10.18.0 atau lebih baru)
Anda dapat melihat versi mesin minor di console atau dengan menjalankan pernyataan SHOW polardb_version;. Jika kluster Anda tidak memenuhi persyaratan versi mesin minor, upgrade the minor engine version.
Catatan
Pengumpulan data memerlukan ekstensi
pg_stat_statementsdanpg_stat_kcache. Pastikan keduanya telah ditambahkan ke parametershared_preload_librariespada database yang diambil sampelnya. Kedua ekstensi ini dimuat secara default.CatatanUntuk informasi selengkapnya tentang cara mengubah parameter shared_preload_libraries, lihat Set cluster parameters. Mengubah parameter ini akan me-restart kluster. Rencanakan operasi bisnis Anda dengan cermat sebelum melanjutkan.
Di database yang diambil sampelnya, Anda harus membuat ekstensi
pg_stat_statements. Anda juga dapat membuat ekstensipg_stat_kcacheuntuk mengumpulkan informasi tambahan.Menyimpan informasi sampel mengonsumsi ruang disk. Ekstensi ini memiliki mekanisme pembersihan otomatis, tetapi Anda tetap harus mengelola retensi data.
Satu operasi pengambilan sampel memakan waktu cukup lama. Oleh karena itu, hindari pengambilan sampel terlalu sering. Frekuensi yang disarankan adalah satu hingga dua kali per jam.
Penggunaan
Karena pembatasan keamanan dblink, database profil dan database server harus dibuat dalam kluster PolarDB for PostgreSQL atau yang sama.
Langkah-langkah berikut menjelaskan cara membuat database server dan database profil.
Saat pengambilan sampel, database profil mengirim permintaan pengambilan sampel ke database server. Setelah menerima permintaan tersebut, database server mengembalikan statistiknya ke database profil. Statistik tersebut kemudian disimpan dalam sebuah tabel, sehingga memungkinkan Anda mengambil statistik dari database lain melalui database profil.
Database server
Buat database server:
CREATE DATABASE server;Sambungkan ke database server dan buat ekstensi statistik:
\c server
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE EXTENSION IF NOT EXISTS pg_stat_kcache;Database profil
Buat database profil:
CREATE DATABASE profile;Hubungkan ke database profil dan buat ekstensi:
\c profile
CREATE EXTENSION IF NOT EXISTS pg_profile CASCADE;Buat koneksi pengambilan sampel
SELECT create_server(
'server',
'dbname=server channel_name=localhost user=<privileged_account_of_the_server_database> password=<password_for_the_account>'
);Tabel berikut menjelaskan parameter-parameternya.
Parameter | Contoh | Deskripsi |
server | server | Nama koneksi. Ini ditentukan oleh pengguna. |
dbname | server | Nama database. |
channel_name | localhost | Informasi koneksi. Hanya `localhost` yang didukung. |
user | test_user | Akun istimewa untuk kluster tempat database server berada. |
password | T123456! | Kata sandi untuk akun tersebut. |
Contoh berikut menunjukkan keluarannya:
show_servers
-------------------------------------------------------------------------------------
(server,"dbname=server channel_name=localhost user=test_user password=****",t,)
(1 row)Ubah informasi koneksi pengambilan sampel
SELECT set_server_connstr(
'server',
'dbname=server channel_name=localhost user=<privileged_account_of_the_profile_database> password=<password_for_the_account>'
);Tabel berikut menjelaskan parameter-parameternya.
Parameter | Contoh | Deskripsi |
server | server | Nama koneksi. Jangan ubah nilai ini. |
dbname | server | Nama database. |
channel_name | localhost | Informasi koneksi. Nilai ini tetap `localhost`. |
user | test_user | Akun istimewa untuk kluster tempat database server berada. |
password | T123456! | Kata sandi untuk akun tersebut. |
Lakukan pengumpulan data awal
SELECT take_sample();Contoh berikut menunjukkan keluarannya:
take_sample
-------------------------
(server,OK,00:00:02.81)
(1 row)Kumpulkan data lagi setelah melakukan uji stres pada database yang diambil sampelnya
Gunakan alat pgbench untuk menjalankan uji stres pada database server yang diambil sampelnya:
pgbench -s 100 -i server -U test_user -h pc-****.pg.rds.aliyuncs.com -p 5432Tabel berikut menjelaskan parameter-parameternya.
Parameter | Contoh | Deskripsi |
-s | 100 | `100` menunjukkan bahwa 10.000.000 baris dibuat di tabel `pgbench_accounts`. |
-i | server | Database yang akan diuji. |
-U | test_user | Akun istimewa untuk kluster tempat database server berada. |
-h | pc-****.pg.rds.aliyuncs.com | Endpoint kluster tempat database server berada. |
-p | 5432 | Port kluster. Tentukan nomor port yang ditampilkan di console. |
Sambungkan ke database profil dan kumpulkan data lagi:
SELECT take_sample();Lihat data yang dikumpulkan:
SELECT * FROM show_samples('server');Contoh berikut menunjukkan keluarannya:
sample | sample_time | sizes_collected | dbstats_reset | bgwrstats_reset | archstats_reset
--------+------------------------+-----------------+---------------+-----------------+-----------------
1 | 2024-02-23 07:29:53+00 | t | | |
2 | 2024-02-23 08:11:39+00 | t | | |Hasilkan laporan dari hasil yang dikumpulkan
Anda dapat mengekspor data yang dikumpulkan ke file lokal menggunakan salah satu dari dua metode berikut.
Metode 1: Jalankan pernyataan SQL berikut di command line interaktif tool client
psqluntuk menghasilkan file output.\o report_1_2.html SELECT get_report('server',1,2);Metode 2: Gunakan command line untuk menginstruksikan
psqlagar menulis data langsung ke file.psql -Aqtc "SELECT get_report('server',1,2)" \ -o report_server_1_2.html -d profile \ -h <endpoint_of_the_profile_database_cluster> \ -p <port_of_the_database_cluster> \ -U <privileged_account_for_the_profile_database_cluster>