Trong PostgreSQL, có các tham số cấu hình cho phép bạn có thể điều chỉnh mức độ sử dụng các tài nguyên như (Memory, CPU,…). Nếu bạn chưa đọc bài viết sau, hãy đọc nó trước khi đọc tiếp bài viết này

Đọc thêm  Cấu hình tham số trong PostgreSQL

Trong bài viết này, tôi sẽ hướng dẫn bạn ý nghĩa cũng như cách cấu hình các tham số liên quan đến Memory.


   Ý nghĩa của tham số shared_buffers

Trên RAM (hay Memory) có những khu vực được gọi là chia sẻ (shared) mà các nội dung ở đó được chia sẻ cho toàn bộ các session đang kết nối đến database. Tham số shared_buffers cho phép các bạn có thể điều chỉnh kích thước khu vực Memory chia sẻ này theo ý muốn. Tất nhiên, không phải bạn muốn tăng shared_buffers một cách túy ý. Nó còn tùy thuộc vào giới hạn của kernel hệ điều hành có thể hỗ trợ nữa. Nếu bạn đặt tham số này quá lớn, có thể gặp lỗi như trong mô tả ở bài viết dưới đây

Đọc thêm  Một số lỗi thông thường khi khởi động PostgreSQL

Theo trang chủ của PostgreSQL khuyến nghị: Nếu Memory máy chủ của bạn từ 1G trở lên hãy đặt shared_buffers bằng 25% kích thước của Memory.

Tất nhiên, đây chỉ là con số tham khảo, không phải công thức áp dụng cho mọi database. Trên thực tế, có những máy chủ có Memory lớn, tỷ lệ shared_buffers có thể đặt cao hơn, để có hiệu năng tốt hơn

Để thay đổi tham số này, bạn sử dụng lệnh ALTER SYSTEM SET … và cần khởi động lại Database instance để giá trị mới có hiệu lực

psql

postgres=#alter system set shared_buffers='4G';
ALTER SYSTEM

# pg_ctl restart

  Ý nghĩa của tham số huge_pages

Đối với các hệ điều hành như Linux, page là đơn vị xử lý, mặc định mỗi page có kích thước là 4K. Tính năng Huge Pages cho phép kích thước của đơn vị xử lý có thể lên đến 2M, giúp giảm lượng thông tin overhead và tăng hiệu năng xử lý dữ liệu lớn. Tham số huge_pages để quy định PostgreSQL có thể sử dụng Huge Pages được hay không.

Tham số này có thể có 3 giá trị: try (mặc định), onoff.

   Ở giá trị try, PostgreSQL sẽ cố gắng sử dụng Huge Pages, tuy nhiên nếu hệ điều hành chưa cấu hình để có tính năng này, nó sẽ sử dụng pages với kích thước mặc định.

   Ở giá trị on, PostgreSQL luôn yêu cầu Huge Pages. Nếu Huge Pages trên hệ điều hành chưa được cấu hình, PostgreSQL sẽ không khởi động được.

   Ở giá trị off, PostgreSQL chỉ sử dụng pages với kích thước mặc định (4K)

Để thay đổi tham số này, bạn cũng cần phải restart database instance

psql 

postgres=#alter system set huge_pages=on; 
ALTER SYSTEM 

# pg_ctl restart

  Ý nghĩa tham số temp_buffers

Khi user sử dụng các bảng tạm, phần bộ nhớ trên Memory dùng để lưu các bảng tạm này gọi là các temp buffer. Tham số temp_buffers cho phép bạn quy định kích thước tối đa cho bộ nhớ đệm cho dữ liệu tạm mà 1 session có thể sử dụng. Mặc định giá trị của nó là 8M. Nếu temp buffer bị thiếu, có thể hiệu năng của hệ thống sẽ bị giảm. Nhưng nếu để tham số này quá lớn, sẽ gây lãng phí Memory, do phát sinh thêm nhiều buffer descriptor.

Tham số này có thể thay đổi bằng câu lệnh:

alter system set temp_buffers='16M';

  Ý nghĩa tham số work_mem

Tham số work_mem quy định lượng bộ nhớ được sử dụng bởi các hoạt động như sắp xếp dữ liệu (ORDER BY), loại trùng lặp (DISTINCT), MERGE JOIN, HASH JOIN,… Việc điều chỉnh tham số work_mem đến một giá trị hợp lý là rất quan trọng, nó sẽ giúp giảm tình trạng swapping xuống đĩa, giúp tăng hiệu năng database.

Bạn có thể tham khảo công thức sau để tính toán giá trị cho tham số này:

Work_mem = Total RAM * 0.25 / max_connections

 

VD: RAM của bạn là 16G, max_connection = 100 –> work_mem = 40 MB

Bạn có thể thay đổi tham số này cho từng user bằng câu lệnh sau:

alter user duydx set work_mem='4GB';

  Ý nghĩa của tham số maintenance_work_mem

Tham số maintenance_work_mem quy định tổng lượng bộ nhớ được cấp phát cho các hoạt động bảo trì database như VACUUM, CREATE INDEX, ALTER TABLE ADD FOREIGN KEY. Tham số này nên được cấu hình với giá trị lớn hơn giá trị của tham số work_mem. Ngoài ra, còn một công thức khác bạn có thể tham khảo:

maintenance_work_mem = Total_RAM * 0.05

  Ý nghĩa của tham số effective_cache_size

Đây là 1 trong những tham số quan trọng khi tối ưu PostgreSQL, nó là tham số giả định lượng memory luôn sẵn có cho các hoạt động của PostgreSQL. Tham số này không ảnh hưởng đến các tham số như shared_buffers, nó chỉ dùng để làm tham chiếu giả định, để từ đó chức năng Query Planner trong PostgreSQL tính toán chi phí tối ưu hóa câu lệnh truy vấn. Một công thức đơn giản cho bạn tham khảo là đặt tham số này bằng 50% của RAM.

 

Kiến thức vẫn còn rất nhiều, tuy nhiên trong phạm vi một bài viết quả thật khó nói hết. Hẹn các bạn ở bài viết sắp tới nhé.

Nguồn: https://dangxuanduy.com/

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments