Benchmarking PostgreSQL dengan halaman Linux yang besar

Kernel Linux menyediakan berbagai opsi konfigurasi yang dapat mempengaruhi kinerja. Ini semua tentang mendapatkan konfigurasi yang tepat untuk aplikasi dan beban kerja Anda. Seperti basis data lainnya, PostgreSQL menggunakan kernel Linux untuk konfigurasi optimal. Pengaturan yang disetel dengan buruk dapat menghasilkan kinerja yang buruk. Karena itu, penting bagi Anda untuk mengukur kinerja basis data setelah setiap sesi penyetelan untuk menghindari penurunan kinerja. Dalam salah satu publikasi saya sebelumnya, “Mengatur Parameter Kernel Linux untuk Optimasi PostgreSQL,” saya menjelaskan beberapa parameter kernel Linux yang paling berguna dan bagaimana mereka dapat membantu Anda meningkatkan kinerja database. Sekarang saya akan membagikan hasil pengujian saya setelah mengatur halaman Linux besar dengan beban kerja PostgreSQL yang berbeda. Saya melakukan serangkaian tes untuk berbagai ukuran beban PostgreSQL dan jumlah klien secara simultan.

Mesin uji


  • Server Supermicro:
    • Intel® Xeon® CPU E5-2683 v3 @ 2.00GHz
    • 2 soket / 28 core / 56 utas
    • Memori: 256GB RAM
    • Penyimpanan: SAMSUNG SM863 1.9TB Enterprise SSD
    • Filesystem: ext4 / xfs
  • OS: Ubuntu 16.04.4, kernel 4.13.0-36-generik
  • PostgreSQL: versi 11

Pengaturan kernel Linux


Saya menggunakan pengaturan kernel default tanpa optimasi / penyetelan selain menonaktifkan halaman besar transparan (Transparent HugePages). Halaman besar transparan diaktifkan secara default dan menyoroti ukuran halaman, yang mungkin tidak direkomendasikan untuk digunakan oleh database. Basis data biasanya membutuhkan halaman besar dan berukuran tetap yang tidak tercakup oleh halaman besar yang transparan. Karena itu, selalu disarankan agar Anda menonaktifkan fitur ini dan menggunakan halaman besar klasik secara default.

Pengaturan PostgreSQL


Saya menggunakan pengaturan PostgreSQL yang seragam untuk semua tes untuk merekam beban kerja PostgreSQL yang berbeda dengan pengaturan yang berbeda untuk halaman Linux yang besar. Berikut ini adalah pengaturan PostgreSQL yang digunakan untuk semua tes:

postgresql.conf

shared_buffers = '64GB' work_mem = '1GB' random_page_cost = '1' maintenance_work_mem = '2GB' synchronous_commit = 'on' seq_page_cost = '1' max_wal_size = '100GB' checkpoint_timeout = '10min' synchronous_commit = 'on' checkpoint_completion_target = '0.9' autovacuum_vacuum_scale_factor = '0.4' effective_cache_size = '200GB' min_wal_size = '1GB' wal_compression = 'ON' 

Skema pengujian


Dalam pengujian, skema pengujian memainkan peran penting. Semua tes dilakukan tiga kali selama 30 menit untuk setiap putaran. Saya mengambil rata-rata dari ketiga indikator ini. Pengujian dilakukan dengan menggunakan alat pengujian kinerja PostgreSQL pgbench . pgbench bekerja dengan faktor skala, dengan satu faktor skala sekitar 16 MB beban kerja.

Halaman Besar (HugePages)


Linux, secara default, menggunakan memori 4K halaman bersama dengan halaman besar. BSD memiliki Halaman Super, sedangkan Windows memiliki Halaman Besar. PostgreSQL hanya mendukung halaman besar (Linux). Dalam kasus penggunaan memori tinggi, halaman kecil mengurangi kinerja. Dengan menginstal halaman besar, Anda meningkatkan memori yang dialokasikan untuk aplikasi dan, karenanya, mengurangi biaya operasional yang timbul selama alokasi / pertukaran; yaitu, Anda meningkatkan produktivitas menggunakan halaman besar.

