[pgsql-vn:36] Re: Làm cách nào để tính toán dung lượng phần cứng máy chủ

bocap bocap tại postgresql.vn
T3 31 Th7 2018 02:06:35 EDT


Hi,

# mình gửi nội dung vào mailing list của cộng đồng. Để có bạn nào có thêm ý kiến thì trả lời giúp bạn. 

Những ước tính về phần cứng như bên dưới dựa trên kinh nghiệm của mình. 
Mong bạn tham khảo. 
Thực tế ở phase test bạn nên kiểm tra xem hệ thống bị bottle neck ở tài nguyên nào để scale up cho thích hợp.  

[CPU]
PostgreSQL sử dụng mỗi backend process cho một kết nối.  
Khi có nhiều kết nối tới cùng một lúc thời gian phân chia xử lý của CPU cho mỗi process sẽ giảm đi. 
Vì vậy thông thường max_connections càng lớn thì nên đầu tư nhiều CPU sẽ có hiệu quả tốt.
Theo kinh nghiệm của mình, ở các hệ thống OLTP thì CPU bị bottle neck nhiều. Mỗi DB Server có khoảng không quá 1000 truy cập đồng  thời là hợp lý. 
Nếu không thì phải nghĩ đến các phương án scale out (như sử dụng chức replication, postgres_fdw).
# 1000 chỉ là do kinh nghiệm của mình. Các hệ thống này ko có vấn đề nhiều về CPU neck.

[memory]
Thông thường mỗi backend process chiếm khoảng 3MB bộ nhớ ở trạng thái idle (nếu sử dụng connection pool soft thì có thể khác, tuỳ trạng thái pooling và cách pooling của soft). Ngoài ra còn một số tham số ảnh hưởng như shared_buffers, work_mem,... 
Ước tính số lượng memory cần thiết cho PostgreSQL như bên dưới.  

Memory = max_connections x (3MB + work_mem x max số lượng xử lý sort/hash + temp_bufers (nếu sử dụng temp table) + system catalog cached)
+ maintenance_work_mem x số lượng xử lý CREATE INDEX/VACUUM + shared_buffers + wal_buffers

Như community recommend thì nên sử dụng 25% memory của hệ thống cho shared_buffers, but trên OS none-Windows ta có thể thử đặt cao hơn để xem hiệu quả. 
Lưu ý: thiết lập tham số này liên quan tới các tham số checkpoints. 

work_mem là tham số chỉ định memory cho mỗi xử lý sort/hash bên trong PostgreSQL. Khi xử lý sử dụng memory lớn hơn work_mem, PostgreSQL sẽ tạo file tạm trên hdd và làm giảm I/O disk performance. 
Nếu có nhiều sử lý join hay order by bạn nên set tham số log_tempfiles (=0) để theo rõi log xem work_mem có đủ không. 

[hdd]
Nếu bạn sử dụng RAID thì không cần can thiệp nhiều về cấu trúc hdd. 
Nếu không sử dụng RAID bạn có thể thêm nhiều ổ cứng phân ly vùng dữ liệu table/index (sử dụng tablespace) và WAL (pg_xlog) dùng symbolic link, option khi initdb).
# lưu ý: nên tạo cấu hình tương ứng ở node standby.

Về tính toán dung lượng.
Bạn có thể tính toán cụ thể dựa trên page layout
https://www.postgresql.org/docs/9.1/static/storage-page-layout.html

Và datatype bạn sử dụng
https://www.postgresql.org/docs/9.1/static/datatype.html

But, thực tế dung lượng file sẽ tăng theo vận hành do cơ chế xoá dữ liệu (cần vacuum) của PostgreSQL.



Thanks,
—
bocap

> On Jul 31, 2018, at 12:00 AM, xxx at gmail.com> wrote:
> 
> Mình sử dụng mô hình HA gồm (2 máy DB (read- write), 2 máy APP (cluster), 2 Máy Apache) sử dụng cho hệ thống 4000 user nhưng khoảng 1500 - 2000 user truy cập đồng thời truy cập vào 1 DB.
> Postgres 9.1 - Centos 6.9.
> Mong bạn giúp đỡ.
> Cám ơn bạn
> 
> Vào CN, 29 thg 7, 2018 vào lúc 15:47 bocap <bocap at postgresql.vn> đã viết:
>> Chào bạn,
>> 
>> Bạn có thể nói rõ hơn về cấu trúc hệ thống 6 máy chủ của bạn?  
>> Nếu có thể dự tính cấu hình mỗi máy?
>> 
>> Có bao nhiêu DB instances? 
>> 2000 users là số lượng postgres user truy cập đồng thời? Cho một DB instance?
>> Phiên bản PostgrSQL và OS bạn dự tính sử dụng?
>> 
>> 
>> Thanks,
>>>> bocap
>> 
>> > On Jul 28, 2018, at 11:24 PM, xxx at gmail.com> wrote:
>> > 
>> > Chào bạn,
>> > Mình đang dựng hệ thống mô hình HA gồm 6 máy chủ , làm cách nào để tính toán phần cứng chạy DB postgres với 2000 user
>> > Cám ơn bạn.
>> > 
>> > Trân trọng./.
>> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.postgresql.vn/mailman/private/pgsql-vn/attachments/20180731/4a4460e6/attachment.html>


Thông tin thêm về hộp thư chung pgsql-vn