PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menyiapkan Lingkungan Optimal untuk PostgreSQL

Selamat datang di PostgreSQL, sistem basis data open source yang kuat yang dapat menampung apa saja mulai dari beberapa megabyte data pelanggan untuk bisnis kota kecil, hingga ratusan terabyte 'data besar' untuk perusahaan multinasional. Apa pun aplikasinya, kemungkinan beberapa bantuan penyiapan dan konfigurasi akan diperlukan agar database siap beraksi.

Ketika server baru diinstal, pengaturan PostgreSQL sangat minimum karena dirancang untuk berjalan pada perangkat keras sesedikit mungkin. Namun mereka sangat jarang optimal. Di sini, kita akan membahas penyiapan dasar untuk proyek baru, dan cara mengatur PostgreSQL agar berjalan paling optimal pada proyek baru.

Hosting

Hosting Lokal

Dengan database lokal, opsi terbaik adalah untuk host bare metal, karena Mesin Virtual umumnya bekerja lebih lambat kecuali jika kita berbicara tentang VM tingkat perusahaan kelas atas. Ini juga memungkinkan kontrol yang lebih ketat atas pengaturan CPU, Memori, dan Disk. Namun hal ini disertai dengan kebutuhan untuk memiliki seorang ahli (atau kontrak) untuk melakukan pemeliharaan server.

Awan

Menghosting database di cloud bisa menjadi hal yang luar biasa dalam beberapa aspek, atau mimpi buruk dalam aspek lainnya. Kecuali jika platform cloud yang dipilih sangat dioptimalkan (yang umumnya berarti harga lebih tinggi), platform tersebut mungkin mengalami masalah dengan lingkungan beban yang lebih tinggi. Awasi apakah server cloud dibagikan atau didedikasikan (didedikasikan memungkinkan kinerja penuh dari server untuk aplikasi), serta tingkat IOPS (Operasi Input/output Per Detik) yang disediakan oleh server cloud. Ketika (atau jika) aplikasi tumbuh ke titik di mana sebagian besar data tidak dapat disimpan dalam memori, kecepatan akses disk sangat penting.

Pengaturan Host Umum

Pilar utama yang diperlukan untuk menyiapkan PostgreSQL dengan andal didasarkan pada kemampuan CPU, Memori, dan Disk dari host. Tergantung pada kebutuhan aplikasi, host yang memadai serta konfigurasi PostgreSQL yang disetel dengan baik akan memiliki dampak yang luar biasa pada kinerja sistem database.

Memilih Sistem Operasi

PostgreSQL dapat dikompilasi pada sebagian besar sistem operasi mirip Unix, serta Windows. Namun kinerja pada Windows bahkan tidak sebanding dengan sistem mirip Unix, jadi kecuali untuk proyek kecil, tetap berpegang pada sistem mirip Unix akan menjadi cara yang tepat. Untuk diskusi ini, kami akan tetap menggunakan sistem berbasis Linux.

Distribusi Linux yang tampaknya paling banyak digunakan untuk hosting PostgreSQL adalah sistem berbasis Red Hat, seperti CentOS atau Scientific Linux, atau bahkan Red Hat itu sendiri. Karena Red Hat dan CentOS fokus pada stabilitas dan kinerja, komunitas di balik proyek ini bekerja keras untuk memastikan aplikasi penting, seperti database, berada di versi Linux yang paling aman dan paling andal.

CATATAN:Linux memiliki berbagai versi kernel yang tidak optimal untuk menjalankan PostgreSQL, sehingga sangat disarankan untuk dihindari jika memungkinkan (terutama pada aplikasi di mana kinerja puncak adalah yang paling penting). Tolok ukur telah menunjukkan bahwa jumlah transaksi per detik turun dari kernel versi 3.4 – 3.10, tetapi pulih dan meningkat secara signifikan di kernel 3.12. Sayangnya ini mengesampingkan penggunaan CentOS 7 jika menggunakan rute CentOS. CentOS 6 masih merupakan versi Sistem Operasi yang valid dan didukung, dan CentOS 8 diharapkan akan dirilis sebelum 6 menjadi tidak didukung.

Pemasangan

Instalasi dapat dilakukan dengan sumber, atau menggunakan repositori yang dikelola oleh distribusi Linux yang dipilih, atau lebih baik lagi, PostgreSQL Global Development Group (PGDG), yang memelihara repositori untuk sistem berbasis Red Hat (Red Hat, Scientific Linux, CentOS, Amazon Linux AMI, Oracle Enterprise Linux, dan Fedora), serta paket untuk Debian dan Ubuntu. Menggunakan paket PGDG akan memastikan pembaruan untuk PostgreSQL tersedia untuk diperbarui pada saat rilis, daripada menunggu repositori bawaan distribusi Linux untuk menyetujui dan menyediakannya.

CPU

