Postgresql 8.3: Giới hạn tiêu thụ tài nguyên trên mỗi truy vấn


12

Tôi đang sử dụng PostgreSQL 8.3 + PostGIS 1.3 để lưu trữ dữ liệu không gian địa lý trên Ubuntu 8.04 Hardy .

Phiên bản đặc biệt này của PostGIS có một lỗi khi tính toán buffer()trên các phân đoạn rất phức tạp, khiến cho truy vấn chiếm nhiều bộ nhớ hơn cho đến khi toàn bộ máy bị kẹt.

Tôi đang tìm kiếm một cơ chế PostgreSQL có thể:

  • Giới hạn mức tiêu thụ bộ nhớ (và có lẽ các tài nguyên khác) được sử dụng bởi một truy vấn cụ thể.
  • Tự động dừng các truy vấn có thời gian thực hiện vượt quá một ngưỡng nhất định.

Có ý kiến ​​gì không?


Tại sao bạn tiếp tục sử dụng một phiên bản có lỗi cắn bạn? Sử dụng một phiên bản đã được sửa và vấn đề của bạn không còn nữa.
Frank Heikens

Đúng, nhưng đôi khi có lỗi trong mã của chúng tôi hoặc chỉ là các truy vấn mất nhiều thời gian. Tôi muốn họ chết với thông báo lỗi đăng nhập.
Adam Matan

Câu trả lời:


9

Để hạn chế tiêu thụ bộ nhớ, tham số cấu hình chính là work_mem. Vì điều này áp dụng cho mỗi thao tác, không phải cho mỗi truy vấn, bạn không thể đơn giản đặt nó thành N nếu bạn muốn sử dụng N lượng bộ nhớ, nhưng bạn phải điều chỉnh và điều chỉnh nó một chút để có kết quả mong muốn.

Tuy nhiên, điều này không giúp ích gì trong trường hợp có lỗi và rò rỉ bộ nhớ khác trong mã máy chủ hoặc tiện ích mở rộng. Bạn có thể kiểm soát điều đó với các giới hạn tài nguyên dành riêng cho quy trình được kiểm soát bởi ulimit. Nhưng nếu bạn đạt đến giới hạn và phân bổ bộ nhớ không thành công, bạn muốn điều gì xảy ra? Nó có lẽ sẽ không cư xử quá độc đáo. Tốt hơn nên sửa những lỗi đó hoặc sử dụng một phiên bản khác.

Các truy vấn dừng có thời gian thực hiện vượt qua ngưỡng, sử dụng tham số `statement_timeout ', ví dụ:

SET statement_timeout TO '10min';

Tuyệt quá. Chỉ cần những gì tôi đang tìm kiếm.
Adam Matan

2

Hãy xem Wiki Postgres :

PostgreSQL không có cơ sở để giới hạn tài nguyên mà người dùng, truy vấn hoặc cơ sở dữ liệu cụ thể tiêu thụ hoặc tương ứng để đặt mức độ ưu tiên sao cho một người dùng / truy vấn / cơ sở dữ liệu nhận được nhiều tài nguyên hơn những người khác. Cần sử dụng các phương tiện hệ điều hành để đạt được mức độ ưu tiên hạn chế.

Bạn có thể điều chỉnh cài đặt hiệu suất trên mỗi người dùng hoặc mỗi cơ sở dữ liệu nhưng không phải khi nào hủy bỏ một số truy vấn nhất định.


+1 Điều gì về việc thiết lập tối đa cho số lượng bộ nhớ mà toàn bộ cụm có thể tiêu thụ?
Adam Matan
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.