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 Microsoft SQL Server 2012 Update Release.
Triệu chứng
Hãy xem xét tình huống sau:
-
Bạn cài đặt một phiên bản của Microsoft SQL Server 2008 R2 hoặc Microsoft SQL Server 2012 trên một máy tính.
-
Câu lệnh đồng thời giống như sau đây được thực thi trong ví dụ:
CREATE PROC p AS RETURN (
query
); EXEC p;
Hoặc, bạn chạy một truy vấn có chứa mã sau đây:
IF EXISTS(
subquery
);
-
Mức sử dụng CPU luôn cao, và chủ đề công việc nằm trong trạng thái Runnable.
-
Ganh đua đối với QUERY_EXEC_STATS spinlock cao. Ví dụ, số đếm spin, sự va chạm có thể có và các giá trị lùi cho việc tăng QUERY_EXEC_STATS spinlock nhanh chóng.Lưu ý Để biết thêm thông tin về cách theo dõi QUERY_EXEC_STATS spinlock, hãy xem phần "thông tin thêm".
Trong trường hợp này, hiệu suất chậm có thể xảy ra.
Nguyên nhân
Sự cố này vì xảy ra SQL Server 2008 R2 hoặc SQL Server 2012 tạo và hủy một số cấu trúc bộ nhớ về các số liệu thống kê toàn cục thay vì đệm ẩn chúng. Thao diễn này gây ra nút cổ chai hiệu suất.
Giải pháp
Thông tin Cập Nhật tích lũy
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 1 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:
2679368 Gói Cập Nhật tích lũy 1 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.
Gói Cập Nhật tích lũy 5 cho SQL Server 2008 R2 SP1
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 5. Để 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 SP1, 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:
2659694 Gói Cập Nhật tích lũy 5 cho SQL Server 2008 R2 SP1Lư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 sự 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 SP1 đã được phát hành
Thông tin Bổ sung
Để giám sát QUERY_EXEC_STATS spinlock, hãy điều chỉnh độ trễ và số lượng lặp phù hợp với môi trường của bạn trong mã sau đây, sau đó chạy nó:
SET NOCOUNT ONCREATE TABLE #spins([Spinlock Name] varchar(50),Collisions numeric,Spins numeric,[Spins/Collision] float,[Sleep Time (ms)] numeric,Backoffs numeric, InsertTime datetime DEFAULT GETDATE())DECLARE @counter int = 1WHILE @counter < 10 BEGIN INSERT INTO #spins ([Spinlock Name], Collisions, Spins, [Spins/Collision], [Sleep Time (ms)], Backoffs) EXECUTE ('DBCC SQLPERF (''SPINLOCKSTATS'') WITH NO_INFOMSGS') WAITFOR DELAY '00:00:05' SET @counter +=1 ENDSELECT * FROM #spins WHERE [Spinlock Name] = 'QUERY_EXEC_STATS' ORDER BY InsertTimeDROP TABLE #spins
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".