อาการ
สมมติว่าคุณใช้โปรแกรมควบคุม sqlncli11 ODBC ในการเข้าถึง Microsoft SQL Server ๒๐๑๒หรือ SQL Server ๒๐๑๔ในแอปพลิเคชัน เมื่อคุณใช้เคอร์เซอร์ของเซิร์ฟเวอร์และฟังก์ชัน SQLFetch/ SQLGetData เพื่อเข้าถึงข้อมูลบางอย่างของวัตถุที่มีขนาดใหญ่ไบนารี (BLOB) ใน SQL server ปัญหาประสิทธิภาพการทำงานจะเกิดขึ้นโดยเฉพาะอย่างยิ่งสำหรับชนิดข้อมูลขนาดใหญ่เช่น varbinary (max) หรือ varchar (max)
สาเหตุ
นี่คือปัญหาการออกแบบสำหรับการใช้ฟังก์ชัน SQLFetch/ SQLGetData ในโปรแกรมควบคุม ODBC ของ SQL Server ๒๐๑๒ เมื่อคิวรีใช้เคอร์เซอร์เซิร์ฟเวอร์ใดๆโปรแกรมควบคุม ODBC เรียก sp_cursorfetch ระหว่างการดำเนินการ SQLFetch และเซิร์ฟเวอร์จะส่ง BLOB ทั้งหมดไปยังไคลเอ็นต์ จากนั้นเมื่อมีการดำเนินการ SQLGetDataSP_CURSOR จะนำ BLOB ทั้งหมดอีกครั้ง การทำเช่นนี้จะส่งผลต่อประสิทธิภาพการทำงานสำหรับชนิดข้อมูลขนาดใหญ่เช่น varbinary (max) หรือ varchar (max)
การแก้ไข
ข้อมูลการอัปเดตที่สะสม
Sp_cursoroptionการดำเนินการใหม่เรียกเพื่อขอรับ TEXTPTR_ONLY ก่อนที่sp_cursorfetchแล้วเรียกsp_cursoroptionเพื่อนำกลับไปยัง TEXTDATA ก่อนsp_cursor การทำเช่นนี้สามารถปรับปรุงประสิทธิภาพการทำงานได้ ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตที่สะสมของ SQL Server ครั้งแรก
การอัปเดตที่สะสมใหม่แต่ละรายการสำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตที่สะสมก่อนหน้านี้ เราขอแนะนำให้คุณดาวน์โหลดและติดตั้งการอัปเดตที่สะสมล่าสุดสำหรับ SQL Server:
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"