2009-10-08 58 views
19

Tôi đã tìm thấy một số tài nguyên nói về điều chỉnh máy chủ cơ sở dữ liệu, nhưng tôi không tìm thấy nhiều điều chỉnh về các truy vấn riêng lẻ. Ví dụ, trong Oracle, tôi có thể thử thêm gợi ý để bỏ qua chỉ mục hoặc sử dụng sắp xếp hợp nhất so với tham gia tương quan, nhưng tôi không thể tìm thấy nhiều điều chỉnh Postgres ngoài using explicit joins và đề xuất khi bulk loading tables.Hướng dẫn điều chỉnh truy vấn PostgreSQL?

Có bất kỳ hướng dẫn nào tồn tại để tôi có thể tập trung vào điều chỉnh các truy vấn chạy và/hoặc hoạt động kém nhất, hy vọng không ảnh hưởng xấu đến các truy vấn hiện đang hoạt động tốt không?

Tôi thậm chí còn rất vui khi tìm thấy thứ gì đó so sánh các loại truy vấn nhất định được thực hiện so với các cơ sở dữ liệu khác, vì vậy tôi có một đầu mối tốt hơn về những thứ cần tránh.

cập nhật:

tôi nên đã đề cập, tôi mất tất cả các lớp DBA Oracle cùng với mô hình dữ liệu và SQL chỉnh các lớp học của họ trở lại trong những ngày 8I ... vì vậy tôi biết về 'GIẢI THÍCH' , nhưng đó là nhiều hơn để cho bạn biết những gì đang xảy ra với truy vấn, không nhất thiết phải làm thế nào để làm cho nó tốt hơn. (ví dụ, là 'trong khi var = 1 hoặc var = 2' và 'trong khi var in (1,2)' được coi là giống nhau khi tạo một kế hoạch thực hiện? Điều gì sẽ xảy ra nếu tôi thực hiện nó với 10 hoán vị? Có cách nào để lập kế hoạch để tối ưu hóa để bắt đầu nhanh nhất và kết thúc nhanh nhất? Tôi có thể chạy loại 'gotchas' nào khi chuyển từ mySQL, Oracle hoặc một số RDBMS khác?)

Tôi có thể viết bất kỳ hàng tá truy vấn phức tạp nếu không phải hàng trăm cách, và tôi hy vọng sẽ không phải thử tất cả chúng và tìm ra cái nào hoạt động tốt nhất thông qua thử và sai. Tôi đã thấy rằng 'số lượng SELECT (*)' sẽ không sử dụng chỉ mục, nhưng 'số lượng SELECT (primary_key)' sẽ ... có thể là một loại tài liệu 'PostgreSQL cho người dùng SQL có kinh nghiệm' đã giải thích các loại truy vấn tránh, và cách tốt nhất để viết lại chúng, hoặc cách để người lập kế hoạch xử lý chúng tốt hơn.

cập nhật 2:

Tôi tìm thấy một Comparison of different SQL Implementations trong đó bao gồm PostgreSQL, DB2, MS-SQL, MySQL, Oracle và Informix, và giải thích nếu, như thế nào, và gotchas vào những thứ bạn có thể thử để làm, và phần tham chiếu của anh ta được liên kết với Oracle/SQL Server/DB2/Mckoi /MySQL Database Equivalents (đó là tiêu đề của nó gợi ý) và cho wikibook SQL Dialects Reference bao gồm mọi thứ mà mọi người đóng góp (bao gồm một số DB2, SQLite, mySQL, PostgreSQL, Firebird, Vituoso, Oracle, MS-SQL, Ingres và Linter) .

+0

Điều chỉnh truy vấn không hoàn toàn, nhưng đối với những người đến từ mysql, điều này có thể hữu ích: http://www.wikivs.com/wiki/MySQL_vs_PostgreSQL – Joe

+0

Và đối với những người đến từ Oracle: http: //www.cs.cmu .edu/~ pmerson/docs/OracleToPostgres.pdf; và nói chung 'gotchas' cho postgres: http://sql-info.de/postgresql/postgres-gotchas.html – Joe

+0

Điều này có thể hữu ích cho bạn điều chỉnh postgres: http://tekadempiere.blogspot.ae/2014/09/ tuning-postgresql-for-better-performance.html – Sajeev

Trả lời

5

http://www.postgresql.org/docs/current/static/indexes-examine.html

Bạn có thể đưa ra gợi ý: SET enable_indexscan TO false; sẽ làm cho PostgreSQL cố gắng không sử dụng chỉ số

+0

Ah ... Tôi không nhận ra các cài đặt trong phần 'Lập kế hoạch truy vấn' của tài liệu (http://www.postgresql.org/docs/current/static/runtime-config-query.html) có thể được đặt mỗi phiên. – Joe

3

tốt nhất tôi đã nhìn thấy là ở đây: , nhưng PDF mới nhất trong đó là từ năm 2008, do đó có thể là một cái gì đó gần đây hơn. Tôi muốn nghe câu trả lời của người dùng khác.

Ngoài ra, ủ một cái gì đó trong các gói contrib: http://www.sai.msu.su/~megera/wiki/plantuner

4

Công cụ PGAdmin3 bao gồm một công cụ giải thích đồ họa cho phá vỡ như thế nào một truy vấn được xử lý. Nó cũng đặc biệt hữu ích để hiển thị nơi quét bảng xảy ra.

5

Để giải quyết quan điểm của bạn, rất tiếc, cách duy nhất để điều chỉnh truy vấn trong Postgres là khá nhiều để điều chỉnh cơ sở dữ liệu bên dưới nó.Trong oracle, bạn có thể thiết lập tất cả các tùy chọn trên truy vấn theo cơ sở truy vấn, vượt qua kế hoạch tối ưu hóa trong quá trình này, nhưng trong Postgres, bạn khá nhiều lòng thương xót của trình tối ưu hóa, vì tốt và bị bệnh.

11

Đối với các truy vấn hoạt động kém - hãy giải thích phân tích và đọc nó.

Bạn có thể đặt kết quả phân tích giải thích trên trang web như explain.depesz.com - nó sẽ giúp bạn tìm thấy các yếu tố thực sự mất nhiều thời gian nhất.

6

Có một công cụ trực tuyến tốt đẹp mà mất đầu ra của EXPLAIN ANALYZE, và đồ họa cho bạn thấy bộ phận quan trọng (ví dụ ước lượng sai, điểm nóng, vv)

http://explain.depesz.com/help

Btw, tôi nghĩ rằng các truy vấn posted trở thành công và liên kết "giải thích trước" đã bị spambots tấn công.

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