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
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?
Để 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.
Cố gắng sử dụng tiện ích mở rộng pg_stat_statements (http://www.postgresql.org/docs/9.2/static/pgstatstatements.html). Nó có thể hiển thị số cuộc gọi và tổng thời gian gọi cho tất cả các câu lệnh (bao gồm cả các câu lệnh con trong các thủ tục plpgsql).
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.
- 1. Cấu hình để gỡ lỗi thủ tục lưu trữ
- 2. Làm thế nào để gọi thủ tục lưu sẵn từ một thủ tục lưu sẵn khác?
- 3. Làm thế nào để TẠO THỦ TỤC trong H2
- 4. Thủ tục tạo ra một kết cấu
- 5. Làm thế nào để lưu một thủ tục lưu trữ?
- 6. Mẫu để lưu các thủ tục?
- 7. Làm thế nào để sử dụng các biến cục bộ trong các thủ tục lưu sẵn?
- 8. Làm thế nào để tạo các bảng tạm thời duy nhất trong các thủ tục MySQL?
- 9. Làm thế nào để viết ra các thủ tục được lưu trữ cho các tệp?
- 10. làm thế nào để các cuộc gọi thủ tục làm việc trong assembler?
- 11. Làm thế nào để gọi Thủ tục lưu trữ (với 2 tham số) trong một thủ tục lưu trữ?
- 12. Làm thế nào để sử dụng một giá trị từ một thủ tục lưu sẵn trong một thủ tục khác?
- 13. Làm thế nào để chèn/tạo các thủ tục lưu sẵn trong mySQL từ PHP?
- 14. Làm thế nào để cấu hình gitignore?
- 15. T-SQL Làm thế nào để tạo bảng tự động trong các thủ tục lưu sẵn?
- 16. MySQL: Làm thế nào để sửa đổi các thủ tục lưu trữ một cách nguyên tử?
- 17. Làm cách nào để lập trình thủ tục tài liệu?
- 18. làm thế nào để in ra định nghĩa của một thủ tục trong Oracle?
- 19. Làm cách nào để xóa thủ tục Tcl?
- 20. ADO.NET cổ điển - Làm thế nào để vượt qua UDT để lưu trữ thủ tục?
- 21. Làm thế nào để giữ lại thứ tự sắp xếp của các thủ tục có thể định dạng?
- 22. Làm theo cách thủ tục để phát triển cây 2D
- 23. Làm thế nào/khi mysql biên dịch các thủ tục lưu sẵn?
- 24. Làm thế nào để cấu hình Fiddler để nghe localhost?
- 25. Làm cách nào để sử dụng lại mã trong các thủ tục lưu sẵn SQL?
- 26. Làm thế nào để mô phỏng một bản in trong một thủ tục lưu trữ MySQL
- 27. MySQL foreach thay thế cho thủ tục
- 28. Làm thế nào để gỡ lỗi thủ tục được lưu trữ trong Sybase ASE?
- 29. Làm thế nào để bạn gỡ lỗi thủ tục lưu trữ MySQL?
- 30. Làm thế nào để gỡ lỗi một thủ tục lưu sẵn trong Toad?
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
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. –
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