Thứ Sáu, 28 tháng 7, 2023

Các tham số cấu hình Memory trong PostgreSQL

Mục lục

  1. 1. Giới thiệu
  2. 2. Ý nghĩa của tham số shared_buffers
  3. 3. Ý nghĩa của tham số huge_pages
  4. 4. Ý nghĩa tham số temp_buffers
  5. 5. Ý nghĩa tham số work_mem
  6. 6. Ý nghĩa của tham số maintenance_work_mem
  7. 7. Ý nghĩa của tham số effective_cache_size

1. Giới thiệu

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

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.

Kiểm tra tham số cấu hình:

# SHOW shared_buffers;
hoặc kiểm tra trong file cấu hình: /DATA/conf/postgresql.conf

hoặc view pg_setttings:

postgres=>SELECT unit,max_val FROM pg_settings WHERE name='shared_buffers';

2. Ý 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

 

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

Cách 1: lệnh alter system

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

(postgres)# pg_ctl restart

Cách 2: Hoặc thay đổi giá trị shared_buffers trong file cấu hình /DATA/conf/postgresql.conf

shared_buffers='4G';
Sau đó restart lại service postgresql
(Không reload được mà phải restart lại database mới có hiệu lực)

3. Ý 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), on và off.

  • Ở 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

Cách 1: Alter system
(postgres)$ psql 

postgres=# alter system set huge_pages=on; 

# pg_ctl restart

Cách 2: Hoặc thay đổi giá trị shared_buffers trong file cấu hình /DATA/conf/postgresql.conf

huge_pages=on;
Sau đó reaload lại cấu hình:
- Sử dụng query: 
$ psql
postgres# select pg_reload_conf();
- Hoặc dùng lệnh sau: 
(postgres)$ pg_ctl reload -D postgres\data

4. Ý 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:

Cách 1: Dùng alter system
alter system set temp_buffers='16M';

Cách 2: Hoặc thay đổi giá trị shared_buffers trong file cấu hình /DATA/conf/postgresql.conf

huge_pages=on;
Sau đó restart lại service postgresql

5. Ý 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

Mức system:

Cách 1:

  1. Mở file cấu hình database PostgreSQL tại  /DATA/conf/postgresql.conf
  2. Tìm đến dòng #work_mem = 4MB # min 64kB.
  3. Thay đổi tham số work_mem = 40MB # min 64kB
  4. Restart postgresql hoặc reload: 
Sử dụng query: 
    select pg_reload_conf();
Hoặc dùng lệnh sau: 
    pg_ctl reload -D postgres\data

Khi đó mọi session có hiệu lực với tham số 40MB

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

alter user crm_owner set work_mem='40MB'; 

6. Ý 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 

7. Ý 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é.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master