Nếu một cá thể đã MAXDOP
được đặt ở mức 1 và các gợi ý truy vấn được sử dụng để cho phép các truy vấn cụ thể đi song song, thì Ngưỡng chi phí cho giá trị Song song vẫn được SQL sử dụng để quyết định có thực sự đi song song không?
Câu trả lời đơn giản: có .
Chi tiết
Có một vài điều riêng biệt đang diễn ra ở đây, điều quan trọng là phải tách ra:
Là gì hiệu quả mức độ tối đa song song có sẵn để truy vấn?
Những người đóng góp cho điều này là (theo thứ tự quan trọng):
MAX_DOP
Cài đặt thống đốc tài nguyên
MAXDOP
Thiết lập gợi ý truy vấn
- Các
max degree of parallelism
tùy chọn cấu hình ví dụ
Các chi tiết được giải thích trong cài đặt Mức độ song song tối đa của Server Server, MAX_DOP của Resource Governor và gợi ý truy vấn MAXDOP mật mà SQL Server nên sử dụng? bởi Jack Li, Kỹ sư nâng cao cho Dịch vụ và Hỗ trợ Khách hàng của Microsoft SQL Server. Bảng dưới đây được sao chép từ liên kết đó:
Một kế hoạch truy vấn sẽ sử dụng song song?
Trình tối ưu hóa truy vấn SQL Server luôn tìm thấy một kế hoạch nối tiếp trước tiên *.
Sau đó nếu:
- Tối ưu hóa hơn nữa là hợp lý; và
- Chi phí của gói nối tiếp tốt nhất vượt quá
cost threshold for parallelism
giá trị cấu hình
... Trình tối ưu hóa sẽ cố gắng tìm một kế hoạch song song.
Sau đó nếu:
- Một kế hoạch song song được tìm thấy (tức là có thể); và
- Chi phí của kế hoạch song song ít hơn kế hoạch nối tiếp tốt nhất
... Một kế hoạch song song sẽ được sản xuất.
Lưu ý: các cost threshold for parallelism
chỉ ảnh hưởng đến việc hình tối ưu cho một kế hoạch song song. Khi một kế hoạch song song được lưu trữ, nó sẽ thực thi bằng cách sử dụng song song khi nó được sử dụng lại (miễn là có sẵn các luồng) bất kể cài đặt CTFP.
Ví dụ
Đối với cả hai ví dụ, với ví dụ maxdop 1 và gợi ý truy vấn maxdop 2, DOP có hiệu lực là 2. Nếu một kế hoạch song song được chọn, nó sẽ sử dụng DOP 2.
ví dụ 1
Với CTFP là 50 và gói có giá trị nối tiếp rẻ nhất là 30, SQL Server sẽ không cố gắng tìm một gói song song. Một kế hoạch nối tiếp sẽ được sản xuất.
Ví dụ 2
Với CTFP là 50 và gói có giá trị nối tiếp rẻ nhất là 70, SQL Server sẽ cố gắng tìm một gói song song. Nếu kế hoạch này (nếu tìm thấy) có chi phí dưới 70 (chi phí kế hoạch nối tiếp) thì kế hoạch song song sẽ được tạo ra.
Kết quả cuối cùng của tối ưu hóa truy vấn luôn là một gói được lưu trong bộ nhớ cache: nối tiếp hoặc song song. Trình tối ưu hóa chỉ tìm thấy một kế hoạch nối tiếp trong các giai đoạn search0 (TP) và search1 (QP).
Sau đó, nó có thể (như được mô tả) chạy lại search1 với yêu cầu tạo ra một kế hoạch song song. Một lựa chọn sau đó được đưa ra giữa nối tiếp và song song dựa trên toàn bộ chi phí kế hoạch tốt nhất cho đến nay. Lựa chọn đó là ràng buộc trong trường hợp tối ưu hóa chuyển sang search2 (Tối ưu hóa hoàn toàn). Mỗi giai đoạn tối ưu hóa xem xét nhiều lựa chọn thay thế, nhưng đầu ra từ một giai đoạn luôn là một kế hoạch tốt nhất duy nhất, là nối tiếp hoặc song song.
Tôi đã viết về một số điều này trong Huyền thoại: Máy chủ SQL lưu trữ một kế hoạch nối tiếp với mọi kế hoạch song song