Chào mừng bạn đến với PostgreSQL, một hệ thống cơ sở dữ liệu mã nguồn mở mạnh mẽ có thể lưu trữ mọi thứ từ vài megabyte dữ liệu khách hàng cho một doanh nghiệp ở thị trấn nhỏ đến hàng trăm terabyte 'dữ liệu lớn' cho các tập đoàn đa quốc gia. Bất kể ứng dụng nào, có khả năng cần một số trợ giúp về thiết lập và cấu hình để cơ sở dữ liệu sẵn sàng hoạt động.
Khi một máy chủ mới được cài đặt, các cài đặt của PostgreSQL là rất tối thiểu vì chúng được thiết kế để chạy trên ít phần cứng nhất có thể. Tuy nhiên chúng rất hiếm khi tối ưu. Ở đây, chúng ta sẽ xem xét thiết lập cơ bản cho các dự án mới và cách thiết lập PostgreSQL để chạy tối ưu nhất trên các dự án mới.
Lưu trữ
Lưu trữ tại chỗ
Với cơ sở dữ liệu tại chỗ, lựa chọn tốt nhất là dành cho máy chủ bằng kim loại trần, vì Máy ảo thường hoạt động chậm hơn trừ khi chúng ta đang nói về máy ảo cấp doanh nghiệp cao cấp. Điều này cũng cho phép kiểm soát chặt chẽ hơn các thiết lập CPU, Bộ nhớ và Đĩa. Tuy nhiên, điều này đi kèm với sự cần thiết phải có chuyên gia (hoặc hợp đồng) để thực hiện bảo trì máy chủ.
Đám mây
Lưu trữ cơ sở dữ liệu trên đám mây có thể là điều tuyệt vời ở một số khía cạnh hoặc là cơn ác mộng đối với những khía cạnh khác. Trừ khi nền tảng đám mây được chọn được tối ưu hóa cao (thường có nghĩa là giá cao hơn), nó có thể gặp sự cố với môi trường tải cao hơn. Theo dõi xem máy chủ đám mây có được chia sẻ hay dành riêng hay không (chuyên dụng cho phép toàn bộ hiệu suất từ máy chủ cho ứng dụng), cũng như mức IOPS (Hoạt động đầu vào / đầu ra mỗi giây) do máy chủ đám mây cung cấp. Khi (hoặc nếu) ứng dụng phát triển đến mức phần lớn dữ liệu không thể được lưu trữ trong bộ nhớ, tốc độ truy cập đĩa là rất quan trọng.
Thiết lập máy chủ lưu trữ chung
Các trụ cột chính cần thiết để thiết lập PostgreSQL một cách đáng tin cậy dựa trên khả năng CPU, Bộ nhớ và Đĩa của máy chủ. Tùy thuộc vào nhu cầu của ứng dụng, một máy chủ lưu trữ đủ cũng như cấu hình PostgreSQL được điều chỉnh tốt sẽ có tác động đáng kinh ngạc đến hiệu suất của hệ thống cơ sở dữ liệu.
Chọn hệ điều hành
PostgreSQL có thể được biên dịch trên hầu hết các hệ điều hành giống Unix, cũng như Windows. Tuy nhiên, hiệu suất trên Windows thậm chí không thể so sánh được với một hệ thống giống Unix, vì vậy trừ khi nó dành cho một dự án nhỏ, thì việc gắn bó với một hệ thống giống Unix đã được thiết lập sẽ là cách tốt nhất. Đối với cuộc thảo luận này, chúng tôi sẽ gắn bó với các hệ thống dựa trên Linux.
Bản phân phối Linux có vẻ được sử dụng nhiều nhất được sử dụng để lưu trữ PostgreSQL là hệ thống dựa trên Red Hat, chẳng hạn như CentOS hoặc Scientific Linux, hoặc thậm chí chính Red Hat. Vì Red Hat và CentOS tập trung vào tính ổn định và hiệu suất, cộng đồng đằng sau các dự án này làm việc chăm chỉ để đảm bảo các ứng dụng quan trọng, chẳng hạn như cơ sở dữ liệu, trên bản dựng Linux an toàn nhất và đáng tin cậy nhất có thể.
LƯU Ý:Linux có một loạt các phiên bản hạt nhân không tối ưu để chạy PostgreSQL, vì vậy chúng tôi rất nên tránh nếu có thể (đặc biệt là trên các ứng dụng mà hiệu suất cao nhất là quan trọng nhất). Các điểm chuẩn đã chỉ ra rằng số lượng giao dịch mỗi giây giảm từ phiên bản hạt nhân 3.4 - 3.10, nhưng phục hồi và cải thiện đáng kể trong hạt nhân 3.12. Rất tiếc, điều này loại trừ việc sử dụng CentOS 7 nếu đi theo tuyến CentOS. CentOS 6 vẫn là phiên bản hợp lệ và được hỗ trợ của Hệ điều hành và CentOS 8 dự kiến sẽ được phát hành trước khi 6 không được hỗ trợ.
Cài đặt
Việc cài đặt có thể được thực hiện bằng nguồn hoặc sử dụng các kho lưu trữ được duy trì bởi phân phối Linux đã chọn, hoặc tốt hơn là Nhóm Phát triển Toàn cầu PostgreSQL (PGDG), duy trì các kho lưu trữ cho các hệ thống dựa trên Red Hat (Red Hat, Scientific Linux, CentOS, Amazon Linux AMI, Oracle Enterprise Linux và Fedora), cũng như các gói dành cho Debian và Ubuntu. Việc sử dụng các gói PGDG sẽ đảm bảo các bản cập nhật cho PostgreSQL có sẵn để cập nhật khi phát hành, thay vì đợi kho lưu trữ tích hợp sẵn của bản phân phối Linux phê duyệt và cung cấp chúng.
CPU
Ngày nay, không khó để có nhiều lõi cho một máy chủ cơ sở dữ liệu. Bản thân PostgreSQL gần đây chỉ mới bắt đầu bổ sung các khả năng đa luồng ở cấp độ truy vấn và sẽ ngày càng tốt hơn trong những năm tới. Nhưng ngay cả khi không có những cải tiến mới và sắp tới này, bản thân PostgreSQL cũng tạo ra các luồng mới cho mỗi kết nối đến cơ sở dữ liệu của một ứng dụng khách. Các luồng này về cơ bản sẽ sử dụng một lõi khi hoạt động, vì vậy số lượng lõi cần thiết sẽ phụ thuộc vào mức độ kết nối đồng thời cần thiết và các truy vấn đồng thời.
Cơ sở tốt để bắt đầu là hệ thống 4 lõi cho một ứng dụng nhỏ. Giả sử các ứng dụng thực hiện một bước nhảy giữa thực thi truy vấn và ngủ, hệ thống 4 lõi có thể xử lý vài chục kết nối trước khi bị quá tải. Thêm nhiều lõi hơn sẽ giúp mở rộng quy mô với khối lượng công việc ngày càng tăng. Không có gì lạ khi cơ sở dữ liệu PostgreSQL rất lớn có hơn 48 lõi để phục vụ hàng trăm kết nối.
Mẹo điều chỉnh: Ngay cả khi tính năng siêu phân luồng khả dụng, các giao dịch mỗi giây thường cao hơn khi tính năng siêu phân luồng bị vô hiệu hóa. Đối với các truy vấn cơ sở dữ liệu không quá phức tạp nhưng tần suất cao hơn, thì nhiều lõi quan trọng hơn lõi nhanh hơn.
Bộ nhớ
Bộ nhớ là một khía cạnh cực kỳ quan trọng đối với hiệu suất tổng thể của PostgreSQL. Cài đặt chính cho PostgreSQL về bộ nhớ là shared_buffers, là một phần bộ nhớ được cấp phát trực tiếp cho máy chủ PostgreSQL để lưu vào bộ nhớ đệm dữ liệu. Khả năng dữ liệu cần thiết nằm trong bộ nhớ càng cao, các truy vấn trả về nhanh hơn và các truy vấn nhanh hơn có nghĩa là thiết lập lõi CPU hiệu quả hơn như đã thảo luận trong phần trước.
Đôi khi, các truy vấn cũng cần bộ nhớ để thực hiện các thao tác sắp xếp trên dữ liệu trước khi nó được trả lại cho máy khách. Điều này sử dụng bộ nhớ đặc biệt bổ sung (tách biệt với shared_buffers) hoặc các tệp tạm thời trên đĩa, chậm hơn nhiều.
Mẹo điều chỉnh: Điểm bắt đầu cơ bản để thiết lập shared_buffers là đặt nó thành 1/4 giá trị của ram hệ thống khả dụng. Điều này cho phép hệ điều hành cũng thực hiện việc lưu trữ dữ liệu vào bộ nhớ đệm của riêng nó, cũng như bất kỳ quá trình đang chạy nào khác ngoài chính cơ sở dữ liệu.
Việc tăng work_mem có thể tăng tốc hoạt động sắp xếp, tuy nhiên tăng quá nhiều có thể buộc máy chủ lưu trữ hết bộ nhớ cùng nhau, vì tập giá trị có thể được cấp một phần hoặc toàn bộ nhiều lần cho mỗi truy vấn. Nếu nhiều truy vấn yêu cầu nhiều khối bộ nhớ để sắp xếp, nó có thể nhanh chóng thêm nhiều bộ nhớ hơn những gì có sẵn trên máy chủ. Giữ ở mức thấp và tăng từ từ cho đến khi hiệu suất đạt được như mong muốn.
Sử dụng lệnh "free" (chẳng hạn như "free -h"), đặt hiệu quả_cache_size thành tổng bộ nhớ trống và được lưu trong bộ nhớ cache. Điều này cho phép người lập kế hoạch truy vấn biết mức độ bộ nhớ đệm hệ điều hành có thể khả dụng và chạy các kế hoạch truy vấn tốt hơn.
Đĩa
Hiệu suất đĩa có thể là một trong những điều quan trọng hơn cần xem xét khi thiết lập hệ thống. Tốc độ đầu vào / đầu ra rất quan trọng đối với tải dữ liệu lớn hoặc tìm nạp một lượng lớn dữ liệu cần xử lý. Nó cũng xác định PostgreSQL có thể đồng bộ bộ nhớ với đĩa nhanh như thế nào để giữ cho vùng bộ nhớ tối ưu.
Một số chuẩn bị trong đĩa có thể giúp cải thiện ngay lập tức hiệu suất tiềm năng, cũng như chứng minh cho hệ thống cơ sở dữ liệu phát triển trong tương lai.
-
Đĩa riêng biệt
Một bản cài đặt PostgreSQL mới sẽ tạo thư mục dữ liệu của cụm ở đâu đó trên ổ đĩa chính (và có thể là duy nhất) có sẵn trên hệ thống.
Một thiết lập cơ bản sử dụng nhiều ổ đĩa hơn sẽ là thêm một ổ đĩa riêng biệt (hoặc một tập hợp các ổ đĩa thông qua RAID). Nó có lợi ích là có tất cả các chuyển dữ liệu liên quan đến cơ sở dữ liệu hoạt động trên một kênh I / O khác với hệ điều hành chính. Nó cũng cho phép cơ sở dữ liệu phát triển mà không sợ không đủ dung lượng gây ra sự cố và lỗi ở những nơi khác trong hệ điều hành.
Đối với cơ sở dữ liệu có số lượng hoạt động quá lớn, thư mục PostgreSQL Transaction Log (xlog) có thể được đặt trên một ổ đĩa khác, tách I / O nặng hơn sang một kênh khác khỏi hệ điều hành chính cũng như thư mục dữ liệu chính. Đây là một biện pháp nâng cao giúp tăng hiệu suất của hệ thống, nếu không thì hệ thống có thể gần đến giới hạn của nó.
-
Sử dụng RAID
Thiết lập RAID cho ổ cơ sở dữ liệu không chỉ bảo vệ khỏi mất dữ liệu mà còn có thể cải thiện hiệu suất nếu sử dụng cấu hình RAID phù hợp. RAID 1 hoặc 10 thường được cho là tốt nhất và 10 cung cấp tốc độ tương đương và tổng thể. Tuy nhiên, RAID 5 dù có mức dự phòng cao hơn nhưng lại bị giảm hiệu suất đáng kể do cách nó lan truyền dữ liệu xung quanh nhiều ổ đĩa. Lập kế hoạch cho tùy chọn tốt nhất hiện có với nhiều không gian để phát triển dữ liệu và đây sẽ là cấu hình không cần phải thay đổi thường xuyên, nếu có.
-
Sử dụng SSD
Ổ cứng thể rắn rất tuyệt vời về hiệu suất và nếu chúng đáp ứng được ngân sách, ổ cứng SSD doanh nghiệp có thể làm cho khối lượng công việc xử lý dữ liệu nặng cả ngày lẫn đêm nhanh hơn. Cơ sở dữ liệu nhỏ hơn đến trung bình với khối lượng công việc nhỏ hơn đến trung bình có thể quá mức cần thiết, nhưng khi chiến đấu để đạt được tỷ lệ phần trăm tăng nhỏ nhất trên các ứng dụng lớn, SSD có thể là viên đạn bạc đó.
Mẹo điều chỉnh: Chọn một thiết lập ổ đĩa phù hợp nhất cho ứng dụng hiện có và có nhiều dung lượng để phát triển theo thời gian khi dữ liệu tăng lên.
Nếu sử dụng SSD, việc đặt random_page_cost thành 1,5 hoặc 2 (mặc định là 4) sẽ có lợi cho trình lập kế hoạch truy vấn, vì việc tìm nạp dữ liệu ngẫu nhiên nhanh hơn nhiều so với trên đĩa quay.
Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thứcCài đặt cấu hình ban đầu
Khi thiết lập PostgreSQL lần đầu tiên, có một số cài đặt cấu hình có thể dễ dàng thay đổi dựa trên sức mạnh của máy chủ. Khi ứng dụng truy vấn cơ sở dữ liệu theo thời gian, việc điều chỉnh cụ thể có thể được thực hiện dựa trên nhu cầu của ứng dụng. Tuy nhiên, đó sẽ là chủ đề cho một blog điều chỉnh riêng biệt.
Cài đặt bộ nhớ
shared_buffers:Đặt thành 1/4 bộ nhớ hệ thống. Nếu hệ thống có tổng bộ nhớ dưới 1 GB, hãy đặt thành ~ 1/8 tổng bộ nhớ hệ thống
work_mem:Mặc định là 4MB và thậm chí có thể còn nhiều cho ứng dụng được đề cập. Nhưng nếu các tệp tạm thời được tạo thường xuyên và những tệp đó khá nhỏ (hàng chục megabyte), thì có thể đáng để tăng cài đặt này. Cài đặt mức mục nhập bảo tồn có thể là (1/4 bộ nhớ hệ thống / max_connections). Cài đặt này phụ thuộc nhiều vào hành vi thực tế và tần suất của các truy vấn đến cơ sở dữ liệu, vì vậy chỉ nên tăng một cách thận trọng. Hãy sẵn sàng để giảm nó trở lại các mức trước đó nếu sự cố xảy ra.
effect_cache_size:Đặt thành tổng bộ nhớ trống và được lưu trong bộ nhớ cache được báo cáo bằng lệnh "free".
Cài đặt trạm kiểm soát
Đối với PostgreSQL 9.4 trở xuống:
checkpoint_searies:Một số phân đoạn điểm kiểm tra (mỗi đoạn 16 megabyte) để cung cấp cho hệ thống ghi nhật ký phía trước. Giá trị mặc định là 3 và có thể tăng lên 64 một cách an toàn cho các cơ sở dữ liệu thậm chí nhỏ.
Đối với PostgreSQL 9.5 trở lên:
max_wal_size:Điều này đã thay thế checkpoint_searies dưới dạng cài đặt. Giá trị mặc định là 1GB và có thể vẫn ở đây cho đến khi cần thay đổi thêm.
Bảo mật
Listen_address:Cài đặt này xác định địa chỉ IP cá nhân / Thẻ mạng nào để lắng nghe các kết nối. Trong một thiết lập đơn giản, có thể sẽ chỉ có một, trong khi các mạng nâng cao hơn có thể có nhiều thẻ để kết nối với nhiều mạng. * Dấu hiệu lắng nghe mọi thứ. Tuy nhiên, nếu ứng dụng truy cập vào cơ sở dữ liệu là sống trên cùng một máy chủ lưu trữ với chính cơ sở dữ liệu đó, thì việc giữ nó là ‘localhost’ là đủ.
Ghi nhật ký
Một số cài đặt ghi nhật ký cơ bản không làm quá tải nhật ký như sau.
log_checkpoints = on
log_connections = on
log_disconnections = on
log_temp_files = 0