Vì mỗi công nhân thực hiện phần tỷ lệ kèo bóng đá của kế hoạch hoàn thành, không thể chỉ cần thực hiện một kế hoạch truy vấn thông thường và chạy nó bằng nhiều công nhân. Mỗi công nhân sẽ tạo ra một bản sao đầy đủ của tập kết quả đầu ra, vì vậy truy vấn sẽ không chạy nhanh hơn bình thường nhưng sẽ tạo ra kết quả không chính xác. Thay vào đó, phần tỷ lệ kèo bóng đá của kế hoạch phải là những gì được biết đến bên trong Trình tối ưu hóa truy vấn làtỷ lệ kèo bóng đá một phần; Đó là, nó phải được xây dựng để mỗi quá trình thực hiện kế hoạch sẽ chỉ tạo ra một tập hợp con của các hàng đầu ra theo cách mà mỗi hàng đầu ra bắt buộc được đảm bảo được tạo bởi chính xác một trong các quy trình hợp tác. Nói chung, điều này có nghĩa là việc quét trên bảng lái của truy vấn phải là quét nhận biết tỷ lệ kèo bóng đá.
Các loại quét bảng tỷ lệ kèo bóng đá sau đây hiện đang được hỗ trợ.
trong AQuét tuần tự tỷ lệ kèo bóng đá, các khối của bảng sẽ được chia cho các quy trình hợp tác. Các khối được đưa ra một lần, để truy cập vào bảng vẫn là tuần tự.
trong AQuét heap bitmap tỷ lệ kèo bóng đá, một quá trình được chọn làm người lãnh đạo. Quá trình đó thực hiện quét một hoặc nhiều chỉ mục và xây dựng bitmap cho biết các khối bảng nào cần được truy cập. Các khối này sau đó được chia cho các quá trình hợp tác như trong quét tuần tự tỷ lệ kèo bóng đá. Nói cách khác, quét heap được thực hiện tỷ lệ kèo bóng đá, nhưng việc quét chỉ mục cơ bản thì không.
trong AQuét chỉ mục tỷ lệ kèo bóng đáhoặcQuét chỉ có chỉ mục tỷ lệ kèo bóng đá, Các quy trình hợp tác thay phiên nhau đọc dữ liệu từ chỉ mục. Hiện tại, quét chỉ mục tỷ lệ kèo bóng đá chỉ được hỗ trợ cho các chỉ mục Btree. Mỗi quy trình sẽ yêu cầu một khối chỉ mục và sẽ quét và trả lại tất cả các bộ dữ liệu được tham chiếu bởi khối đó; Các quy trình khác có thể đồng thời trả lại các bộ dữ liệu từ một khối chỉ mục khác. Kết quả quét Btree tỷ lệ kèo bóng đá được trả về theo thứ tự được sắp xếp trong mỗi quy trình công nhân.
Các loại quét khác, chẳng hạn như quét các chỉ mục không Btree, có thể hỗ trợ quét tỷ lệ kèo bóng đá trong tương lai.
Giống như trong một kế hoạch không tỷ lệ kèo bóng đá, bảng lái có thể được nối với một hoặc nhiều bảng khác bằng cách sử dụng vòng lặp lồng nhau, nối băm hoặc nối nối. Mặt bên trong của tham gia có thể là bất kỳ loại kế hoạch tỷ lệ kèo bóng đá nào được hỗ trợ bởi người lập kế hoạch với điều kiện là an toàn khi chạy trong một công nhân tỷ lệ kèo bóng đá. Tùy thuộc vào loại tham gia, phía bên trong cũng có thể là một kế hoạch tỷ lệ kèo bóng đá.
trong ATham gia vòng lồng nhau, phía bên trong luôn không tỷ lệ kèo bóng đá. Mặc dù nó được thực hiện đầy đủ, nhưng điều này là hiệu quả nếu phía bên trong là quét chỉ mục, bởi vì các bộ dữ liệu bên ngoài và do đó các vòng tìm kiếm các giá trị trong chỉ mục được chia cho các quá trình hợp tác.
trong AHợp nhất tham gia, phía bên trong luôn là một kế hoạch không tỷ lệ kèo bóng đá và do đó được thực hiện đầy đủ. Điều này có thể không hiệu quả, đặc biệt là nếu phải thực hiện một loại, bởi vì công việc và dữ liệu kết quả được nhân đôi trong mọi quy trình hợp tác.
trong Abăm tham gia(Không có tiền tố "tỷ lệ kèo bóng đá"), phía bên trong được thực hiện đầy đủ bởi mọi quy trình hợp tác để xây dựng các bản sao giống hệt của bảng băm. Điều này có thể không hiệu quả nếu bảng băm lớn hoặc kế hoạch đắt tiền. Trong aHash tỷ lệ kèo bóng đá tham gia, phía bên trong làHash tỷ lệ kèo bóng đáChia ra công việc xây dựng bảng băm chung trên các quy trình hợp tác.
PostgreSQLHỗ trợ tập hợp tỷ lệ kèo bóng đá bằng cách tổng hợp theo hai giai đoạn. Đầu tiên, mỗi quá trình tham gia vào phần tỷ lệ kèo bóng đá của truy vấn thực hiện bước tổng hợp, tạo ra kết quả một phần cho mỗi nhóm mà quá trình đó nhận thức được. Điều này được phản ánh trong kế hoạch làTổng hợp một phần
Node. Thứ hai, kết quả một phần được chuyển cho người lãnh đạo thông quaTập hợp
hoặcTập hợp hợp nhất
. Cuối cùng, nhà lãnh đạo tổng hợp lại kết quả trên tất cả các công nhân để tạo ra kết quả cuối cùng. Điều này được phản ánh trong tỷ lệ kèo bóng đá làhoàn thiện tổng hợp
Node.
vìHoàn thiện tổng hợp
Node chạy trên quy trình lãnh đạo, các truy vấn tạo ra một số lượng tương đối lớn các nhóm so với số lượng hàng đầu vào sẽ xuất hiện ít thuận lợi hơn so với trình lập tỷ lệ kèo bóng đá truy vấn. Ví dụ: trong trường hợp xấu nhất, số lượng nhóm được nhìn thấy bởiHoàn thiện tổng hợp
Node có thể nhiều như số lượng hàng đầu vào được nhìn thấy bởi tất cả các quy trình công nhân trongTổng hợp một phần
Giai đoạn. Đối với những trường hợp như vậy, rõ ràng sẽ không có lợi ích hiệu suất khi sử dụng tập hợp tỷ lệ kèo bóng đá. Người lập kế hoạch truy vấn tính đến điều này trong quá trình lập kế hoạch và không có khả năng chọn tổng hợp tỷ lệ kèo bóng đá trong kịch bản này.
Tập hợp tỷ lệ kèo bóng đá không được hỗ trợ trong tất cả các tình huống. Mỗi tập hợp phải làan toàncho tỷ lệ kèo bóng đá và phải có chức năng kết hợp. Nếu tổng hợp có trạng thái chuyển tiếp loạiNội bộ
, nó phải có chức năng tuần tự hóa và giải phóng hóa. Nhìn thấyTạo tổng hợpĐể biết thêm chi tiết. Tập hợp tỷ lệ kèo bóng đá không được hỗ trợ nếu bất kỳ cuộc gọi hàm tổng hợp nào chứakhác biệt
hoặcĐặt hàng bởi
mệnh đề và cũng không được hỗ trợ cho các tập hợp được đặt theo thứ tự hoặc khi truy vấn liên quan đếnBộ nhóm
. Nó chỉ có thể được sử dụng khi tất cả các tham gia liên quan đến truy vấn cũng là một phần của phần tỷ lệ kèo bóng đá của kế hoạch.
Bất cứ khi nàoPostgreSQLCần kết hợp các hàng từ nhiều nguồn thành một tập kết quả duy nhất, nó sử dụngPhụ lục
hoặcMergeAppend
tỷ lệ kèo bóng đá nút. Điều này thường xảy ra khi thực hiệnLiên minh tất cả
hoặc khi quét một bảng được phân vùng. Các nút như vậy có thể được sử dụng trong các kế hoạch tỷ lệ kèo bóng đá giống như trong bất kỳ kế hoạch nào khác. Tuy nhiên, trong một kế hoạch tỷ lệ kèo bóng đá, người lập kế hoạch thay vào đó có thể sử dụngPhụ lục tỷ lệ kèo bóng đá
Node.
Khi mộtPhụ lục
Node được sử dụng trong một kế hoạch tỷ lệ kèo bóng đá, mỗi quy trình sẽ thực hiện các kế hoạch con theo thứ tự chúng xuất hiện, để tất cả các quy trình tham gia hợp tác để thực hiện kế hoạch trẻ đầu tiên cho đến khi hoàn thành và sau đó chuyển sang kế hoạch thứ hai cùng một lúc. Khi APhụ lục tỷ lệ kèo bóng đá
được sử dụng thay thế, thay vào đó, người thực thi sẽ trải rộng các quy trình tham gia càng tốt càng tốt qua các tỷ lệ kèo bóng đá của con, để nhiều tỷ lệ kèo bóng đá con được thực hiện đồng thời. Điều này tránh được sự tranh chấp và cũng tránh phải trả chi phí khởi nghiệp của một tỷ lệ kèo bóng đá trẻ em trong các quy trình không bao giờ thực hiện nó.
Ngoài ra, không giống như thông thườngPhụ lục
Node, chỉ có thể có trẻ em một phần khi được sử dụng trong gói tỷ lệ kèo bóng đá, APhụ lục tỷ lệ kèo bóng đá
Node có thể có cả kế hoạch trẻ em một phần và phi cộng sự. Trẻ em không cộng tác sẽ được quét chỉ bằng một quy trình duy nhất, vì việc quét chúng nhiều lần sẽ tạo ra kết quả trùng lặp. Do đó, các kế hoạch liên quan đến việc nối thêm nhiều bộ kết quả có thể đạt được sự tỷ lệ kèo bóng đá hạt thô ngay cả khi không có kế hoạch một phần hiệu quả. Ví dụ, hãy xem xét một truy vấn đối với bảng được phân vùng chỉ có thể được triển khai hiệu quả bằng cách sử dụng một chỉ mục không hỗ trợ quét tỷ lệ kèo bóng đá. Người lập kế hoạch có thể chọn mộtPhụ lục tỷ lệ kèo bóng đá
của thông thườngSCAN INDEX
tỷ lệ kèo bóng đá; Mỗi lần quét chỉ mục riêng lẻ sẽ phải được thực hiện để hoàn thành bởi một quy trình duy nhất, nhưng các lần quét khác nhau có thể được thực hiện cùng một lúc bởi các quy trình khác nhau.
enable_parallel_appendcó thể được sử dụng để vô hiệu hóa tính năng này.
Nếu một truy vấn dự kiến sẽ làm như vậy không tạo ra một kế hoạch tỷ lệ kèo bóng đá, bạn có thể thử giảmtỷ lệ kèo bóng đá song_setup_costhoặctỷ lệ kèo bóng đá song_tuple_cost. Tất nhiên, kế hoạch này có thể trở nên chậm hơn kế hoạch nối tiếp mà người lập kế hoạch ưa thích, nhưng điều này sẽ không phải lúc nào cũng như vậy. Nếu bạn không nhận được một kế hoạch tỷ lệ kèo bóng đá ngay cả với các giá trị rất nhỏ của các cài đặt này (ví dụ: sau khi đặt cả hai thành 0), có thể có một số lý do tại sao trình lập kế hoạch truy vấn không thể tạo ra một kế hoạch tỷ lệ kèo bóng đá cho truy vấn của bạn. Nhìn thấyPhần 15.2vàPhần 15.4Để biết thông tin về lý do tại sao điều này có thể là trường hợp.
Khi thực hiện một kế hoạch tỷ lệ kèo bóng đá, bạn có thể sử dụngGiải thích (Phân tích, Verbose)
Để hiển thị số liệu thống kê trên mỗi người lao động cho mỗi nút tỷ lệ kèo bóng đá. Điều này có thể hữu ích trong việc xác định liệu công việc có được phân phối đồng đều giữa tất cả các nút tỷ lệ kèo bóng đá hay không và nói chung trong việc tìm hiểu các đặc điểm hiệu suất của tỷ lệ kèo bóng đá.