Tôi nên điều chỉnh Postgresql cho 20 GB RAM như thế nào?


7

Tôi đã may mắn có được việc sử dụng phiên bản Linode 20 GB chạy Ubuntu 64 bit. Tôi muốn cố gắng tối ưu hóa PostGres cho dịch vụ này, nhưng tôi không biết mình nên ưu tiên thay đổi điều gì.

Tôi có một vài bộ dữ liệu gồm khoảng 20.000 hàng và các tính toán đang được thực hiện là các truy vấn cần nhiều bộ nhớ (phân tích không gian) với một số lượng nhỏ các hàng được viết sau mỗi yêu cầu. Tổng số người dùng rất ít (10 - 50).

Tôi đã đọc qua bài viết này trên trang Postgresql nhưng tôi không biết đủ về cách thức hoạt động của nó, để biết những gì tôi nên ưu tiên. Tôi cũng đã xem xét lời khuyên về những gì cần thay đổi cho loại công việc địa lý ở đây.

Ví dụ: tôi đã thử thay đổi shared_buffersthành 200MB(ít hơn 75% so với 20GB). Điều này dẫn đến thông báo lỗi sau:

  • Khởi động lại máy chủ cơ sở dữ liệu PostgreSQL 9.1
    • Máy chủ PostgreSQL không khởi động được. Vui lòng kiểm tra đầu ra nhật ký: 2013-03-10 12:21:58 EDT FATAL: không thể tạo phân đoạn bộ nhớ dùng chung: Đối số không hợp lệ 2013 / 03-10 12:21:58 EDT CHI TIẾT: Cuộc gọi hệ thống thất bại là shmget (key = 5432001 , kích thước = 47742976, 03600). 2013/03/10 12:21:58 EDT GỢI Ý: Lỗi này thường có nghĩa là yêu cầu của PostgreQuery đối với phân đoạn bộ nhớ dùng chung vượt quá tham số SHMMAX của hạt nhân của bạn. Bạn có thể giảm kích thước yêu cầu hoặc cấu hình lại kernel bằng SHMMAX lớn hơn. Để giảm kích thước yêu cầu (hiện tại là 47742976 byte), hãy giảm mức sử dụng bộ nhớ dùng chung của PostgreQuery, có lẽ bằng cách giảm shared_buffers hoặc max_connections. Nếu kích thước yêu cầu đã nhỏ, có thể nó nhỏ hơn tham số SHMMIN của hạt nhân của bạn, trong trường hợp tăng kích thước yêu cầu hoặc cấu hình lại SHMMIN được yêu cầu. Tài liệu PostgreSQL chứa nhiều thông tin hơn về cấu hình bộ nhớ dùng chung.

Tôi đã trả lại giá trị ban đầu này và thử thay đổi:

work_mem = 50MB
maintenance_work_mem = 256MB 

Vấn đề của tôi là tôi không biết nên thay đổi giá trị nào hoặc tôi nên ưu tiên giá trị nào là chìa khóa để thử nghiệm và kiểm tra. Tôi nên làm gì đặc biệt để tối ưu hóa cơ sở dữ liệu này?


Trong hầu hết các trường hợp, cài đặt hiệu quả_cache_size thành 20GB và shared_buffers thành xx MB sẽ đủ.

Thông báo lỗi bạn trích dẫn đầy đủ (thankyou) đề cập đến cài đặt hệ điều hành bạn phải thay đổi để tăng shared_buffers. Xem postgresql.org/docs/civerse/static/r nb-config-resource.html , postgresql.org/docs/civerse/static/ trộm
Craig Ringer

Đối với việc tìm ra những gì bạn cần làm, điều đó phụ thuộc vào tất cả các loại yếu tố. Khối lượng công việc của bạn - đọc hoặc viết nặng? Rất nhiều truy vấn nhỏ hoặc ít truy vấn lớn hơn? Số lượng khách hàng? Sử dụng kết nối tổng hợp? Nhiều giao dịch ngắn hoặc ít giao dịch dài hơn? Cơ sở dữ liệu trên đĩa lớn đến mức nào và bao nhiêu trong số đó là "nóng" tức là truy vấn tích cực và thường xuyên? Hiệu suất của hệ thống lưu trữ liên quan như thế nào?
Craig Ringer

@CraigRinger Tôi có đề cập đến một số biện pháp trong câu hỏi này - Tôi không quen lắm với cách đo lường hoặc phân loại nhóm khách hàng. Bạn có ý nghĩa gì bởi hệ thống lưu trữ liên quan?

Câu trả lời:


14

Tôi muốn giới thiệu sử dụng pgtuneđược viết bởi Greg Smith.

Chỉ cần chạy nó trên máy chủ của bạn như sau:

pgtune -i postgresql.conf -o postgresql-tuned.conf

Nó có thêm vài tùy chọn, nhưng chỉ cần làm điều đó và sử dụng được tạo postgresql.confsẽ làm nên điều kỳ diệu cho hiệu suất máy chủ của bạn.

Tôi nghĩ PostgreSQL nên bao gồm điều này trong cài đặt tiêu chuẩn và thậm chí chạy nó theo mặc định - để mọi người không thể phàn nàn về hiệu suất PostgreQuery xấu.


2
Tuyệt diệu! Đây chính xác là những gì tôi cần. Tôi đã vấp phải một số cài đặt nhưng không quen thuộc với tất cả những điều tôi nên thay đổi.

2
+1 Công cụ hữu ích. Không được cập nhật nhiều kể từ Postgres 8.4. Nhưng chủ yếu vẫn hoạt động cho phiên bản mới nhất 9.2.
Erwin Brandstetter

Khi tôi đã khắc phục sự SHMMAXcố (giải pháp tại đây: Askubfox.com/questions/44373/ mẹo ) pgtunehoạt động như một cơ duyên.

Uh, tôi đã không nhận ra bạn có vấn đề về shmmax cho đến khi tôi đọc lại câu hỏi của bạn! tất nhiên bạn cần phải chỉnh sysctl.conf. BTW, trong PostgreQuery 9.3, điều này sẽ không cần thiết
mvp

1
@mvp, đây là một tuner tôi đã viết.
Acumenus

4

Bạn sẽ cần phải tăng các cài đặt shmmax, shmall, dirmax và dirmnb trên máy chủ của bạn. PGTUNE, như đã đề cập trong câu trả lời khác, sẽ cho bạn biết những gì cần đặt chúng.

Bạn có thể làm điều đó như thế này:

sysctl -w kernel.shmmax={{value}}
sysctl -w kernel.shmall={{value}}
sysctl -w kernel.msgmax={{value}}
sysctl -w kernel.msgmnb={{value}}

Bạn có thể kiểm tra những giá trị đã như thế này:

cat /proc/sys/kernel/shmmax
cat /proc/sys/kernel/shmmall
cat /proc/sys/kernel/msgmax
cat /proc/sys/kernel/msgmnb

1
Như một lời cảnh báo, người dùng phải nhớ luôn luôn kiểm tra giá trị hiện có trước khi cập nhật nó. Nếu giá trị hiện tại đã cao hơn và rất có thể, thì nó không cần phải cập nhật.
Acumenus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.