Saat ini, tidak sulit untuk memiliki banyak inti yang tersedia untuk host basis data. PostgreSQL sendiri baru-baru ini mulai menambahkan kemampuan multi-threading pada tingkat kueri, dan akan menjadi jauh lebih baik di tahun-tahun mendatang. Tetapi bahkan tanpa perbaikan baru dan yang akan datang ini, PostgreSQL sendiri memunculkan utas baru untuk setiap koneksi ke database oleh klien. Utas ini pada dasarnya akan menggunakan inti saat aktif, jadi jumlah inti yang diperlukan akan bergantung pada tingkat koneksi bersamaan yang dibutuhkan dan kueri bersamaan.

Dasar yang baik untuk memulai adalah sistem 4 inti untuk aplikasi kecil. Dengan asumsi aplikasi melakukan tarian antara mengeksekusi kueri dan tidur, sistem 4 inti dapat menangani beberapa lusin koneksi sebelum kelebihan beban. Menambahkan lebih banyak inti akan membantu menskalakan dengan beban kerja yang meningkat. Tidak jarang database PostgreSQL yang sangat besar memiliki 48+ core untuk melayani ratusan koneksi.

Kiat Penyetelan: Bahkan jika hyper-threading tersedia, transaksi per detik umumnya lebih tinggi ketika hyper-threading dinonaktifkan. Untuk kueri database yang tidak terlalu rumit, tetapi frekuensinya lebih tinggi, lebih banyak inti lebih penting daripada inti yang lebih cepat.

Memori

Memori adalah aspek yang sangat penting untuk kinerja keseluruhan PostgreSQL. Pengaturan utama untuk PostgreSQL dalam hal memori adalah shared_buffers, yang merupakan bongkahan memori yang dialokasikan langsung ke server PostgreSQL untuk penyimpanan data. Semakin tinggi kemungkinan data yang dibutuhkan tinggal di memori, semakin cepat kueri kembali, dan kueri yang lebih cepat berarti penyiapan inti CPU yang lebih efisien seperti yang dibahas di bagian sebelumnya.

Kueri juga, terkadang, membutuhkan memori untuk melakukan operasi pengurutan pada data sebelum dikembalikan ke klien. Ini menggunakan memori ad-hoc tambahan (terpisah dari shared_buffers), atau file sementara di disk, yang jauh lebih lambat.

Kiat Penyetelan: Titik awal dasar untuk menyetel shared_buffers adalah menyetelnya ke 1/4 nilai ram sistem yang tersedia. Hal ini memungkinkan sistem operasi untuk juga melakukan caching datanya sendiri, serta semua proses yang berjalan selain dari database itu sendiri.

Meningkatkan work_mem dapat mempercepat operasi penyortiran, namun meningkatkannya terlalu banyak dapat memaksa host kehabisan memori secara bersamaan, karena nilai yang ditetapkan dapat dikeluarkan sebagian atau seluruhnya beberapa kali per kueri. Jika beberapa kueri meminta beberapa blok memori untuk diurutkan, itu dapat dengan cepat menambahkan hingga lebih banyak memori daripada yang tersedia di host. Tetap rendah, dan naikkan perlahan hingga performa sesuai keinginan.

Menggunakan perintah 'free' (seperti 'free -h'), setel effective_cache_size ke jumlah memori yang bebas dan di-cache. Ini memungkinkan perencana kueri mengetahui tingkat caching OS mungkin tersedia, dan menjalankan rencana kueri yang lebih baik.

Disk

Kinerja disk dapat menjadi salah satu hal yang lebih penting untuk dipertimbangkan saat menyiapkan sistem. Kecepatan Input / Output penting untuk memuat data yang besar, atau mengambil data dalam jumlah besar untuk diproses. Ini juga menentukan seberapa cepat PostgreSQL dapat menyinkronkan memori dengan disk untuk menjaga kumpulan memori tetap optimal.

Beberapa persiapan dalam disk dapat membantu meningkatkan kinerja potensial secara instan, serta membuktikan sistem database untuk pertumbuhan di masa mendatang.

  • Disk terpisah

    Pemasangan baru PostgreSQL akan membuat direktori data cluster di suatu tempat di drive utama (dan mungkin hanya) yang tersedia di sistem.

    Pengaturan dasar menggunakan lebih banyak drive akan menambahkan drive terpisah (atau set drive melalui RAID). Ini memiliki keuntungan memiliki semua transfer data terkait database yang beroperasi pada saluran I/O yang berbeda dari sistem operasi utama. Hal ini juga memungkinkan basis data untuk berkembang tanpa takut kekurangan ruang yang menyebabkan masalah dan kesalahan di tempat lain dalam sistem operasi.

    Untuk database dengan jumlah aktivitas yang ekstrem, direktori PostgreSQL Transaction Log (xlog) dapat ditempatkan di drive lain, memisahkan I/O yang lebih berat ke saluran lain yang jauh dari OS utama serta direktori data utama. Ini adalah ukuran lanjutan yang membantu memeras lebih banyak kinerja dari suatu sistem, yang mungkin mendekati batasnya.

  • Menggunakan RAID

    Menyiapkan RAID untuk drive database tidak hanya melindungi dari kehilangan data, tetapi juga dapat meningkatkan kinerja jika menggunakan konfigurasi RAID yang tepat. RAID 1 atau 10 umumnya dianggap yang terbaik, dan 10 menawarkan paritas dan kecepatan keseluruhan. RAID 5, meskipun memiliki tingkat redundansi yang lebih tinggi, mengalami penurunan kinerja yang signifikan karena cara menyebarkan data ke beberapa disk. Rencanakan opsi terbaik yang tersedia dengan banyak ruang untuk pertumbuhan data, dan ini akan menjadi konfigurasi yang tidak perlu sering diubah, jika sama sekali.

  • Menggunakan SSD

    Solid State Drive sangat bagus untuk kinerja, dan jika memenuhi anggaran, SSD perusahaan dapat membuat beban kerja pemrosesan data yang berat siang dan malam lebih cepat. Basis data yang lebih kecil hingga sedang dengan beban kerja yang lebih kecil hingga sedang mungkin berlebihan, tetapi ketika berjuang untuk peningkatan persentase terkecil pada aplikasi besar, SSD bisa menjadi solusi terbaik.

