В процессе попытки помочь группе разработчиков приложений решить проблемы с производительностью на сервере 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). Спасибо !!