2015-10-26 21 views
8

Gần đây tôi đã di chuyển cơ sở dữ liệu Postgres của mình từ Windows sang CentOS 6.7. Trên Windows cơ sở dữ liệu không bao giờ sử dụng nhiều CPU, nhưng trên Linux tôi thấy nó bằng cách sử dụng một CPU liên tục ~ 30% (sử dụng hàng đầu). (4 lõi trên máy)Postgres hằng số 30% sử dụng CPU

Bất cứ ai biết nếu điều này là bình thường, hoặc tại sao nó sẽ làm điều này? Ứng dụng có vẻ chạy tốt và nhanh hoặc nhanh hơn Windows.

Lưu ý, đây là cơ sở dữ liệu lớn, 100gb + dữ liệu, 1000+ cơ sở dữ liệu.

tôi đã cố gắng sử dụng pgAdmin để theo dõi tình trạng server, nhưng tình trạng máy chủ bị treo, và thất bại trong việc chạy, báo lỗi "tham số log_filename phải bằng"

+0

Bạn đã kiểm tra các truy vấn đang chạy chưa?chọn * từ pg_stat_activity nơi trạng thái <> 'nhàn rỗi'. Có lẽ là một số autovacuum đang chạy ... – Christian

+0

Các quy trình PostgreSQL nào được hiển thị trong 'top'? Dòng lệnh của họ là gì? Chạy nó như 'top -c' để xem. –

+0

top-cho -> 28378 postgres 20 0 1735m 85m 6508 R 18.3 1.1 2233: 11 postgres: quá trình khởi động autovacuum – James

Trả lời

0

Có thể có nhiều lý do để tăng tải máy chủ.

  1. Nếu bạn đang tìm tải cấp truy vấn trên máy chủ thì bạn phải khớp với ID phụ trợ Postgres cụ thể cho ID tiến trình hệ thống bằng bảng hệ thống pg_stat_activity.

SELECT pid, datname, usename, query FROM pg_stat_activity;

Một khi bạn biết những gì các truy vấn đang chạy, bạn có thể điều tra thêm (GIẢI THÍCH/GIẢI THÍCH PHÂN TÍCH; kiểm tra ổ khóa, vv)

  1. Bạn có thể có những vấn đề ganh khóa, có thể do rất cao max_connections. Xem xét giảm max_connections và sử dụng một pooler kết nối nếu đây là trường hợp. Nhưng điều đó có thể tăng dần theo thời gian cho khách hàng kết nối.

  2. Có thể là các kết nối chặn Hệ thống Windows và không cho phép sử dụng hệ thống. Và bây giờ Linus cho phép các kết nối của nó sử dụng CPU và thực hiện nhanh hơn. : P

Cũng đáng đọc:

  1. How to monitor PostgreSQL
  2. Monitoring CPU and memory usage from Postgres
3

Với 1000 cơ sở dữ liệu Tôi hy vọng người lao động chân không và số liệu thống kê thu để dành nhiều thời gian kiểm tra về những gì cần bảo trì.

tôi đề nghị bạn làm hai việc

  • tăng tham số autovacuum_naptime để giảm tần suất kiểm tra
  • đặt stats_temp_directory trên ramdisk

Bạn có lẽ cũng thiết lập một max_connections giới hạn cao để cho phép khách hàng của bạn sử dụng số lượng lớn cơ sở dữ liệu và đây là một nguồn CPU có thể xảy ra khác, do số lượng 'slots' cao được kiểm tra mỗi lần một backend phải đồng bộ hóa w ith những người khác.

+0

bất kỳ ý tưởng nào tại sao cùng một cơ sở dữ liệu trên các cửa sổ không sử dụng bất kỳ cpu nào? – James

+0

Phiên bản PostgreSQL nào bạn đang sử dụng trên Windows? Những gì bạn đang sử dụng bây giờ? Cấu hình của PostgreSQL có giống hệt nhau không? Windows rất khác với Linux theo cách nó xử lý bộ nhớ và đĩa, vì vậy nếu cấu hình bạn đang sử dụng trên CentOS thì giống như bạn đã có trên Windows, nó có thể không thích hợp. – mnencia

+0

@James Với các thiết lập mặc định trên cửa sổ, trong tay tôi, hệ thống trở nên cơ bản không sử dụng được lâu trước khi nó đạt tới 1000 cơ sở dữ liệu. Bạn có chắc là bạn không tắt autovac hoặc autovacuum_naptime trên máy chủ Windows không? – jjanes