KB3041859 - แก้ไข: ปัญหาด้านประสิทธิภาพเกิดขึ้นเมื่อคุณใช้โปรแกรมควบคุม ODBC sqlncli11.dll การเข้าถึง SQL Server ในแอปพลิเคชัน

นำไปใช้กับ
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

อาการ

สมมติว่าคุณใช้โปรแกรมควบคุม 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 ต่อไปนี้

ข้อแนะนํา: ติดตั้งการอัปเดตสะสมล่าสุดสําหรับ SQL Server

การอัปเดตแบบสะสมใหม่แต่ละรายการสําหรับ SQL Server จะมีโปรแกรมแก้ไขด่วนและการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตแบบสะสมครั้งก่อนหน้า เราขอแนะนําให้คุณดาวน์โหลดและติดตั้งการอัปเดตแบบสะสมล่าสุดสําหรับ SQL Server:

      

สถานะ

Microsoft ได้ยืนยันว่านี่เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ที่แสดงไว้ในส่วน "นำไปใช้กับ"