KB2952444 - KHẮC PHỤC: Hiệu năng kém khi bạn sử dụng các biến bảng trong SQL Server 2012 hoặc SQL Server 2014

Áp dụng cho
SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Web SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Triệu chứng

Khi bạn điền nhiều hàng vào biến bảng với nhiều hàng, rồi liên kết biến đó với các bảng khác, trình tối ưu hóa truy vấn có thể chọn kế hoạch truy vấn không hiệu quả, điều này có thể dẫn đến hiệu năng truy vấn chậm.

Giải pháp

Sau khi áp dụng hotfix này, bạn có thể bật cờ theo dõi 2453 để cho phép biến bảng kích hoạt tính năng biên dịch lại khi thay đổi đủ số hàng. Điều này có thể cho phép trình tối ưu hóa truy vấn chọn một kế hoạch hiệu quả hơn.

Sự cố này đã được khắc phục lần đầu trong bản cập nhật tích lũy hoặc/và các Gói Dịch vụ dành cho SQL Server sau đây.

Cập nhật Tích lũy 3 cho SQL Server 2014 /en-us/help/2984923

Giới thiệu về các bản cập nhật tích lũy cho SQL Server

Mỗi bản cập nhật tích lũy mới dành cho SQL Server chứa tất cả các bản sửa lỗi nóng và bản sửa lỗi bảo mật được tích hợp trong bản cập nhật tích lũy trước đó. Xem các bản cập nhật tích lũy mới nhất cho SQL Server:

      

Gói dịch vụ 2 dành cho SQL Server 2012

Giới thiệu về Gói dịch vụ dành cho SQL Server

Các gói dịch vụ có tính tích lũy. Mỗi gói dịch vụ mới chứa tất cả bản vá trong các gói dịch vụ trước đó cùng với mọi bản vá mới. Đề xuất của chúng tôi là áp dụng gói dịch vụ mới nhất và cập nhật tích lũy mới nhất cho gói dịch vụ đó. Bạn không phải cài đặt gói dịch vụ trước đó trước khi cài đặt gói dịch vụ mới nhất. Hãy sử dụng Bảng 1 trong bài viết sau đây để tìm thêm thông tin về gói dịch vụ mới nhất và bản cập nhật tích lũy mới nhất:

Cách xác định phiên bản, phiên bản và mức cập nhật của SQL Server và các cấu phần của nó
      

Xem thêm thông tin

Khi bạn sử dụng biến bảng trong một lô hoặc thủ tục, truy vấn được biên dịch và tối ưu hóa cho trạng thái trống ban đầu của biến bảng. Nếu biến bảng này được điền nhiều hàng vào trong thời gian chạy, kế hoạch truy vấn được biên dịch sẵn có thể không còn tối ưu nữa. Ví dụ: truy vấn có thể kết hợp biến bảng với vòng lặp lồng nhau vì truy vấn thường hiệu quả hơn đối với số lượng hàng nhỏ. Kế hoạch truy vấn này có thể không hiệu quả nếu biến bảng có hàng triệu hàng. Nối hàm băm có thể là lựa chọn tốt hơn trong điều kiện này. Để có kế hoạch truy vấn mới, cần biên dịch lại kế hoạch truy vấn. Tuy nhiên, không giống như các bảng người dùng hoặc bảng tạm thời khác, thay đổi số hàng trong biến bảng sẽ không kích hoạt hoạt động biên dịch lại truy vấn. Thông thường, bạn có thể giải quyết vấn đề này với OPTION (BIÊN DỊCH LẠI), tùy chọn này có chi phí chung riêng.
Cờ theo dõi 2453 cho phép lợi ích của việc biên dịch lại truy vấn mà không cần OPTION (RECOMPILE). Cờ theo dõi này khác với OPTION (RECOMPILE) ở hai khía cạnh chính.
(1) Nó sử dụng ngưỡng số lượng hàng giống như các bảng khác. Truy vấn không cần phải được biên dịch cho mọi lần thực hiện, không giống như OPTION (RECOMPILE). Nó sẽ chỉ kích hoạt tính năng tái biên dịch khi thay đổi số hàng vượt quá ngưỡng đã xác định trước.
(2) OPTION (RECOMPILE) buộc truy vấn phải tóm tắt các tham số và tối ưu hóa truy vấn cho chúng. Cờ theo dõi này không bắt buộc nhìn trộm tham số.

Lưu ý rằng cờ theo dõi này phải được BẬT khi chạy. Bạn không thể sử dụng cờ theo dõi này với QUERYTRACEON. Cờ theo dõi này phải được sử dụng một cách thận trọng vì nó có thể làm tăng số lượng lần biên dịch lại truy vấn, mà có thể tốn nhiều chi phí hơn là khoản tiết kiệm từ việc tối ưu hóa truy vấn tốt hơn.

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "áp dụng cho".