Theo mặc định, gói dịch vụ 1 cho SQL Server 2014 và gói dịch vụ 3 cho SQL Server 2012 bao gồm khắc phục sự cố này và bạn không có thêm bất kỳ cờ theo dõi để kích hoạt bản vá. Để cho phép khắc phục sự cố sau khi bạn cài đặt một bản Cập Nhật tích luỹ trong phần giải pháp, bạn phải khởi động Microsoft SQL Server bằng cách thêm cờ theo dõi 1236 tham số khởi động.
Triệu chứng
Giả sử rằng bạn chạy phiên bản của Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 hay SQL Server 2008 R2 trên một máy tính có nhiều bộ xử lý. Khi số khóa (nguyên loại = cơ sở dữ liệu) cho cơ sở dữ liệu cụ thể vượt quá ngưỡng nhất định, bạn gặp phải sự cố hoạt động sau:
-
Nâng cao giá trị xảy ra do LOCK_HASH spinlock tính.
Lưu ý Hãy xem phần "Thông tin thêm" để biết thông tin về cách theo dõi spinlock này. -
Truy vấn hoặc hoạt động yêu cầu cơ sở dữ liệu khóa mất nhiều thời gian để hoàn tất. Ví dụ: bạn có thể thấy sự chậm trễ hoạt động sau:
-
Thông tin đăng nhập máy chủ SQL
-
Truy vấn máy chủ được liên kết
-
sp_reset_connection
-
Giao dịch
-
Lưu ý Để xác định danh sách các khóa (nguyên loại = cơ sở dữ liệu) trên cơ sở dữ liệu nhất định, hãy xem phần "Thông tin". Giá trị ngưỡng thay đổi theo môi trường.
Giải pháp
Thông tin Cập Nhật tích luỹ
Trước tiên, sự cố được khắc phục trong bản cập nhật tích lũy sau của SQL Server.
Cập Nhật tích luỹ 13 cho SQL Server 2008 R2 SP2/en-us/help/2967540
Cập Nhật tích luỹ 17 cho SQL Server 2008 SP3/en-us/help/2958696
Cập Nhật tích luỹ 1 dành cho SQL Server 2014/en-us/help/2931693
Cập Nhật tích luỹ 9 dành cho SQL Server 2012 SP1/en-us/help/2931078
Mỗi bản cập nhật tích lũy mới cho SQL Server 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 đi kèm với 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:
Thông tin về cập nhật nóng
Cập nhật nóng được hỗ trợ do Microsoft cung cấp. Tuy nhiên, cập nhật nóng này chỉ được dùng để khắc phục sự cố được mô tả trong bài viết này. Chỉ áp dụng cập nhật nóng này cho hệ thống đang gặp sự cố cụ thể này.
Nếu cập nhật nóng này sẵn có để tải xuống, có phần "Tải xuống Hotfix sẵn có" ở đầu bài viết Cơ sở Kiến thức này. Nếu phần này không xuất hiện, hãy gửi một yêu cầu tới bộ phận Hỗ trợ và Dịch vụ Khách hàng của Microsoft để nhận hotfix.
Lưu ý Nếu các sự cố xảy ra hoặc nếu bất cứ xử lý sự cố là cần thiết, bạn có thể phải tạo một yêu cầu dịch vụ riêng. Chi phí hỗ trợ thông thường sẽ áp dụng cho các câu hỏi hỗ trợ bổ sung và các vấn đề không phù hợp với hotfix cụ thể này. Để có danh sách đầy đủ số điện thoại hỗ trợ và dịch vụ khách hàng của Microsoft hoặc để tạo yêu cầu dịch vụ riêng, hãy ghé thăm website sau của Microsoft:
http://support.microsoft.com/contactus/?ws=supportLưu ý "Tải xuống Hotfix sẵn có" Hiển thị các ngôn ngữ mà hotfix này sẵn có. Nếu bạn không thấy ngôn ngữ của mình thì đó là do cập nhật nóng này hiện không có ngôn ngữ đó.
Trạng thái
Microsoft đã xác nhận rằng đây là sự cố trong sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".
Thông tin
Khi một ứng dụng kết nối với SQL Server, nó lần đầu tiên cung cấp một bối cảnh cơ sở dữ liệu. Theo mặc định, kết nối sẽ cố gắng lấy một khóa cơ sở dữ liệu ở chế độ SH. Khóa SH cơ sở dữ liệu sẽ được phát hành khi kết nối bị dừng hoặc bối cảnh cơ sở dữ liệu được thay đổi thời kết nối. Nếu bạn có nhiều kết nối hoạt động sử dụng bối cảnh cơ sở dữ liệu tương tự, bạn có thể khoá nhiều loại cơ sở dữ liệu nguồn cơ sở dữ liệu cụ thể đó.
Trên máy tính có 16 hoặc nhiều CPU, chỉ mục các đối tượng sử dụng chương trình phân hoạch khoá. Tuy nhiên, cơ sở dữ liệu khóa không phân vùng. Do đó, khoá số cơ sở dữ liệu lớn hơn, còn có cho SQL Server để nhận một khóa cơ sở dữ liệu. Hầu hết các ứng dụng không gặp bất kỳ vấn đề do thiết kế. Tuy nhiên, khi số vượt quá ngưỡng nhất định, việc bổ sung và thời gian phải có khóa. Mặc dù chi phí chỉ vi giây cho mỗi khoá bổ sung, tổng thời gian có thể nhanh chóng tăng do khoá băm nhóm được bảo vệ bằng cách sử dụng một spinlock. Này gây ra các CPU chu kỳ và chờ đợi cho các chương trình bổ sung để có được khóa.
Hotfix này giới thiệu cơ sở dữ liệu khóa phân khi cờ theo dõi T1236 được kích hoạt khi khởi động. Phân vùng khóa cơ sở dữ liệu của danh khóa giúp quản lý trong mỗi phân vùng địa phương. Điều này đáng kể tối ưu hóa đường truy cập được sử dụng để lấy khóa cơ sở dữ liệu .
Giám sát LOCK_HASH spinlock, bạn có thể sử dụng truy vấn sau đây.SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,
[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)
DECLARE @counter int = 1
WHILE @counter < 100
BEGIN
INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'
WAITFOR DELAY '00:00:05'
SET @counter +=1
END
SELECT * FROM #spinlock_stats ORDER BY [CaptureTime]
DROP TABLE #spinlock_stats
Để biết thêm thông tin về chẩn đoán và giải quyết spinlock tranh trên SQL Server, hãy truy cập tài liệu sau:
Chẩn đoán và giải quyết tranh Spinlock trên máy chủ SQLLưu ý Mặc dù tài liệu này được viết cho SQL Server 2008 R2, thông tin sẽ vẫn áp dụng cho SQL Server 2012.
Tham khảo
Để biết thêm thông tin về cờ theo dõi SQL Server 2012, hãy truy cập vào trang web TechNet sau đây:
Thông tin về cờ theo dõi SQL Server 2012
Để biết thêm thông tin về cách tìm số khóa cơ sở dữ liệu người sử dụng một cơ sở dữ liệu, sử dụng truy vấn sau đây để tính toán giá trị này:select Resource_database_id, resource_type, request_mode, request_status, count (*) 'LockCount' from sys.dm_tran_locks
group by Resource_database_id, resource_type, request_mode, request_status