อาการ
สมมติว่าคุณใช้โปรแกรมควบคุม sqlncli11.dll ODBC เพื่อเข้าถึง Microsoft SQL Server 2012 หรือ SQL Server 2014 ในแอปพลิเคชัน เมื่อคุณใช้เคอร์เซอร์เซิร์ฟเวอร์และฟังก์ชัน SQLFetch/ SQLGetData เพื่อเข้าถึงข้อมูลวัตถุขนาดใหญ่แบบไบนารี (BLOB) ใน SQL Server ปัญหาด้านประสิทธิภาพการทํางานจะเกิดขึ้นโดยเฉพาะกับชนิดข้อมูลขนาดใหญ่ เช่น varbinary (max) หรือ varchar (max)
สาเหตุ
นี่คือปัญหาการออกแบบสําหรับการปรับใช้ฟังก์ชัน SQL Server 2012 ODBC เมื่อคิวรีใช้เคอร์เซอร์เซิร์ฟเวอร์ โปรแกรมควบคุม ODBC จะเรียกใช้ sp_cursorfetch ระหว่างการใช้งาน SQLFetch และเซิร์ฟเวอร์จะส่ง BLOB ทั้งหมดไปยังไคลเอ็นต์ จากนั้น เมื่อดําเนินการ SQLGetData sp_cursor จะนํา BLOB ทั้งหมดกลับมาอีกครั้ง ซึ่งจะส่งผลอย่างมากต่อประสิทธิภาพของชนิดข้อมูลขนาดใหญ่ เช่น varbinary (max) หรือ varchar (max)
การแก้ปัญหา
ข้อมูลการอัปเดตสะสม
การใช้งานใหม่จะเรียกใช้ sp_cursoroption เพื่อรับ TEXTPTR_ONLY ก่อน sp_cursorfetch และเรียกใช้ sp_cursoroption เพื่อนํากลับไปยัง TEXTDATA ก่อน sp_cursor ซึ่งสามารถปรับปรุงประสิทธิภาพการทํางานได้
ปัญหานี้ได้รับการแก้ไขครั้งแรกในการอัปเดตแบบสะสมของ SQL Server ต่อไปนี้
- การอัปเดตสะสม 1 สําหรับ SQL Server 2014 SP1
- การอัปเดตสะสม 7 สําหรับ SQL Server 2014
- การอัปเดตสะสม 5 สําหรับ SQL Server 2012 SP2
ข้อแนะนํา: ติดตั้งการอัปเดตสะสมล่าสุดสําหรับ SQL Server
การอัปเดตแบบสะสมใหม่แต่ละรายการสําหรับ SQL Server จะมีโปรแกรมแก้ไขด่วนและการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตแบบสะสมครั้งก่อนหน้า เราขอแนะนําให้คุณดาวน์โหลดและติดตั้งการอัปเดตแบบสะสมล่าสุดสําหรับ SQL Server:
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2014 SP1
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2014
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2012 SP2
สถานะ
Microsoft ได้ยืนยันว่านี่เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ที่แสดงไว้ในส่วน "นำไปใช้กับ"