Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Снижение производительности SQL Server ODBC?

Автор вопроса: ClinemiОтветов: 2

Это странно, но я надеюсь, что кто-нибудь сможет мне помочь.

У меня есть вызов хранимой процедуры, выполнение которого занимает около 42 секунд - при вызове из приложения, подключенного через соединение ODBC. Однако, если я запустил тот же вызов в SSMS (Sql Server Management Studio), для выполнения потребуется всего 10 или 15 секунд... как записано трассировкой.

Это не похоже на проблему с сетью. Я передаю клиенту только около 1200 записей - и в любом случае время, которое я вам дал, было получено прямо из поля продолжительности трассировки ... поэтому SQL Server требуется в 3 или 4 раза дольше для обработки одного и того же вызова - когда выполняется через вызов ODBC. Я могу воспроизводить это снова и снова. Что более интересно, это то, что чтение и запись (взятые из трассировки) немного выше для вызова ODBC, но загрузка ЦП в 3 или 4 раза больше, чем при вызове SSMS.

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

Мы используем SQL Server 2005

Есть идеи о том, что здесь происходит?

  • Возможно параметр нюхать. Проверьте оба плана выполнения на предмет различий. В SSMS, вероятно, будут отличаться некоторые set параметры, что означает, что он не будет использовать план из другого соединения, вместо этого он получит новый план, который может быть более подходящим для этого набора параметров. Martin Smith 15.02.2011

odbcsql-serverperformancestored-proceduressql-server-2005

Ответы

Ответ 1 · рейтинг 1 · Abe Miessler

Возможно, вы извлекаете данные из "подогретого" кеша в SSMS. Попробуйте запустить его с этими строками перед сохраненным вызовом процесса в SSMS и посмотрите, будет ли он работать так же быстро:

CHECKPOINT
GO
DBCC DROPCLEANBUFFERS
GO
DBCC FREEPROCCACHE
GO

-- Your SQL begins here

Как говорит @Martin, это также может быть результатом обнюхивания параметров. Вот хороший пост SO, в котором говорится об этом.

Ответ 2 · Preet Sangha

Похоже на время первого подключения. Можете ли вы воспроизвести проблему с двумя звонками и только с одним разом во втором? Возможно, также стоит синхронизировать вызов с другой библиотекой, чтобы увидеть, не отличается ли это.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы