Συμπτώματα
Ας υποθέσουμε ότι χρησιμοποιείτε ένα πρόγραμμα οδήγησης 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.
Κάθε νέα αθροιστική ενημέρωση για τον SQL Server περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις επιδιορθώσεις ασφαλείας που συμπεριλήφθηκαν στην προηγούμενη αθροιστική ενημέρωση. Συνιστούμε να κάνετε λήψη και εγκατάσταση των πιο πρόσφατων αθροιστικών ενημερώσεων για τον SQL Server:
Κατάσταση
Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα πρόβλημα στα προϊόντα της Microsoft που παρατίθενται στην ενότητα "ισχύει για".