PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cấu hình Puma Cluster trên Heroku

a) Tôi có cần cấu hình before_fork / after_fork như inUnicorn không, vì các công nhân Cluster được phân nhánh ?.

Thông thường thì không, nhưng vì bạn đang sử dụng preload_app , Vâng. Việc tải trước ứng dụng sẽ chạy một phiên bản và sau đó tạo không gian bộ nhớ cho các worker; kết quả là các trình khởi tạo của bạn chỉ được chạy một lần (có thể cấp phát các kết nối db, v.v.). Trong trường hợp này, on_worker_boot của bạn mã phù hợp. Nếu bạn không sử dụng preload_app , sau đó mỗi công nhân sẽ tự khởi động, trong trường hợp này, sử dụng bộ khởi tạo sẽ là lý tưởng để thiết lập kết nối tùy chỉnh như bạn đang làm. Trên thực tế, không có preload_app , on_worker_boot của bạn khối sẽ xảy ra lỗi vì tại thời điểm đó ActiveRecord và bạn bè thậm chí không được tải.

b) Làm cách nào để điều chỉnh số lượng luồng của tôi tùy thuộc vào ứng dụng của tôi - đâu sẽ là lý do để thả nó xuống? / Trong những trường hợp nào nó sẽ tạo nên sự khác biệt? Không phải 0:16 đã được tối ưu hóa rồi sao?

Trên Heroku (và thử nghiệm của tôi), bạn nên kết hợp tốt nhất với min của mình / max chuỗi, với max <=DB_POOL thiết lập. min luồng cho phép ứng dụng của bạn giảm bớt tài nguyên khi không tải, điều này thường rất tốt để giải phóng tài nguyên trên máy chủ, nhưng có thể ít cần thiết hơn trên Heroku; dyno đó đã được dành riêng để phục vụ các yêu cầu web, cũng có thể có chúng và sẵn sàng. Trong khi đặt max của bạn chủ đề <=DB_POOL của bạn Biến môi trường không được yêu cầu, bạn có nguy cơ tiêu thụ tất cả các kết nối cơ sở dữ liệu của mình trong nhóm, sau đó bạn có một luồng muốn kết nối nhưng không thể lấy được và bạn có thể nhận được lỗi cũ "ActiveRecord ::ConnectionTimeoutError - không thể có được kết nối cơ sở dữ liệu trong vòng 5 giây. " lỗi. Tuy nhiên, điều này phụ thuộc vào ứng dụng của bạn, bạn rất có thể có max> DB_POOL và ổn. Tôi sẽ nói DB_POOL của bạn ít nhất phải giống với min của bạn giá trị luồng, ngay cả khi các kết nối của bạn không được tải nhanh (luồng 5:5 sẽ không mở 5 kết nối nếu ứng dụng của bạn không bao giờ truy cập vào cơ sở dữ liệu).

c) Cơ sở dữ liệu Heroku cho phép 500 kết nối. Giá trị tốt cho DB_POOL tùy thuộc vào số lượng luồng, công nhân và dyno là gì? - Doesevery thread cho mỗi công nhân trên mỗi dyno yêu cầu một kết nối DB duy nhất khi làm việc song song?

Bậc Sản xuất cho phép 500, rõ ràng :)

Mỗi chủ đề trên mỗi công nhân trên mỗi dyno có thể sử dụng kết nối, tùy thuộc vào việc tất cả họ đang cố gắng truy cập cơ sở dữ liệu cùng một lúc. Thông thường, các kết nối được sử dụng lại sau khi hoàn tất, nhưng như tôi đã đề cập trong b) , nếu chủ đề của bạn lớn hơn nhóm của bạn, bạn có thể gặp khó khăn. Các kết nối sẽ được sử dụng lại, tất cả những điều này đều do ActiveRecord xử lý, nhưng đôi khi không lý tưởng. Đôi khi các kết nối không hoạt động hoặc chết và đó là lý do tại sao việc bật Reaper được đề xuất, để phát hiện và khôi phục các kết nối đã chết.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phát triển PostgreSQL cho Windows, Phần 1

  2. Làm cách nào để thay đổi cột hiện có thành Identity trong PostgreSQL 11.1

  3. Thay đổi các cột PostgreSQL được sử dụng trong các dạng xem

  4. Truy vấn SQL để tìm bản ghi có ID không có trong bảng khác

  5. Mẹo triển khai PostgreSQL trên nền tảng đám mây kết hợp