Нарушение производительности ODBC для SQL Server? - PullRequest
3 голосов
/ 15 февраля 2011

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 15 февраля 2011

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

CHECKPOINT
GO
DBCC DROPCLEANBUFFERS
GO
DBCC FREEPROCCACHE
GO

-- Your SQL begins here

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

0 голосов
/ 15 февраля 2011

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

...