Triệu chứng
Giả định rằng bạn đã áp dụng Microsoft SQL Server 2012 gói dịch vụ 2 (SP2) trên máy tính của bạn. Bạn gọi cdc.fn_cdc_get_net_changes_<capture_instance> thay đổi truy vấn chụp dữ liệu (CDC) trong quy trình được lưu trữ sp_executesql và có thể đến từ một nguồn ứng dụng như SQL Server Management Studio Server (SSMS), CDC chính, hoặc các gói dịch vụ tích hợp SQL Server (SSIS). Trong tình huống này, bạn gặp phải hiệu suất kém trong SQL Server 2012.Lưu ý Hiệu suất giảm có thể lớn. Ví dụ, một truy vấn có thể kết thúc trong một vài giây trong SQL Server 2012 SP1. Tuy nhiên, cùng một truy vấn có thể mất vài giờ để chạy trong SQL Server 2012 SP2. Ngoài ra, Cập Nhật thống kê sẽ không trợ giúp về vấn đề này.
Nguyên nhân
Sự cố này xảy ra do sự cố trong dự toán cardinality ảnh hưởng đến hiệu suất của cdc.fn_cdc_get_net_changes_<capture_instance truy vấn>.
Giải pháp
Vấn đề lần đầu tiên được khắc phục trong bản Cập Nhật tích lũy SQL Server sau đây.
Bản Cập Nhật tích lũy 3 cho SQL Server 2012 SP2 /en-us/help/3002049
Mỗi bản Cập Nhật tích lũy mới cho SQL Server 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 Cập Nhật tích lũy trước đó. Kiểm tra các bản Cập Nhật tích lũy mới nhất cho SQL Server:
Cách giải quyết
Để giải quyết vấn đề này, hãy sử dụng gợi ý truy vấn tùy chọn (biên dịch lại) trong truy vấn của bạn. Trong trường hợp truy vấn được kích hoạt từ SSIS CDC Components, tùy chọn (biên dịch lại) gợi ý có thể bị bắt buộc bằng cách tạo một hướng dẫn lập kế hoạch như trong ví dụ sau đây:Exec sp_create_plan_guide @name = N'CDC_Query1_PlanGuide', @stmt = N'select [__$start_lsn],[__$operation],[__$update_mask],[Column1],[Column2],[Column3] from [cdc].[fn_cdc_get_net_changes_dbo_Table1](CONVERT(binary(10), @cs, 1), CONVERT(binary(10), @ce, 1), @mode)',@type = N'SQL',@module_or_batch = NULL, @params = N'@ce nvarchar(22),@mode nvarchar(14),@cs nvarchar(22)', @hints = N'OPTION (RECOMPILE)'; Lưu ý Bạn phải thay thế truy vấn ví dụ với truy vấn mà bạn đang gặp phải vấn đề. Nó có thể được lấy từ hồ sơ theo dõi, vì vậy không thêm ký tự nào là vô tình thêm vào. Ngoài ra, hãy đảm bảo rằng truy vấn chọn được đặt trong một dòng đơn (ví dụ, nó không nên có bất kỳ nguồn cấp dịch chuyển hoặc đường kẻ nào khác) để hướng dẫn lập kế hoạch có thể hoạt động thành công. Bạn cũng có thể phải sử dụng DBCC FREEPROCCACHE để tắt kế hoạch cũ từ bộ đệm ẩn.
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".