2009-07-23 17 views
7

Cách hiệu quả để viết các truy vấn nhanh hơn cụ thể trong Postgres là gì? Vui lòng không bao gồm các thực hành cơ sở dữ liệu chung tốt (ví dụ: sử dụng chỉ mục hoặc chuẩn hóa). Tôi đang tìm gợi ý như các bảng có nguồn gốc làm việc nhanh hơn các truy vấn phụ hoặc sử dụng các hàm chuỗi python có vẻ nhanh hơn các hàm chuỗi pgsql. Lý tưởng nhất, danh sách này sẽ bao gồm các ví dụ và lời khuyên trong thế giới thực.Điều chỉnh Postgres

Cảm ơn.

Trả lời

7

Đảm bảo hút chân không định kỳ. Hệ thống autovacuum hiện tại thực hiện khá tốt công việc này trong hầu hết các trường hợp, nhưng nó vẫn có thể hữu ích để chạy một chân không thủ công đầy đủ định kỳ (trong trường hợp của chúng tôi điều này xảy ra khoảng một lần mỗi năm).

Chỉ mục chỉ được sử dụng đáng tin cậy nếu số liệu thống kê khả dụng cho bảng. Hãy chắc chắn rằng một chân không -analyze được chạy sau khi bất kỳ thay đổi lớn cho một bảng (tấn chèn/xóa) để đảm bảo rằng chỉ số được chọn đúng cách.

Cấu hình Postgres mặc định được tối ưu hóa cho hệ thống có tài nguyên tương đối khiêm tốn và đĩa chậm. Nếu hệ thống của bạn có đĩa nhanh hơn (có thể), CPU nhanh hơn (có thể) hoặc RAM nhiều hơn (gần như chắc chắn), thì hãy đảm bảo điều chỉnh các thông số khác nhau dựa trên đó. Điều chính là tăng kích thước bộ đệm, nhưng nếu bạn có các đĩa cực nhanh (đặc biệt là SSD), thì cũng nên giảm ước tính chi phí cho thời gian tìm kiếm.

Tôi cũng đã có một vài kinh nghiệm với việc tham gia hơi chậm trong các truy vấn khá phức tạp, nhưng đây là những điều khó khăn hơn nhiều để khái quát hóa. Nói chung, nó sẽ giúp rõ ràng hơn với truy vấn so với những gì có thể được yêu cầu trong một db với trình tối ưu hóa truy vấn phức tạp hơn (ví dụ, Oracle hoặc DB2).

+0

Có, tôi đã nhận thấy chân không tự động thực sự không làm việc quá tốt với các hệ thống có tải dữ liệu lớn hàng ngày. Chúng tôi ít nhất "phân tích" hàng ngày. –

8

Quy tắc không thể phá vỡ duy nhất mà tôi đã tìm thấy cho đến nay là không có quy tắc không thể phá vỡ.

Đôi khi truy vấn phụ nhanh hơn, đôi khi kết nối nhanh hơn. Đôi khi bạn muốn plpgsql, đôi khi bạn muốn một số pl/* khác.

này thường thích hợp nhất khuyên:

  1. Hãy chắc chắn rằng bạn chân không và phân tích (bật autovacuum)
  2. sử dụng explain phân tích và tìm hiểu để đọc kết quả tốt của nó
  3. chơi với cơ sở dữ liệu. cố gắng làm những điều kỳ lạ. thường - nó không giúp được gì. nhưng đôi khi nó làm, và bạn học những thủ đoạn mới.
1

Thanh toán tất cả các liên kết trên trang này, vì bạn đang thực hiện điều chỉnh thực tế tốt nhất là bạn biết tất cả các tùy chọn có ý nghĩa gì và khi nào bất kỳ tùy chọn nào áp dụng cho cấu hình của bạn.

https://wiki.postgresql.org/wiki/Performance_Optimization