Berikut adalah pengaturan untuk halaman besar saat menggunakan ukuran halaman besar 1 GB. Anda selalu dapat memperoleh informasi ini dari / proc.

$ cat / proc / meminfo | grep -sangat besar

 AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 100 HugePages_Free: 97 HugePages_Rsvd: 63 HugePages_Surp: 0 Hugepagesize: 1048576 kB 

Untuk informasi lebih lanjut tentang halaman besar, baca posting blog saya sebelumnya.

https://www.percona.com/blog/2018/08/29/tune-linux-kernel-parameters-for-postgresql-optimization/

Biasanya, halaman besar berukuran 2 MB dan 1 GB, jadi masuk akal untuk menggunakan 1 GB alih-alih 2 MB yang jauh lebih kecil.

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-memory-transhuge
https://kerneltalks.com/services/what-is-huge-pages-in-linux/

Hasil tes


Tes ini menunjukkan efek keseluruhan dari berbagai ukuran halaman besar. Suite pengujian pertama dibuat dengan ukuran halaman default di Linux 4K tanpa menyertakan halaman besar. Perhatikan bahwa halaman besar transparan juga dinonaktifkan dan tetap dinonaktifkan di semua tes ini.

Kemudian set tes kedua dilakukan pada halaman besar 2 MB. Akhirnya, set tes ketiga berjalan dengan halaman besar 1 GB.

Semua tes ini dilakukan dalam PostgreSQL versi 11. Set termasuk kombinasi ukuran yang berbeda dari database dan klien. Grafik di bawah ini menunjukkan hasil kinerja komparatif untuk tes ini dengan TPS (transaksi per detik) di sepanjang sumbu Y, ukuran basis data dan jumlah klien per ukuran basis data di sepanjang sumbu X.



Dapat dilihat dari grafik di atas bahwa peningkatan kinerja dengan halaman besar meningkat dengan jumlah klien dan ukuran database, jika ukuran tetap dalam buffer yang sebelumnya dialokasikan dalam memori bersama.

Tes ini menunjukkan TPS dibandingkan dengan jumlah klien. Dalam hal ini, ukuran basis data adalah 48 GB. Pada sumbu Y, kami memiliki TPS, dan pada sumbu X, kami memiliki jumlah klien yang terhubung. Ukuran basis data cukup kecil untuk muat dalam buffer bersama yang diatur ke 64 GB.



Jika halaman besar diatur ke 1 GB, maka semakin banyak klien, semakin tinggi perolehan kinerja relatif.

Grafik berikut ini sama dengan yang di atas, kecuali untuk ukuran basis data 96 GB. Ini melebihi ukuran buffer bersama, yang diatur ke 64 GB.



Pengamatan utama di sini adalah bahwa kinerja dengan halaman besar 1 GB meningkat dengan jumlah klien meningkat, dan pada akhirnya itu memberikan kinerja lebih dari halaman besar 2 MB atau ukuran halaman standar 4 KB.

Tes ini menunjukkan TPS tergantung pada ukuran database. Dalam hal ini, jumlah klien yang terhubung adalah 32. Pada sumbu Y, kami memiliki TPS, dan pada sumbu X - ukuran basis data.



Seperti yang diharapkan, ketika database melampaui halaman besar yang dialokasikan sebelumnya, kinerja berkurang secara signifikan.

Ringkasan


Salah satu rekomendasi utama saya adalah bahwa kita harus menonaktifkan Transparent HugePages. Anda akan melihat peningkatan kinerja terbesar ketika database ditempatkan di buffer bersama dengan halaman besar diaktifkan. Memilih ukuran halaman besar membutuhkan sedikit trial and error, tetapi ini berpotensi menyebabkan peningkatan signifikan dalam TPS ketika ukuran database besar, tetapi tetap cukup kecil untuk muat dalam buffer bersama.

Source: https://habr.com/ru/post/id458910/


All Articles