Một truy vấn PostgreQuery có thể sử dụng nhiều lõi không?


57

Trong các phiên bản gần đây của PostgreSQL (kể từ tháng 12 năm 2013), chúng tôi có thể chia sẻ truy vấn giữa hai hoặc nhiều lõi để tăng hiệu suất không? Hay chúng ta nên có lõi nhanh hơn?

Câu trả lời:


49

Không, đối với các phiên bản của PostgreSQL trước v9.6. Vui lòng xem Câu hỏi thường gặp về PostgreSQL : PostgreSQL sử dụng tài nguyên CPU như thế nào?

Máy chủ PostgreSQL dựa trên quy trình (không phân luồng). Mỗi phiên cơ sở dữ liệu kết nối với một quy trình hệ điều hành (HĐH) PostgreQuery duy nhất . Nhiều phiên được hệ điều hành tự động trải rộng trên tất cả các CPU có sẵn. HĐH cũng sử dụng CPU để xử lý I / O đĩa và chạy các tác vụ phi cơ sở dữ liệu khác. Các ứng dụng khách có thể sử dụng các luồng, mỗi luồng kết nối với một quy trình cơ sở dữ liệu riêng biệt.

Kể từ phiên bản 9.6, các phần của một số truy vấn có thể được chạy song song, trong các quy trình HĐH riêng biệt, cho phép sử dụng nhiều lõi CPU. Các truy vấn song song được bật theo mặc định trong phiên bản 10 (max_pool_workftimeper_gather), với sự song song bổ sung dự kiến ​​trong các bản phát hành trong tương lai.


38

PostgreSQL 9.6+ trở đi, sẽ bắt đầu thấy Parallel-Query cuối cùng đến PostgreSQL.

Ví dụ: Các khái niệm như Quét song song / Ghép song song / Tổng hợp song song hiện đã được đưa vào, với nhiều tính năng sắp ra mắt.

Điều thực sự thú vị là có những báo cáo xác nhận near-linear speed-uptrong một số trường hợp, điều này khá ấn tượng!


8

Không, nhưng có một cách giải quyết. :)

Tôi tìm thấy hàm plpgsql (chọn song song), phân tách truy vấn của bạn dựa trên khóa chính, sau đó kết nối với cơ sở dữ liệu thông qua tiện ích mở rộng dblink và chờ tất cả các truy vấn con.

https://gist.github.com/mjgleaso/80 31067

Tác giả cũng đã viết bài viết về chức năng này: http://geeohspatial.blogspot.com/2013/12/a-simple-feft-for-abul-queries_18.html


3

Không. Mỗi kết nối tạo ra một quy trình riêng trên máy chủ.

Bạn có thể "mô phỏng" một số song song bằng cách sử dụng ngôn ngữ thủ tục theo luồng như pljava. Tạo một thủ tục java (hàm) khởi chạy một số luồng và tạo kết quả đầu ra bằng cách sử dụng một số công nhân. Phần cuối được đồng bộ hóa để mỗi công nhân có thể cập nhật đầu ra không đồng bộ.

Java có hỗ trợ tốt cho việc phối hợp / hợp tác luồng.

Ví dụ, điều này sẽ tốt cho các hoạt động chuyên sâu của CPU hoặc các hoạt động về chiều dài mạng.

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.