โดยค่าเริ่มต้น 1 Service Pack สำหรับ 2014 เซิร์ฟเวอร์ SQL และ 3 Service Pack สำหรับ SQL Server 2012 รวมถึงการแก้ไขนี้ และคุณไม่จำเป็นต้องเพิ่มค่าสถานะการสืบค้นกลับใด ๆ เพื่อเปิดใช้งานการแก้ไข เมื่อต้องการเปิดใช้งานการแก้ไขหลังจากที่คุณติดตั้งโปรแกรมปรับปรุงสะสมอย่างใดอย่างหนึ่งในส่วนการแก้ไขปัญหา คุณจำเป็นต้องเริ่มการทำงานของ Microsoft SQL Server โดยการเพิ่มค่าสถานะการติดตาม 1236 พารามิเตอร์การเริ่มต้นระบบ
อาการ
สมมติว่า คุณเรียกใช้อินสแตนซ์ ของ Microsoft 2014 การเซิร์ฟเวอร์ SQL, SQL Server 2012, SQL Server 2008, SQL Server 2008 R2 บนคอมพิวเตอร์ที่ประกอบด้วยตัวประมวลผลมาก เมื่อจำนวนล็อก (ชนิดทรัพยากร =ฐานข้อมูล) สำหรับฐานข้อมูลระบุเกินกว่าขีดจำกัดบางอย่าง คุณพบปัญหาประสิทธิภาพการทำงานต่อไปนี้:
-
ค่าที่ผ่านการตรวจสอบเกิดขึ้นสำหรับการตรวจนับ spinlock LOCK_HASH
หมายเหตุ ดูส่วน "ข้อมูลเพิ่มเติม" สำหรับข้อมูลเกี่ยวกับวิธีการตรวจสอบ spinlock นี้ -
แบบสอบถามหรือการดำเนินการที่จำเป็นต้องล็อกฐานข้อมูลใช้เวลานานจะเสร็จสมบูรณ์ ตัวอย่างเช่น คุณอาจพบความล่าช้าของประสิทธิภาพการทำงานต่อไปนี้:
-
ล็อกอินของ SQL Server
-
แบบสอบถามเซิร์ฟเวอร์ที่ถูกเชื่อมโยง
-
sp_reset_connection
-
ธุรกรรม
-
หมายเหตุ เมื่อต้องการค้นหารายการของล็อค (ชนิดทรัพยากร =ฐานข้อมูล) บนฐานข้อมูลที่กำหนดให้ ให้ดูส่วน "ข้อมูลเพิ่มเติม" ค่าขีดจำกัดแตกต่างกันไปตามสภาพแวดล้อม
การแก้ปัญหา
ข้อมูลการปรับปรุงสะสม
ปัญหานี้ถูกถาวรแรกในการปรับปรุงสะสมต่อไปนี้ของ SQL Server
ปรับปรุงสะสม 13 สำหรับ SQL Server 2008 R2 SP2/en-us/help/2967540
ปรับปรุงสะสม 17 สำหรับ SQL Server 2008 SP3/en-us/help/2958696
ปรับปรุงสะสม 1 สำหรับ SQL Server 2014/en-us/help/2931693
ปรับปรุงสะสม 9 สำหรับ SQL Server 2012 SP1/en-us/help/2931078
แต่ละโปรแกรมปรับปรุงสะสมใหม่สำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และทั้งหมดที่แก้ไขความปลอดภัยที่ถูกรวมอยู่ในการปรับปรุงที่สะสมก่อนหน้านี้ ตรวจหาการปรับปรุงสะสมล่าสุดสำหรับ SQL Server:
ข้อมูลโปรแกรมแก้ไขด่วน
มีโปรแกรมแก้ไขด่วนที่รองรับพร้อมให้บริการจาก Microsoft อย่างไรก็ตาม โปรแกรมแก้ไขด่วนนี้มุ่งหวังเพื่อการแก้ไขเฉพาะปัญหาที่อธิบายไว้ในบทความนี้ ใช้ hotfix นี้เฉพาะกับระบบต่าง ๆ ที่พบปัญหานี้
หากโปรแกรมแก้ไขด่วนพร้อมสำหรับการดาวน์โหลด คุณจะเห็นส่วน "มีการดาวน์โหลดโปรแกรมแก้ไขด่วน" ที่ด้านบนของบทความฐานข้อมูลองค์ความรู้นี้ หากส่วนนี้ไม่ปรากฏขึ้น ส่งคำขอถึงฝ่ายบริการและการสนับสนุนลูกค้าของ Microsoft และวิธีการขอรับโปรแกรมแก้ไขด่วน
หมายเหตุ หากเกิดปัญหาเพิ่มเติม หรือแก้ไขปัญหาใด ๆ ที่จำเป็น คุณอาจจำเป็นต้องสร้างการร้องขอบริการแยกต่างหาก ระบุต้นทุนในการสนับสนุนปกติจะใช้กับคำถามเพิ่มเติมและปัญหาที่ไม่มีสิทธิได้รับโปรแกรมแก้ไขด่วนนี้เฉพาะ สำหรับรายชื่อทั้งหมด ของหมายเลขโทรศัพท์ของฝ่ายบริการลูกค้าของ Microsoft และการสนับสนุน หรือ เพื่อสร้างการร้องขอบริการแยกต่างหาก แวะไปที่เว็บไซต์ของ Microsoft ต่อไปนี้:
http://support.microsoft.com/contactus/?ws=supportหมายเหตุ แบบฟอร์ม "โปรแกรมแก้ไขด่วนดาวน์โหลดพร้อมใช้งาน" แสดงภาษาโปรแกรมแก้ไขด่วนจะพร้อมใช้งาน ถ้าคุณไม่เห็นภาษาของคุณ อาจเป็น เพราะไม่มีโปรแกรมแก้ไขด่วนพร้อมใช้งานสำหรับภาษานั้น
สถานะ
Microsoft ยืนยันว่านี่เป็นปัญหาในผลิตภัณฑ์ของ Microsoft ซึ่งแสดงไว้ในส่วน "นำไปใช้กับ"
ข้อมูลเพิ่มเติม
เมื่อแอพลิเคชันทำให้การเชื่อมต่อกับ SQL Server นั้นก่อนสร้างบริบทที่ฐานข้อมูล โดยค่าเริ่มต้น การเชื่อมต่อจะพยายามรับการล็อกฐานข้อมูลในโหมด SH ล็อกฐานข้อมูล-SHจะออกเมื่อมีการหยุดดำเนินการเชื่อมต่อ หรือมีการเปลี่ยนแปลงฐานข้อมูลบริบทในระหว่างอายุการใช้งานของการเชื่อมต่อ ถ้าคุณมีการเชื่อมต่อที่ใช้งานอยู่มากที่ใช้ฐานข้อมูลเนื้อหาเดียวกัน คุณสามารถให้ล็อกหลายชนิดทรัพยากรฐานข้อมูลสำหรับฐานข้อมูลที่เฉพาะเจาะจง
บนคอมพิวเตอร์ที่มี Cpu อย่าง น้อย 16 ตารางวัตถุใช้โครงร่างล็อกพาร์ติชัน อย่างไรก็ตาม การล็อกฐานข้อมูลจะไม่แบ่งพาร์ติชัน ดังนั้น ล็อกจำนวนฐานข้อมูลใหญ่มาก ยาวใช้สำหรับ SQL Server เพื่อขอรับการล็อกบนฐานข้อมูล โปรแกรมประยุกต์ส่วนใหญ่ไม่พบปัญหาใด ๆ ที่เกิดจากการออกแบบนี้ แต่เป็นจำนวนเกินกว่าขีดจำกัดบางอย่าง การทำงานเพิ่มเติมและเวลาที่จำเป็นเพื่อขอรับการล็อก ถึงแม้ว่าต้นทุนเป็น micro วินาทีเท่านั้นสำหรับแต่ละล็อกเพิ่มเติม เวลาทั้งหมดสามารถได้อย่างรวดเร็วเพิ่มขึ้นได้เนื่องจากกลุ่มแฮล็อกถูกป้องกัน โดยใช้ spinlock ซึ่งทำให้วงจร CPU เพิ่มเติม และรอสำหรับผู้ปฏิบัติงานเพิ่มเติมเพื่อขอรับการล็อก
โปรแกรมแก้ไขด่วนนี้ทำให้เกิดฐานข้อมูลล็อกพาร์ทิชันเมื่อเปิดใช้งานการติดตามค่าสถานะ T1236 เมื่อเริ่มต้น พาร์ทิชันล็อกฐานข้อมูลเก็บความลึกของรายการล็อกง่ายในแต่ละพาร์ติชันเฉพาะ ซึ่งกำหนดการเข้าถึงเส้นทางที่ใช้เพื่อขอรับการล็อกฐานข้อมูลอย่างมาก
การตรวจสอบ spinlock LOCK_HASHคุณสามารถใช้แบบสอบถามต่อไปนี้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
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการวินิจฉัย และแก้ไขข้อขัดแย้งใน spinlock บน SQL Server ไปที่เอกสารต่อไปนี้:
วินิจฉัยและแก้ปัญหาการช่วงชิงงานบน Spinlock บน SQL Serverหมายเหตุ ถึงแม้ว่าเอกสารนี้ถูกเขียนขึ้นสำหรับ SQL Server 2008 R2 ข้อมูลจะยังคงสามารถใช้ได้กับ SQL Server 2012
ข้อมูลอ้างอิง
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสถานะการสืบค้นกลับใน SQL Server 2012 ไปที่เว็บไซต์ TechNet ดังต่อไปนี้:
ข้อมูลเกี่ยวกับสถานะการสืบค้นกลับใน SQL Server 2012
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการค้นหาหมายเลขของล็อกฐานข้อมูลผู้ใช้สำหรับแต่ละฐานข้อมูล ใช้แบบสอบถามต่อไปนี้ในการคำนวณค่านี้: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