PostgreSQL dan Performa
Performa adalah salah satu persyaratan utama dalam desain arsitektur perangkat lunak, dan telah menjadi fokus pengembang PostgreSQL sejak awal, juga ditunjukkan dalam komitmen sumber Git PostgreSQL berikut:
commit d31084e9d1118b25fd16580d9d8c2924b5740dff
Author: Marc G. Fournier <[email protected]>
Date: Tue Jul 9 06:22:35 1996 +0000
Postgres95 1.01 Distribution - Virgin Sources
[...]
diff --git a/src/backend/access/heap/stats.c b/src/backend/access/heap/stats.c
new file mode 100644
index 0000000000..d41d01ac1b
--- /dev/null
+++ b/src/backend/access/heap/stats.c
@@ -0,0 +1,329 @@
+/*-------------------------------------------------------------------------
+ *
+ * stats.c--
+ * heap access method debugging statistic collection routines
+ *
+ * Copyright (c) 1994, Regents of the University of California
[...]
+ * Also note that this routine probably shouldn't have to exist, and does
+ * screw up the call graph rather badly, but we are wasting so much time and
+ * system resources being massively general that we are losing badly in our
+ * performance benchmarks.
+ */
PostgreSQL mencapai kinerja dengan menerapkan berbagai fitur:
- Beberapa jenis indeks
- Perencana dan pengoptimal kueri yang dapat memanfaatkan sistem multiprosesor
- MVCC
- Partisi tabel
Pilihan Lingkungan
Dengan banyaknya pilihan yang tersedia saat ini, muncul banyak pertanyaan:
- Di tempat, atau di awan?
- Bare metal atau virtual?
- Perangkat keras bermerek atau buat sendiri?
- Bagaimana fungsi tingkat rendah PostgreSQL atau fsync memengaruhi kinerja perangkat keras?
- Disk lokal atau penyimpanan bersama?
- Tunable sistem operasi apa yang perlu disetel?
Sekali lagi, wiki PostgreSQL adalah titik awal yang sangat baik untuk semua hal kinerja.
Apa Hal Utama yang Harus Diperhatikan?
Karena ada banyak literatur di luar sana yang menyentuh berbagai aspek penyetelan kinerja PostgreSQL dan desain sistem (petunjuk:cari halaman untuk xfs), blog ini tidak dimaksudkan untuk menyelami topik-topik yang sudah dibahas, melainkan sebuah perspektif sysadmin tentang di mana untuk memulai ketika fokus utama adalah menghindari pertikaian sumber daya. Saya juga akan menunjukkan banyak referensi yang membahas masalah tertentu secara lebih rinci. Saran ahli di semua bidang yang penting untuk kinerja PostgreSQL tersedia melalui banyak perusahaan yang menawarkan Layanan Profesional.
Mari kita mulai!
Pengumpulan Informasi
Dengan asumsi instalasi default, dan mengetahui bahwa PostgreSQL tidak mencoba untuk disetel dengan baik di luar kotak dan bahkan mungkin ada beberapa kebiasaan, langkah ini melibatkan penyiapan alat pemantauan yang diperlukan.
Pemantauan yang baik sangat penting dalam memahami aplikasi dan dapat dengan cepat melacak sumber daya yang terpengaruh, dan ini terutama berlaku untuk penyedia cloud di mana akses ke host database mungkin tidak tersedia untuk menjalankan benchmark untuk CPU atau I/O:
Gbr.1 — SlideShare, Jignesh Shah, Praktik Terbaik dengan Managed PostgreSQL di CloudBereaksi terhadap peringatan kinerja sistem
Alat pemantauan akan membuat grafik dan memperingatkan indikator kinerja sistem:
CPU:
- Peringatan — Penggunaan tinggi menunjukkan kueri yang berjalan lama.
- Dampak — Waktu respons aplikasi.
- Tindakan — Tinjau metrik metrik statistik database untuk mengidentifikasi kueri yang perlu disesuaikan.
I/O:
- Peringatan — Angka atau bacaan tinggi.
- Dampak — Waktu respons aplikasi.
- Tindakan — Tambahkan replika baca lainnya. Tinjau metrik statistik database untuk mengidentifikasi kueri yang berjalan lama.
- Peringatan — Jumlah penulisan yang tinggi.
- Dampak — Waktu respons aplikasi.
- Tindakan — Menyetel parameter GUC shared_buffers, work_mem dan maintenance_work_mem. Tune checkpointer dan pastikan autovacuum disetel dengan benar. Jika PostgreSQL diinstal pada perangkat kerasnya sendiri, konfigurasikan tablespace dan/atau pertimbangkan sharding tetapi pahami peringatan sharding.
Memori:
- Peringatan — Penggunaan memori tinggi.
- Dampak — Performa I/O.
- Tindakan — Tinjau metrik metrik statistik database untuk mengidentifikasi kueri yang perlu disesuaikan.
Jaringan:
- Peringatan — Latensi Tinggi. Biasanya ini adalah masalah DBaaS.
- Dampak — Klien, replikasi.
- Tindakan — Pindahkan host database lebih dekat ke server frontend.
- Peringatan — Jumlah koneksi yang tinggi.
- Dampak — Klien.
- Tindakan — Pertimbangkan untuk menggunakan polling koneksi.
Indikator kinerja internal basis data
Tampilan pg_* adalah jendela untuk kinerja mesin database, dan aplikasi manajemen PostgreSQL telah ditulis untuk membantu menghubungkan kekayaan informasi yang tersedia melalui berbagai kueri SQL. Ada ekstensi tambahan dan sering kali terintegrasi atau tersedia sebagai plugin.
Menggunakan alat tersebut menyederhanakan tugas DBA dan memastikan bahwa praktik terbaik diikuti saat menyiapkan dan mengonfigurasi cluster database.
Statistik Basis Data
Alat pemantauan seperti ClusterControl menggunakan statistik aktivitas basis data untuk membantu DBA dengan penyetelan kinerja:
Gbr.2 — Beberapa, Hal Utama untuk Dipantau di PostgreSQL — Menganalisis Beban Kerja AndaUnduh Whitepaper Hari Ini Pengelolaan &Otomatisasi PostgreSQL dengan ClusterControlPelajari tentang apa yang perlu Anda ketahui untuk menerapkan, memantau, mengelola, dan menskalakan PostgreSQLUnduh WhitepaperPenyesuaian Kueri
Dimulai dengan versi 9.5 PostgreSQL mencakup peningkatan kinerja kueri yang cukup besar seperti indeks BRIN dan kueri paralel:
Gbr.3 — Kuadran ke-2, Thomas Vondra, Peningkatan Performa di PostgreSQL 9.5 (dan seterusnya)Mengunci
Concurrency Control mendedikasikan seluruh bab dalam dokumentasi PostgreSQL. Gunakan alat pemantauan untuk diberi tahu saat jumlah penguncian atau durasi penguncian melebihi ambang batas dan selesaikan masalah dengan mencari indeks yang hilang, meninjau kode aplikasi, atau dengan beralih ke polling koneksi.
Pemuatan Massal
synchronous_commit dapat dimatikan selama impor data besar. Opsi lainnya dibahas di bagian dokumentasi PostgreSQL Mengisi Database.
Kesimpulan
Penyetelan kinerja PostgreSQL adalah tugas yang kompleks. Kompleksitasnya berasal dari banyak merdu yang tersedia, yang merupakan argumen kuat yang mendukung PostgreSQL. Tidak ada peluru perak untuk memecahkan masalah kinerja, melainkan spesifikasi aplikasi yang pada akhirnya menentukan persyaratan penyetelan. Oleh karena itu alat pemantauan dapat membantu dalam mendapatkan wawasan kinerja relatif terhadap kinerja sistem dan selanjutnya memungkinkan untuk mengidentifikasi area spesifik PostgreSQL yang memerlukan penyetelan serta kueri SQL yang memerlukan pengoptimalan. Selain itu, sistem manajemen basis data dapat membantu penyiapan dan administrasi PostgreSQL untuk memastikan bahwa praktik terbaik diikuti.