2011-02-08 42 views
6

Tôi đang cố gắng cải thiện hiệu suất của một quy trình lưu trữ plpgsql dài hạn, nhưng tôi không có ý tưởng, nếu có, các công cụ lược tả có sẵn. Bất cứ ai có thể cung cấp các đề xuất cho làm thế nào để đi về profiling như một thủ tục?Làm thế nào để cấu hình các thủ tục plpgsql

Trả lời

5

Tăng một số notices từ thủ tục bao gồm clock_timestamp() để xem cơ sở dữ liệu dành thời gian ở đâu. Và làm cho các thủ tục đơn giản nhất có thể.

Bạn có thể cho chúng tôi xem ví dụ không?

+0

Tôi đã hy vọng một phương pháp không yêu cầu thay đổi thủ tục, nhưng điều đó có lẽ sẽ tốt hơn là không có gì. http://www.depesz.com/index.php/2010/03/18/profiling-stored-proceduresfunctions/ tài liệu một thủ tục tương tự, nhưng có vẻ quá phức tạp để có được dữ liệu có thể sử dụng được. Thủ tục là một tập hợp các vòng lồng nhau được sử dụng để tạo tài liệu cho một truy vấn xử lý nhập dữ liệu Solr, nếu điều đó giúp bất kỳ (có thể là không). – Aneurysm9

+0

Nó không phải là một cách tuyệt vời để làm điều đó, nhưng đó là cách duy nhất. Đó cũng là lý do tại sao điều quan trọng là giữ mọi thứ ngắn gọn và đơn giản: các thủ tục ngắn gọn dễ dàng hơn để gỡ lỗi và lược tả, giống như các mã khác. –

+0

Thật không may, các thủ tục là về đơn giản như nó có thể nhận được. Nó đi một loạt các mối quan hệ 1: n bằng cách chọn một số dữ liệu, lặp qua n, chọn nhiều dữ liệu hơn, lặp qua các mối quan hệ 1: n lồng nhau, sau đó RETURN NEXT từ vòng lặp bên trong khi một hàng đầy sẵn sàng. Mọi thứ phức tạp hơn SELECT hoặc FOR đã được đưa vào các thủ tục khác. – Aneurysm9

1

Để bắt đầu, bạn có thể bật logging of all statements vào tệp nhật ký Postgres. Nhật ký sẽ chứa thời gian chạy cho mỗi câu lệnh. Bằng cách này bạn có thể xác định các truy vấn chậm nhất và cố gắng tối ưu hóa chúng.

Nhưng đọc nhận xét của bạn về bài đăng của Frank tôi đoán rằng vòng lặp là vấn đề của bạn. Cố gắng loại bỏ vòng lặp và thực hiện mọi thứ trong một truy vấn. Một câu lệnh đọc nhiều hàng thường hiệu quả hơn rất nhiều câu lệnh chỉ đọc một vài hàng.

2

Chúng tôi đang tìm kiếm một câu trả lời tốt hơn cho câu hỏi này, và đã tình cờ công cụ này: http://www.openscg.com/2015/02/postgresql-plpgsql-profiler/ Hosted tại địa chỉ: https://bitbucket.org/openscg/plprofiler

Nó tuyên bố để cung cấp cho bạn những gì bạn đang tìm kiếm, bao gồm tổng thời gian dành cho mỗi dòng của hàm. Chúng tôi vẫn chưa điều tra thêm, nhưng dựa trên tuyên bố của tác giả, chúng tôi lạc quan.

Các vấn đề liên quan