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

Konfigurasi Puma Cluster di Heroku

a) Apakah saya memerlukan konfigurasi before_fork / after_fork seperti inUnicorn, karena pekerja Cluster bercabang?.

Biasanya tidak, tetapi karena Anda menggunakan preload_app , Ya. Pramuat aplikasi membuat instance aktif dan berjalan dan kemudian membagi ruang memori untuk pekerja; hasilnya adalah inisialisasi Anda hanya dijalankan sekali (mungkin mengalokasikan koneksi db dan semacamnya). Dalam hal ini, on_worker_boot . Anda kode sesuai. Jika Anda tidak menggunakan preload_app , lalu setiap pekerja melakukan booting sendiri, dalam hal ini menggunakan penginisialisasi akan ideal untuk menyiapkan koneksi khusus seperti yang Anda lakukan. Bahkan, tanpa preload_app , on_worker_boot your Anda blok akan error karena pada saat itu ActiveRecord dan teman-teman bahkan tidak dimuat.

b) Bagaimana cara menyetel jumlah utas saya tergantung pada aplikasi saya - apa alasan untuk menghapusnya? / Dalam kasus apa itu akan membuat perbedaan? Bukankah 0:16 sudah dioptimalkan?

Di Heroku (dan pengujian saya), Anda paling cocok dengan min /max utas, dengan max <=DB_POOL pengaturan. min utas memungkinkan aplikasi Anda menurunkan sumber daya saat tidak dimuat, yang biasanya bagus untuk mengosongkan sumber daya di server, tetapi kemungkinan kurang dibutuhkan di Heroku; bahwa dyno sudah didedikasikan untuk melayani permintaan web, mungkin juga sudah siap. Saat menyetel max utas <=DB_POOL Anda variabel lingkungan tidak diperlukan, Anda berisiko menghabiskan semua koneksi database Anda di kumpulan, kemudian Anda memiliki utas yang menginginkan koneksi tetapi tidak bisa mendapatkannya, dan Anda bisa mendapatkan "ActiveRecord::ConnectionTimeoutError - tidak bisa mendapatkan koneksi database dalam 5 detik." kesalahan. Ini tergantung pada aplikasi Anda, Anda dapat memiliki max> DB_POOL dan baik-baik saja. Saya akan mengatakan DB_POOL Anda setidaknya harus sama dengan min your Anda nilai utas, meskipun koneksi Anda tidak dimuat dengan penuh semangat (5:5 utas tidak akan membuka 5 koneksi jika aplikasi Anda tidak pernah mencapai database).

c) Basis data Heroku memungkinkan 500 koneksi. Apa yang akan menjadi nilai bagus untuk DB_POOL tergantung pada jumlah utas, pekerja, dan dyno? - Apakah setiap utas per pekerja per dyno memerlukan koneksi DB tunggal saat bekerja secara paralel?

Tingkat Produksi memungkinkan 500, menjadi jelas :)

Setiap utas per pekerja per dyno bisa mengkonsumsi koneksi, tergantung pada apakah mereka semua mencoba mengakses database pada saat yang sama. Biasanya koneksi digunakan kembali setelah selesai, tetapi seperti yang saya sebutkan di b) , jika utas Anda lebih besar dari kumpulan Anda, Anda dapat mengalami waktu yang buruk. Koneksi akan digunakan kembali, semua ini ditangani oleh ActiveRecord, tetapi terkadang tidak ideal. Terkadang koneksi menjadi tidak aktif, atau mati, dan itulah mengapa disarankan untuk menyalakan Reaper, untuk mendeteksi dan mendapatkan kembali koneksi yang mati.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL ERROR:fungsi to_tsvector (karakter bervariasi, tidak diketahui) tidak ada

  2. Query K-Nearest Neighbor di PostGIS

  3. Apakah mungkin untuk mendefinisikan variabel global di postgresql

  4. Setara dengan strftime di Postgres

  5. postgresql:INSERT INTO ... (PILIH * ...)