Kiat Penyetelan: Pilih penyiapan drive yang terbaik untuk aplikasi yang ada, dan memiliki banyak ruang untuk berkembang seiring waktu seiring bertambahnya data.

Jika menggunakan SSD, menyetel random_page_cost ke 1,5 atau 2 (defaultnya adalah 4) akan bermanfaat bagi perencana kueri, karena pengambilan data acak jauh lebih cepat daripada yang terlihat pada disk yang berputar.

Unduh Whitepaper Hari Ini Pengelolaan &Otomatisasi PostgreSQL dengan ClusterControlPelajari tentang apa yang perlu Anda ketahui untuk menerapkan, memantau, mengelola, dan menskalakan PostgreSQLUnduh Whitepaper

Pengaturan Konfigurasi Awal

Saat mengatur PostgreSQL untuk pertama kalinya, ada beberapa pengaturan konfigurasi yang dapat dengan mudah diubah berdasarkan kekuatan host. Saat aplikasi menanyakan database dari waktu ke waktu, penyetelan khusus dapat dilakukan berdasarkan kebutuhan aplikasi. Namun itu akan menjadi topik untuk blog tuning terpisah.

Setelan Memori

shared_buffers:Setel ke 1/4 dari memori sistem. Jika sistem memiliki total memori kurang dari 1 GB, atur ke ~ 1/8 dari total memori sistem

work_mem:Standarnya adalah 4MB, dan bahkan mungkin cukup untuk aplikasi yang bersangkutan. Tetapi jika file temp sering dibuat, dan file tersebut berukuran cukup kecil (puluhan megabita), mungkin ada baiknya menaikkan pengaturan ini. Pengaturan level entri konservatif dapat berupa (1/4 memori sistem / max_connections). Pengaturan ini sangat bergantung pada perilaku aktual dan frekuensi kueri ke database, jadi sebaiknya hanya ditingkatkan dengan hati-hati. Bersiaplah untuk menguranginya kembali ke level sebelumnya jika terjadi masalah.

efektif_cache_size:Setel ke jumlah memori yang kosong dan di-cache yang dilaporkan oleh perintah 'bebas'.

Setelan Pos Pemeriksaan

Untuk PostgreSQL 9.4 dan di bawahnya:
checkpoint_segments:Sejumlah segmen pos pemeriksaan (masing-masing 16 megabyte) untuk memberikan sistem Write Ahead Log. Standarnya adalah 3, dan dapat ditingkatkan dengan aman menjadi 64 bahkan untuk database kecil.

Untuk PostgreSQL 9.5 dan yang lebih baru:
max_wal_size:Ini menggantikan checkpoint_segments sebagai pengaturan. Defaultnya adalah 1GB, dan dapat tetap di sini sampai memerlukan perubahan lebih lanjut.

Keamanan

listen_address:Pengaturan ini menentukan alamat IP pribadi / Kartu Jaringan untuk mendengarkan koneksi. Dalam pengaturan sederhana, kemungkinan hanya akan ada satu, sementara jaringan yang lebih maju mungkin memiliki beberapa kartu untuk terhubung ke beberapa jaringan. * Menandakan mendengarkan semuanya. Namun, jika aplikasi yang mengakses database akan berada di host yang sama dengan database itu sendiri, maka cukup untuk menjadikannya sebagai 'localhost'.

Log

Beberapa pengaturan logging dasar yang tidak akan membebani log adalah sebagai berikut.

log_checkpoints = on
log_connections = on
log_disconnections = on
log_temp_files = 0

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Melarikan diri dari nama kolom seperti kata kunci di Postgres

  2. Bagaimana cara menghapus sejumlah baris tetap dengan penyortiran di PostgreSQL?

  3. Tidak dapat terhubung ke database heroku postgresql dari aplikasi node lokal dengan sekuel

  4. Bagaimana Fungsi Degrees() Bekerja di PostgreSQL

  5. Postgresql tidak membuat db dengan "createdb" sebagai pengguna super, namun tidak menghasilkan kesalahan