PostgreSQL: Các thông số quan trọng để có hiệu suất tốt hơn

2022-03-20 10:53:41

Trong bài đăng này, tôi chia sẻ một vài thông số quan trọng để xử lý PostgreSQL để có hiệu suất tốt hơn.

Khi chúng tôi viết SQL, chúng tôi đang cố gắng hết sức và cố gắng viết mã tối ưu hóa cơ sở dữ liệu.
Chúng tôi cũng đang kiểm tra Chỉ mục và kế hoạch thực thi tốt nhất, và theo đó, chúng tôi đang thực hiện các truy vấn SQL của mình.

Nhưng đôi khi, chúng tôi không nhận được hiệu suất tốt vì vậy tại thời điểm đó chúng tôi nên xem xét cấu hình và thông số cấp Máy chủ PostgreSQL.

Dưới đây là các thông số quan trọng:
Bạn có thể đặt tất cả các tham số trong postgresql.tập tin conf.

max_connections:
Chúng tôi có thể định cấu hình số lượng kết nối máy khách tối đa và điều này rất quan trọng vì mọi kết nối đều yêu cầu bộ nhớ và các tài nguyên khác.
PostgreSQL có thể xử lý hàng trăm kết nối, nhưng nếu chúng ta đang lập kế hoạch cho hàng ngàn kết nối, chúng ta nên sử dụng một số cơ chế gộp kết nối để giảm chi phí kết nối.

shared_buffers:
Thay vì nhóm bộ nhớ được chia sẻ lớn, PostgreSQL có một quy trình riêng biệt cho từng kết nối cơ sở dữ liệu. PostgreSQL sử dụng vùng bộ nhớ chuyên dụng này cho mục đích lưu vào bộ nhớ đệm, do đó, nó cung cấp rất nhiều hiệu suất tăng trong hệ thống của bạn.

Nếu chúng tôi có nhiều tải hơn, chúng tôi có thể đặt giá trị lớn cho shared_buffers.
Nói chung, chúng ta nên đặt giá trị shared_buffers lên đến 1/4 phần bộ nhớ chính.

Bạn có thể tính toán bằng cách sử dụng công thức dưới đây

(0.25 * Main Memory)

wal_buffers:
Tham số này xác định, cần bao nhiêu dung lượng cho bộ nhớ đệm để ghi các mục nhật ký trước. Đây thực sự là giá trị kích thước rất nhỏ nhưng nó bắt buộc phải thay đổi trong các máy chủ được tải nhiều.

Giá trị đề xuất là: 8MB.

work_mem:
Đây cũng là một trong những tham số quan trọng nhất được sử dụng để thiết lập không gian làm việc riêng tư cho mỗi và mọi kết nối mới.
Chúng tôi có shared_buffers mà chúng tôi đang sử dụng làm bộ đệm chuyên dụng cho tất cả các kết nối, nhưng bằng cách sử dụng work_mem, chúng tôi có thể đặt bộ nhớ cho mỗi truy vấn.

Nếu chúng tôi định cấu hình sai, nó thực sự tạo ra một vấn đề lớn cho chúng tôi bởi vì nếu chúng tôi có một truy vấn lớn, phức tạp và đang chạy nhiều lần thì nó sẽ tạo ra một vấn đề lớn cho chúng tôi..

Chúng ta nên định cấu hình cơ sở tham số này dựa trên số lượng kết nối và loại truy vấn chúng ta đang chạy trên máy chủ.

Chúng ta có thể tính toán bằng phương pháp này,
Bộ nhớ (MB) / Max_connections.
Nếu kết quả rất gần Max_connections, hãy thực hiện lại phép chia cho 2.

Kết quả tối thiểu phải là 16MB nếu không chúng ta nên mua thêm RAM.

Maint_work_mem:
Điều này cũng giống như tham số work_mem, nhưng chỉ sử dụng cho các truy vấn liên quan đến bảo trì như, VACUUM, CLUSTER.
Nói chung, chúng tôi đang bảo trì khi tải truy vấn không quá cao.
Tôi khuyên bạn nên đặt một giá trị lớn cho tham số để chúng tôi có thể nhanh chóng hoàn thành nhiệm vụ bảo trì của mình.

Mặc định là 16MB và Khuyến nghị là (Bộ nhớ / 8).

effect_cache_size:
Tham số này chủ yếu dành riêng cho công cụ lập kế hoạch truy vấn PostgreSQL vì công cụ lập kế hoạch truy vấn chịu trách nhiệm thực hiện một truy vấn bằng cách chọn một đường dẫn thực thi được tối ưu hóa tốt hơn.
Trình lập kế hoạch truy vấn cũng yêu cầu một số không gian để thực hiện công việc của họ, do đó, tham số này giúp trình lập kế hoạch truy vấn.

Mặc định là 65536 và Khuyến nghị là (Bộ nhớ (MB) * 0.75)

autovacuum:
Đây cũng là một trong những tham số quan trọng vì bản chất PostgreSQL hỗ trợ MVCC.
Điều này thực sự rất cần thiết và nó giải quyết rất nhiều vấn đề liên quan đến hiệu suất bằng cách loại bỏ các bộ giá trị đã chết.
Bất cứ khi nào bàn rảnh rỗi, Autovacuum thực hiện hút bụi trên bàn đó để một máy hút bụi khác thực hiện nhanh chóng vì nó có rất ít thứ để loại bỏ.

đồng bộ hóa:
Bạn có thể đặt số lượng giao dịch để cam kết mỗi giây. e.g. đặt 100 phương tiện giao dịch mỗi giây, 100 giao dịch sẽ được cam kết.
Thông số này nên BẬT hoặc TẮT là tùy thuộc vào sự lựa chọn của chúng tôi vì khi chúng tôi đặt TẮT, việc chèn hàng loạt của chúng tôi nhanh hơn, nhưng có khả năng bị lỗi và khi chúng tôi BẬT, việc chèn hàng loạt có thể chậm lại nhưng khả năng dữ liệu bị lỗi cũng là rất ít.

Xem thêm:


Chia sẻ: