Microsoft phân phối Microsoft SQL Server 2008 R2 gói dịch vụ 1 (SP1) hoặc các bản sửa lỗi Microsoft SQL Server 2012 trong một tệp được tải xuống. Vì bản sửa lỗi được tích lũy, mỗi bản phát hành mới chứa tất cả các hotfix và tất cả các bản Cập Nhật bảo mật được bao gồm trong phiên bản SQL Server 2008 R2 gói dịch vụ trước đó 1 (SP1) hoặc SQL Server 2012 Update.
Triệu chứng
Hãy cân nhắc tình huống sau đây. Bạn chạy truy vấn trong Microsoft SQL Server 2008 R2 hoặc trong Microsoft SQL Server 2012 và trình tối ưu truy vấn tạo ra một kế hoạch thực hiện có chứa toán tử hàng đầu. Trong trường hợp này, truy vấn có thể mất nhiều thời gian để chạy. Ví dụ, bạn chạy một truy vấn giống như sau:
SELECT TableA.Col1 FROM TableA JOIN TableB ON TableA.Col1 = TableB.Col1 WHERE TableA.Col2 = N'A' AND TableB.Col3 IN (SELECT Col1 FROM TableC )Truy vấn này liên quan đến hai gia nhập. Một tham gia nằm giữa các TableB và TableC. (Điều này được ngụ ý bởi sự hiện diện của predicate.) Tham gia khác nằm giữa bảng A và kết quả của gia nhập đầu tiên. Danh tánh sẽ trả về True nếu truy vấn tìm thấy ít nhất một hàng đáp ứng các predicate tham gia đầu tiên. Do đó, trình tối ưu hóa truy vấn thêm toán tử trên cùng trong kế hoạch thực thi truy vấn. Một truy vấn như vậy chỉ có thể trả về một vài hàng. Tuy nhiên, có thể mất nhiều thời gian hơn để thực hiện truy vấn này hơn sẽ được dự kiến. Trong kế hoạch thực hiện truy vấn thực tế, số hàng ước tính khác một cách đáng kể so với số hàng thực tế. Điều này ảnh hưởng đến khả năng của trình tối ưu truy vấn để ước tính chính xác chi phí cho các lựa chọn kế hoạch khác nhau. Vấn đề này cũng có thể xảy ra nếu bạn sử dụng toán tử trên cùng một cách rõ ràng hoặc nếu bạn sử dụng một trong các toán tử sau đây:
-
TÙY CHỌN (NHANH N)
-
TRONG
-
Ṍ
Giải pháp
Thông tin Cập Nhật tích lũy
Gói dịch vụ SQL Server 2008 R2 2
Bản sửa lỗi cho sự cố này lần đầu tiên được phát hành trong Cumulative Update 1 cho SQL Server 2008 R2 Service Pack 2. Để biết thêm thông tin về cách tải gói Cập Nhật tích lũy này, hãy bấm số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
2720425 Gói Cập Nhật tích lũy 1 cho SQL Server 2008 R2 gói dịch vụ 2Lưu ý Vì bản dựng được tích lũy, mỗi bản phát hành khắc phục sự cố mới chứa tất cả các hotfix và tất cả các bản sửa lỗi bảo mật đã được đưa vào bản phát hành khắc phục SQL Server 2008 trước đó. Chúng tôi khuyên bạn nên cân nhắc việc áp dụng bản phát hành bản sửa lỗi gần đây nhất có chứa hotfix này. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:
2730301 Bản dựng SQL Server 2008 R2 đã được phát hành sau khi SQL Server 2008 R2 Service Pack 2 đã được phát hành
Gói dịch vụ SQL Server 2008 R2 1
Bản sửa lỗi cho sự cố này lần đầu tiên được phát hành trong bản Cập Nhật tích lũy 7 cho SQL Server 2008 R2 Service Pack 1. Để biết thêm thông tin về cách tải gói Cập Nhật tích lũy này, hãy bấm số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
2703282 Gói Cập Nhật tích lũy 7 cho SQL Server 2008 R2 gói dịch vụ 1Lưu ý Vì bản dựng được tích lũy, mỗi bản phát hành khắc phục sự cố mới chứa tất cả các hotfix và tất cả các bản sửa lỗi bảo mật đã được đưa vào bản phát hành khắc phục SQL Server 2008 trước đó. Chúng tôi khuyên bạn nên cân nhắc việc áp dụng bản phát hành bản sửa lỗi gần đây nhất có chứa hotfix này. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:
2567616 Bản dựng SQL Server 2008 R2 đã được phát hành sau khi SQL Server 2008 R2 Service Pack 1 đã được phát hành
SQL Server 2012
Bản sửa lỗi cho sự cố này lần đầu tiên được phát hành trong Cumulative Update 2 cho SQL Server 2012. Để biết thêm thông tin về gói Cập Nhật lũy tích này, hãy bấm số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
2703275 Gói Cập Nhật tích lũy 2 cho SQL Server 2012Lưu ý Vì bản dựng được tích lũy, mỗi bản phát hành khắc phục sự cố mới chứa tất cả các hotfix và tất cả các bản sửa lỗi bảo mật đã được đưa vào bản phát hành khắc phục SQL Server 2012 trước đó. Microsoft khuyên bạn nên cân nhắc việc áp dụng bản phát hành khắc phục gần đây nhất có chứa các hotfix này. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:
2692828 Bản dựng SQL Server 2012 đã được phát hành sau khi SQL Server 2012 đã được phát hành Bạn phải áp dụng một hotfix SQL Server 2012 vào một bản cài đặt của SQL Server 2012.
SQL Server 2008 R2
Bản sửa lỗi cho sự cố này lần đầu tiên được phát hành trong bản Cập Nhật tích lũy 13. Để biết thêm thông tin về cách tải gói Cập Nhật tích lũy cho SQL Server 2008 R2, hãy bấm số bài viết sau đây để xem bài viết trong cơ sở kiến thức Microsoft:
2679366 Gói Cập Nhật tích lũy 13 cho SQL Server 2008 R2Lưu ý Vì bản dựng được tích lũy, mỗi bản phát hành khắc phục sự cố mới chứa tất cả các hotfix và tất cả các bản sửa lỗi bảo mật đã được đưa vào bản phát hành khắc phục SQL Server 2008 trước đó. Chúng tôi khuyên bạn nên cân nhắc việc áp dụng bản phát hành bản sửa lỗi gần đây nhất có chứa hotfix này. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:
981356 Bản dựng SQL Server 2008 R2 đã được phát hành sau khi SQL Server 2008 R2 được phát hànhGhi chú Sau khi bạn cài đặt bản Cập Nhật tích lũy, bạn nên bật gắn cờ 4199 để bật sửa lỗi được cung cấp trong bản Cập Nhật tích lũy này nếu các điều kiện sau đây là đúng:
-
Gói truy vấn có một toán tử trên cùng bên trên một toán tử tham gia vòng lặp lồng nhau (nối 1) ở bên phải của một toán tử áp dụng/gia nhập khác (gia nhập 2).
-
Bên ngoài gia nhập 1 có tham chiếu bên ngoài vào bên ngoài gia nhập 2.
-
Gia nhập 1 dùng một vị ngữ bình đẳng trên một cột bên trái là duy nhất.
Ví dụ về truy vấn như vậy xuất hiện trong mục "các triệu chứng". (Điều này giả định rằng một số ràng buộc độc đáo tồn tại trong cơ sở dữ liệu.) Nếu có các truy vấn khác có chứa hàng đầu, tùy chọn (FAST N), trong hoặc các toán tử tồn tại và tạo các triệu chứng tương tự nhưng không khớp với mẫu được mô tả ở đây, hãy bật theo dõi cờ 4138.Cảnh báo Nếu bạn bật theo dõi cờ 4138, hiệu suất có thể giảm đối với một số truy vấn khác có chứa hàng đầu, tùy chọn (nhanh N), hoặc các toán tử tồn tại. Theo dõi gắn cờ 4138 nên chỉ được sử dụng khi các điều kiện sau đây là đúng:
-
Hiệu ứng của nó trên các truy vấn chậm liên quan đến các toán tử này được xác nhận.
-
Không có giải pháp thay thế hữu ích nào khác.
-
Không có regressions được phát hiện trên các truy vấn khác có chứa các toán tử tương tự.
Trạng thái
Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".
Cách giải quyết
Để giải quyết vấn đề này, hãy sử dụng toán tử nối ngoài cùng bên trái hoặc bất kỳ gợi ý nào của một số trình tối ưu hóa.