Microsoft แจกจ่ายการแก้ไขของ Microsoft SQL Server 2012 ในไฟล์ที่สามารถดาวน์โหลดได้ไฟล์เดียว เนื่องจากการแก้ไขเป็นแบบสะสม การเผยแพร่ใหม่แต่ละครั้งจะมีโปรแกรมแก้ไขด่วนทั้งหมดและการอัปเดตความปลอดภัยทั้งหมดที่รวมอยู่ในการเผยแพร่การอัปเดต SQL Server 2012 ก่อนหน้า
อาการ
พิจารณาสถานการณ์ต่อไปนี้:
-
คุณสร้างกระบวนงานที่เก็บไว้ที่ใช้พารามิเตอร์ค่าตาราง (TVP) ใน Microsoft SQL Server 2012
-
คุณใช้ SQL Profiler หรือ SQL Server เหตุการณ์ที่ขยายเวลาเพื่อจับภาพเหตุการณ์ RPC:การเริ่มต้นและ RPC:เสร็จสมบูรณ์
-
คุณเรียกใช้คิวรีที่ใช้ TVP
-
คิวรีหมดเวลา
ในสถานการณ์นี้ เกิดข้อผิดพลาดของตัวจัดกําหนดการที่ไม่มีผลตอบแทน และการสอบถามที่กําลังทํางานบนตัวจัดกําหนดการเดียวกันทํางานช้าลง นอกจากนี้ แฟ้มการถ่ายโอนข้อมูลขนาดเล็กจะถูกสร้างขึ้นในโฟลเดอร์บันทึก SQL Serverเมื่อปัญหานี้เกิดขึ้น คุณจะได้รับข้อความแสดงข้อผิดพลาดที่มีลักษณะดังต่อไปนี้:
System.Data.SqlClient.SqlException (0x80131904): หมดเวลา ช่วงเวลาการหมดเวลาผ่านไปก่อนการดําเนินการให้เสร็จสมบูรณ์ หรือเซิร์ฟเวอร์ไม่ตอบสนองที่ System.Data.SqlClient.SqlInternalConnection.OnError(ข้อยกเว้น SqlException, Boolean breakConnection)at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, ข้อผิดพลาด UInt32)ที่ System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObject)ที่ System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()ที่ System.Data.SqlClient.TdsParserStateObject.ReadByte()at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObjj)at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)ที่ System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)ที่ System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Method String, DbAsyncResult result)at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)ที่ System.Data.SqlClient.SqlCommand.ExecuteNonQuery()at TVPApp.Program.Main(String[] args)
ข้อผิดพลาดของตัวจัดกําหนดการที่ไม่เกิดผลลัพธ์พร้อมกับข้อความแสดงข้อผิดพลาดที่คล้ายกับต่อไปนี้ถูกบันทึกไว้ในบันทึกข้อผิดพลาด SQL Server:
<Date><Time> Server โดยใช้ 'dbghelp.dll' เวอร์ชัน '4.0.5'<Date><Time> Server ***ไม่สามารถรับบริบทเธรดสําหรับ spid #<Date><Time> Server * *******************************************************************************><2 *******************************************************************************><8 วันที่><เวลา> Server * เวลา><เวลา><6> Server * การถ่ายโอนข้อมูล><> วันที่><วันที่><0 * สไปเดอร์เวลา><> เวลา <> #><8 วันที่><เวลา> Server *><2 วันที่><เวลา> เซิร์ฟเวอร์ * เซิร์ฟเวอร์><6 วันที่><><6 เวลา><6 เวลา><เซิร์ฟเวอร์ *> เวลา><เวลา><*******************************************************************************<>< ลายเซ็นสแตกเวลา> เซิร์ฟเวอร์สําหรับบันทึกข้อมูล 0x000000000000002C เวลา><เวลา<><เวลา> เซิร์ฟเวอร์การถ่ายโอนข้อมูลภายนอก 0x20000001กระบวนการถ่ายโอนข้อมูลภายนอกส่งคืนไม่มีข้อผิดพลาด<วันที่><เวลา> กระบวนการเซิร์ฟเวอร์ 0:0:0 (0x1670) 0x0000000004EDE160 ของผู้ปฏิบัติงานดูเหมือนว่าจะไม่ให้ผลตอบแทนบน Scheduler 5 เวลาในการสร้างเธรด: 13014210386757 CPU เธรดที่ใช้: เคอร์เนล 0 ms, ผู้ใช้ 70106 ms การใช้งานกระบวนการ 16% System Idle 77% ช่วงเวลา: 70140 ms.<วันที่><เวลา> กระบวนการเซิร์ฟเวอร์ 0:0:0 (0x1670) 0x0000000004EDE160 ของผู้ปฏิบัติงานดูเหมือนว่าจะไม่ให้ผลตอบแทนบน Scheduler 5 เวลาการสร้างเธรด:
สาเหตุ
ปัญหานี้เกิดขึ้นเนื่องจากมีข้อผิดพลาดในกลไกจัดการฐานข้อมูล SQL Server 2012 คอลัมน์ข้อความใน TVP จะถูกนําไปใช้เป็นสตริงการแทรกหรือบัฟเฟอร์ และการเพิ่มจํานวนแถวจะเพิ่มจํานวนบัฟเฟอร์ อย่างไรก็ตามกระบวนการที่ปล่อยบัฟเฟอร์นั้นใช้เวลานาน ดังนั้นข้อผิดพลาดตัวจัดกําหนดการที่ไม่ก่อให้เกิดผลผลิตจะถูกสร้างขึ้นเมื่อการดําเนินการเผยแพร่และลดขนาดเกิดขึ้น หมายเหตุ ปัญหาที่คล้ายกันได้รับการแก้ไขแล้วในบทความฐานความรู้ของ Microsoft ต่อไปนี้ อย่างไรก็ตาม แพคเกจโปรแกรมปรับปรุงสะสมที่อธิบายไว้ในบทความไม่สําหรับปัญหาการหมดเวลาของแบบสอบถาม
2520808 การแก้ไข: ข้อผิดพลาด Non-yielding scheduler เมื่อคุณเรียกใช้คิวรีที่ใช้ TVP ใน SQL Server 2008 หรือใน SQL Server 2008 R2 ถ้ามีการใช้ SQL Profiler หรือ SQL Server เหตุการณ์ที่ขยายเวลา
การแก้ไข
ข้อมูลโปรแกรมอัปเดตสะสม
แพคเกจการอัปเดตสะสม 5 สําหรับ SQL Server 2012 Service Pack 1 (SP1)
การแก้ไขสําหรับปัญหานี้ถูกนําออกใช้ครั้งแรกในการอัปเดตสะสม 5 สําหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการรับแพคเกจโปรแกรมปรับปรุงสะสมสําหรับ SQL Server 2012 ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base:
2861107 แพคเกจการอัปเดตสะสม 5 สําหรับ SQL Server 2012Note เนื่องจากรุ่นเป็นแบบสะสม แต่ละการเผยแพร่การแก้ไขใหม่จะประกอบด้วยโปรแกรมแก้ไขด่วนและการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการเผยแพร่การแก้ไข SQL Server 2012 ก่อนหน้า เราขอแนะนําให้คุณพิจารณาใช้การแก้ไขรุ่นล่าสุดที่ประกอบด้วยโปรแกรมแก้ไขด่วนนี้ สำหรับข้อมูลเพิ่มเติม โปรดคลิกที่หมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base:
2772858 บิลด์ SQL Server 2012 ที่เผยแพร่หลังจากเปิดตัว Service Pack 1 SQL Server 2012
วิธีแก้ไขปัญหาชั่วคราว
เมื่อต้องการแก้ไขปัญหานี้ชั่วคราว ให้ใช้หนึ่งในวิธีต่อไปนี้:
-
อย่าใช้ SQL Profiler หรือ SQL Server เหตุการณ์ที่ขยายเวลา
-
คลิกเพื่อล้างกล่องกาเครื่องหมาย RPC:การเริ่มต้นและ RPC:เสร็จสมบูรณ์ในข้อกําหนดการติดตาม
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"