JDBC-соединение с очень загруженным SQL 2000: selectMethod = cursor vs selectMethod = direct?

В процессе попытки помочь группе разработчиков приложений решить проблемы с производительностью на сервере SQL 2000 (из группы приложений Java на отдельных серверах приложений), Я выполнил трассировку SQL и обнаружил, что все вызовы базы данных заполнены операторами курсора сервера API (sp_cursorprepexec, sp_cursorfetch, sp_cursorclose).

Похоже, они определяют некоторые свойства строки подключения, которые заставляют использовать курсоры на стороне сервера, извлекая только 128 строк данных за раз: (Из http://msdn.microsoft.com/en- us / library / Aa172588 )

Когда атрибуты курсора API или свойства установлены на любое другое чем по умолчанию, OLE DB поставщик для SQL Server и SQL Серверный драйвер ODBC использует сервер API курсоры вместо результата по умолчанию наборы. Каждый вызов функции API который выбирает строки, генерирует туда и обратно на сервер, чтобы получить строк из курсора сервера API.

UPDATE : рассматриваемая строка подключения - это параметр строки подключения JDBC, selectMethod = cursor (который включает курсоры на стороне сервера, которые мы обсуждали выше), а не альтернатива selectMethod = direct . Они использовали selectMethod = cursor в качестве стандартной строки подключения для всех приложений.

С моей точки зрения администратора баз данных это просто раздражает (он загромождает трассировку бесполезным мусором) и (я бы предположил) приводит к множеству дополнительных циклов обмена данными между приложением и SQL-сервером, что снижает общую производительность.

Очевидно, они провели тестовое изменение (только одно из примерно 60 различных подключений приложений) на selectMethod = direct , но возникли некоторые проблемы (подробностей у меня нет) и обеспокоены нарушением работы приложения.

Итак, мои вопросы:

  • Может ли использование selectMethod = cursor снизить производительность приложения, как я пытался спорить? (путем увеличения количества циклов приема-передачи, необходимого на сервере SQL, который уже имеет очень большое количество запросов в секунду)
  • Является ли selectMethod = прозрачной для приложения настройкой для соединения JDBC? Может ли это сломать их приложение, если мы его изменим?
  • В общем, когда следует использовать курсор против прямой ?

Также перекрестно размещен в SF .

РЕДАКТИРОВАТЬ : Получены актуальные технические подробности, которые требуют значительного редактирования заголовка, вопроса и тегов.

РЕДАКТИРОВАТЬ : добавлено вознаграждение. Также добавлено вознаграждение за вопрос SF (этот вопрос сосредоточен на поведении приложения, вопрос SF сосредоточен на производительности SQL). Спасибо !!

11
задан Community 13 April 2017 в 12:13
поделиться