KB4488809 - KHẮC PHỤC: Xác nhận xảy ra khi truy vấn song song xóa khỏi bảng Filestream trong SQL Server 2014, 2016 và 2017

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

Triệu chứng

Hãy cân nhắc các trường hợp sau:

  • Bạn có một bảng Filestream rất lớn.
  • Bạn chạy truy vấn xóa hàng trong bảng Filestream tạo ra kế hoạch truy vấn đắt tiền, chẳng hạn như truy vấn được lọc bằng kết nối bên trong vào một bảng lớn khác trong hệ thống.
  • Trình tối ưu hóa truy vấn chọn kế hoạch thực thi song song.

Trong trường hợp này, một xác nhận sẽ xảy ra, và bạn có thể nhận được thông báo lỗi tương tự như sau trong nhật ký SQL Server ghi lỗi:

DateTime spid SpidNumber Lỗi: 5553, Mức độ nghiêm trọng: 20, Nhà nước: 6.

DateTime spid SpidNumber SQL Server lỗi nội bộ. FileSTREAM manager cannot continue with current command.
      

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".

Giải pháp

Sự cố này đã được khắc phục trong các bản cập nhật tích lũy sau đây SQL Server:

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

Mỗi bản cập nhật tích lũy mới dành cho SQL Server sẽ chứa tất cả các bản cập nhật nóng và tất cả các bản sửa lỗi bảo mật được bao gồm 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 dành cho doanh SQL Server:

Giải pháp thay thế

Để khắc phục sự cố này, bạn có thể sử dụng phương pháp sau đây:

Di chuyển truy vấn nối trong vào một câu lệnh riêng biệt và lưu kết quả vào bảng tạm thời. Sau đó chạy truy vấn xóa được lọc theo mục nhập trong bảng tạm thời. Ngoài ra, bạn có thể tăng ngưỡng chi phí cho song song để buộc tối ưu hóa để serialize kế hoạch truy vấn.

Ví dụ:

CHỌN RefTable.Alias INTO #T FROM DB.dbo.OuterTable INNER JOIN DB.dbo.RefTable ON RefTable.Alias = OuterTable.Alias

WHERE OuterTable.Alias > 30006 AND OuterTable.Alias < 30010

DELETE FROM DB.dbo. [Bảng] WHERE Alias IN (SELECT * FROM #T)

Tham khảo

Tìm hiểu về thuật ngữ mà Microsoft dùng để mô tả các bản cập nhật phần mềm.