
Halo, Habr! Saya mempersembahkan kepada Anda terjemahan artikel asli
“Tolok ukur PostgreSQL di FreeBSD, CentOS, Ubuntu Debian, dan openSUSE” oleh Martin Kováčik. Ini memeriksa tes DBMS PostgreSQL 10.1 di lingkungan yang dekat dengan kondisi nyata pada berbagai sistem unix.
Terjemahan
Dalam posting ini, saya akan menunjukkan hasil tes PostgreSQL 10.1 yang baru dirilis. Saya memeriksa DB pada OS ini (semua 64-bit):
- Ubuntu 16.04 , kernel 4.10.0-38-generik
- openSUSE 42.3, kernel 4.4.87-25-default
- CentOS 7.4 , kernel 3.10.0-693.2.2.el7.x86_64
- Debian 9.2 , kernel 4.9.0-4-amd64
- FreeBSD 11.1
Metodologi uji
Tujuan dari tes ini adalah untuk mengukur kinerja PostgreSQL dalam kondisi yang mirip dengan penyebaran produksi (khas):
- klien terhubung melalui kolam koneksi untuk memastikan bahwa tidak ada koneksi ulang permanen ke database (saya tidak menggunakan kolam koneksi, saya tidak menggunakan flag -C pgbench sebagai gantinya)
- klien terhubung melalui jaringan, bukan melalui soket unix
- Direktori data PostgreSQL terletak di mirror RAID 1
Untuk masing-masing OS yang diuji, basis data kontrol ~ 74 GB dibuat:
pgbench -i -s 5000 pgbench
Infrastruktur pengujian terdiri dari dua server khusus yang terhubung ke jaringan 1 Gbps:
- EX41-SSD: Intel i7-6700, 4 core, 8 thread, 32 GB DDR4 RAM, digunakan untuk menghasilkan query SQL menggunakan pgbench
- PX121-SSD: Intel Xeon E5-1650 v3, 6 core, 12 threads, 256 GB RAM DDR4 ECC, 2 x 480 GB SATA 6 Gb / s, pusat data dari seri SSD, digunakan sebagai server PostgreSQL
Saya tertarik pada kombinasi tes ini:
- Hanya baca 32 GB : uji baca-saja (hanya sampel tanpa mengubah data), kumpulan data tidak masuk ke dalam cache PostgreSQL
- 200 GB read-only : read-only test, kumpulan data di-cache dalam PostgreSQL
- 32 GB TCP-B : baca-tulis, kumpulan data tidak sesuai dengan cache PostgreSQL
- TCP-B 200 GB : baca, tulis, kumpulan data di-cache dalam PostgreSQL
pengaturan pgbench
Program pgbench versi 10.1, berjalan pada komputer FreeBSD 11.1 yang terpisah, digunakan untuk menghasilkan beban. Script tes terdiri dari tiga bagian: vakum + pemanasan, tes baca-saja dan tes baca-tulis. Sebelum setiap tes baca-tulis, tabel pgbench dihapus (flag -v digunakan). Selama pengujian, saya secara bertahap meningkatkan jumlah klien yang mengakses database.
Pengaturan Server PostgreSQL
Untuk distribusi Linux, PostgreSQL diinstal pada sistem file ext4 dalam pengaturan RAID1 (perangkat lunak RAID menggunakan mdraid) pada dua SSD dengan
atime dinonaktifkan. Dalam kasus FreeBSD, sistem file OpenZFS digunakan pada dua SSD ketika mengkonfigurasi RAID1. Dataset ZFS dengan data PostgreSQL dibuat dengan parameter berikut:
zfs get recordsize,logbias,primarycache,atime,compression zroot/var/db/postgres NAME PROPERTY VALUE SOURCE zroot/var/db/postgres recordsize 8K local zroot/var/db/postgres logbias throughput local zroot/var/db/postgres primarycache all default zroot/var/db/postgres atime off inherited from zroot zroot/var/db/postgres compression lz4 local
Konfigurasi server PostgreSQL sama pada semua sistem operasi kecuali jalur file (setiap sistem operasi menggunakan struktur direktori sendiri). Isi file
postgresql.conf (pengaturan dasar) untuk instance 32 GB:
autovacuum = off default_statistics_target = 100 maintenance_work_mem = 1GB checkpoint_completion_target = 0.9 effective_cache_size = 24GB work_mem = 104MB wal_buffers = 16MB shared_buffers = 8GB max_connections = 300
Isi file
postgresql.conf untuk instance 200 GB:
autovacuum = off default_statistics_target = 100 maintenance_work_mem = 2GB checkpoint_completion_target = 0.9 effective_cache_size = 144GB work_mem = 640MB wal_buffers = 16MB shared_buffers = 48GB max_connections = 300
Benchmarking
Saya menguji PostgreSQL pada lima sistem operasi yang berbeda dalam dua mode - read-only dan TCP-B (read-write) dengan dua profil memori yang berbeda. Pengujian setiap OS memakan waktu sekitar 30 jam (tidak termasuk waktu yang diperlukan untuk mengkonfigurasi OS). Hasil dari setiap menjalankan pgbench disimpan untuk evaluasi nanti.
Hasil - Hanya Baca




Hasil - TCP-B




Ringkasan
Tes menunjukkan bahwa perbedaan antara berbagai distribusi GNU / Linux tidak terlalu signifikan. OpenSUSE 42.3 adalah sistem operasi terbaik dalam pengujian read-only, sementara FreeBSD berlari sekitar 40% lebih lambat. Sayangnya, saya tidak tahu apa yang menyebabkan kinerja FreeBSD biasa-biasa saja.
Gambaran yang lebih realistis tentang kinerja PostgreSQL diperoleh dalam uji baca-tulis (TCP-B). Di antara distribusi GNU / Linux, Centos 7.4 adalah yang tercepat dan Debian 9.2 yang paling lambat. Saya sangat terkejut dengan FreeBSD 11.1, yang berjalan lebih dari dua kali lebih cepat dari Linux terbaik, terlepas dari kenyataan bahwa FreeBSD menggunakan ZFS, yang merupakan sistem file copy-on-write. Saya berasumsi bahwa perbedaan ini disebabkan oleh biaya perangkat lunak RAID di Linux, jadi saya melakukan tiga tes TCP-B lagi untuk 100 klien secara bersamaan, kali ini tanpa perangkat lunak RAID:
- FreeBSD 11.1 + UFS : 5623.86 TPS
- FreeBSD 11.1 + ZFS : 8331.85 TPS
- CentOS 7.4 + ext4 : 8987.65 TPS
Hasilnya menunjukkan inefisiensi Linux SW RAID (atau efisiensi ZFS RAID). Performa CentOS 7.4 tanpa SW RAID hanya sedikit lebih tinggi dari FreeBSD 11.1 dengan ZFS RAID (untuk TCP-B dan 100 klien bersamaan).