סימפטומים
נניח שאתה משתמש במנהל התקן של ODBC של sqlncli11.dll כדי לגשת ל- Microsoft SQL Server 2012 או SQL Server 2014 ביישום. בעת שימוש בסמן השרת ובפונקציה SQLFetch/ SQLGetData כדי לגשת לנתונים בינאריים גדולים (BLOB) מסוימים ב SQL Server, מתרחשת בעיית ביצועים במיוחד עבור סוגי נתונים גדולים, כגון varbinary (max) או varchar (max).
גורם
זוהי בעיית עיצוב לצורך יישום הפונקציה SQLFetch/ SQLGetData במנהל התקן ODBC של SQL Server 2012. כאשר השאילתה משתמשת בסמני שרת, מנהל התקן 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 SQL Server מכיל את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו בעדכון המצטבר הקודם. מומלץ להוריד ולהתקין את העדכונים המצטברים האחרונים עבור SQL Server:
- העדכון המצטבר האחרון עבור SQL Server 2014 SP1
- העדכון המצטבר האחרון עבור SQL Server 2014
- העדכון המצטבר האחרון עבור SQL Server 2012 SP2
מצב
Microsoft אישרה שזוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".