В процессе попытки помочь команде разработчиков приложений с проблемами производительности на сервере SQL 2000 (из нескольких приложений Java на отдельных серверах приложений) я запускал трассировку SQL и обнаружил, что все вызовы в базу данных полный операторов API Server Cursor (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
в качестве стандартной строки соединения из всех приложений.
С точки зрения моего DBA, это просто раздражает (он загромождает трассировку с бесполезным барахлом), и (я бы спекулировал) приводит к многочисленным дополнительным окружениям от приложения к SQL, что снижает общую производительность.
Они, по-видимому, изменили тест (всего лишь около 60 различных подключений приложений) до selectMethod=direct
, но испытали некоторые проблемы (о которых у меня нет), и они обеспокоены прерыванием приложения.
Итак, мои вопросы:
- Можно ли использовать
selectMethod=cursor
более низкую производительность приложения, как я пытался утверждать? (путем увеличения количества обратных рейсов, необходимых на SQL-сервере, который уже имеет очень высокие запросы/сек) - Является ли
selectMethod=
прозрачным для приложения параметром соединения JDBC? Может ли это нарушить их приложение, если мы его изменим? - В более общем плане, когда вы должны использовать
cursor
vsdirect
?
Также перекрестная ссылка на SF.
EDIT: Получены фактические технические данные, которые требуют значительного редактирования заголовков, вопросов и тегов.
EDIT: добавлена награда. Также добавлена щедрость на вопрос SF (этот вопрос ориентирован на поведение приложения, вопрос SF сосредоточен на производительности SQL.) Спасибо!