全部产品
Search
文档中心

ApsaraDB RDS:Gunakan ekstensi pg_profile untuk mengumpulkan statistik aktivitas yang membebani sumber daya

更新时间:Jul 19, 2025

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.

    Catatan

    PostgreSQL 17 belum didukung.

  • Instans RDS menjalankan versi mesin minor 20230830 atau lebih baru.

    Penting
  • Akun 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

Catatan

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.

Catatan

Database profile dan database server dapat dibuat pada instans RDS yang berbeda atau pada instans RDS yang sama.

Database Server

  1. Buat database server.

    CREATE DATABASE server;
  2. Hubungkan ke database server dan buat ekstensi.

    \c server
    CREATE EXTENSION pg_stat_statements;
    CREATE EXTENSION pg_stat_kcache;
    Catatan

    Ekstensi pg_stat_kcache bergantung pada ekstensi pg_stat_statements. Kedua ekstensi perlu dimuat saat database mulai. Pastikan bahwa pg_stat_statements dan pg_stat_kcache telah ditambahkan ke parameter shared_preload_libraries. Untuk informasi tentang cara memodifikasi parameter shared_preload_libraries, lihat Setel Parameter.

  3. Jalankan perintah \dx untuk 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

  1. Buat database profile.

    CREATE DATABASE profile;
  2. Hubungkan ke database profile dan buat ekstensi.

    \c profile
    CREATE EXTENSION plpgsql;
    CREATE EXTENSION dblink;
    CREATE EXTENSION pg_profile;
  3. Jalankan perintah \dx untuk 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
     ...
  4. 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:

    Catatan

    Untuk 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)
    Catatan

    Setelah Anda membuat koneksi server, koneksi ke database profile secara otomatis dibuat. Koneksi ini dinamai local dalam contoh keluaran di atas.

  5. 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.

  6. 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)
  7. Lakukan uji stres pada database server dan kumpulkan data lagi.

    1. Jalankan perintah berikut di CLI untuk melakukan uji stres pada database server.

      Catatan

      Perintah 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 5432

      Parameter

      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.

    2. Hubungkan ke instans RDS tempat database profile dibuat dan kumpulkan data lagi.

      SELECT take_sample();
    3. 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               |               |                 |
  8. 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>