У меня возникает проблема при заполнении набора записей ADO в VB6. Запрос (поражение SQLServer 2008) занимает около 1 секунды для запуска, когда я запускаю его с помощью SSMS. Он отлично работает, когда результирующий набор невелик, но когда ему требуется несколько сотен записей, это занимает много времени. Для 800+ записей требуется около 5 минут для возврата (запрос по-прежнему занимает 1 секунду в SSMS), а 6000+ занимает более 20 минут. Я «исправил» исключение, увеличив тайм-аут команды, но мне было интересно, есть ли способ заставить его работать быстрее, поскольку он, похоже, не является фактическим запросом, для которого требуется так много времени. Что-то вроде сжатия результатов, так что это не займет столько времени. Набор записей открывается следующим образом:Устранение ошибки тайм-аута ADO в VB6
myConnection.CommandTimeout = 2000
myConnection.ConnectionString = "Provider=SQLOLEDB;" & _
"Initial Catalog=DB_NAME;" & _
"Data Source=SERVER_NAME" & _
"Network Library=DBMSSOCN;" & _
"User ID=USER_NAME;" & _
"Password=PASSWORD;" & _
"Use Encryption for Data=True;"
myConnection.Open
myRecordSet.Open STORED_PROC_QUERY_STRING, myConnection, adOpenStatic, adLockReadOnly
Set myRecordSet.ActiveConnection = Nothing
myConnection.Close
Данные возвращают 3 столбца, используемые для заполнения поля со списком.
UPDATE: Я запустил SQL Profiler, и экземпляры с клиентской машины делают больше чтений и занимают больше времени в 100 раз, чем оба показателя для запросов в SSMS. Текст запроса одинаковый для SSMS и клиентской машины в соответствии с профилировщиком, поэтому я не думаю, что он должен использовать другой план выполнения. Может ли сетевая библиотека или Провайдер повлиять на это?
статистика Profiler:
- Из клиентского приложения: 7041720 читает, длительность 59458 мс, 3900 строк подсчитывает
- От SSMS: 30802 читает, 238 мс длительность, 3900 строк подсчитывает
Похоже, что он использует другой план выполнения, но запрос точно такой же, и я не уверен, как проверить план выполнения, который клиент может использовать, если он отличается от fr om, что показано в SSMS.
Вы пытались удалить «Использовать шифрование для данных»? – Andomar 2010-12-01 19:42:27
Нет, но это не действительно доступный вариант. Это клиентское приложение. – 2010-12-01 20:12:19