В процессе попытки помочь группе разработчиков приложений с проблемами производительности на сервере 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 и драйвер ODBC для SQL Server используют серверные курсоры API вместо наборов результатов по умолчанию. Каждый вызов функции API, выбирающей строки, генерируетобратное обращение к серверу для извлечения строк из курсора сервера API.
ОБНОВЛЕНИЕ : рассматриваемая строка соединения является параметром строки соединения JDBC, selectMethod=cursor
(который включаетсерверные курсоры, о которых мы говорили выше) против альтернативы * 1013. * Они используют selectMethod=cursor
в качестве стандартной строки подключения для всех приложений.
С моей точки зрения администратора баз данных, это просто раздражает (загромождает трассировку)с бесполезным мусором), и (я бы предположил) приводит к множеству дополнительных приложений для сервера SQL раунд trips, снижая общую производительность.
Они, по-видимому, тестировали изменение (только одно из примерно 60 различных подключений к приложениям) на selectMethod=direct
, но столкнулись с некоторыми проблемами (о которых я ничего не знаю) и обеспокоены взломом приложений,
Итак, мои вопросы:
- Может ли использование
selectMethod=cursor
более низкой производительности приложения, как я пытался спорить?(путем увеличения количества циклов, необходимых на сервере SQL, который уже имеет очень высокие запросы / сек.) - Является ли
selectMethod=
прозрачной для приложения настройкой соединения JDBC?Может ли это сломать их приложение, если мы изменим его? - В более общем смысле, когда следует использовать
cursor
против direct
?
Также перекрестно опубликовано в SF .
РЕДАКТИРОВАТЬ : Получены фактические технические данные, которые требуют значительного редактирования заголовка, вопроса и тегов.
РЕДАКТИРОВАТЬ : Добавлена награда.Также добавлено вознаграждение в вопрос SF (этот вопрос посвящен поведению приложения, вопрос SF посвящен производительности SQL). Спасибо !!