powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Анализирую вот профайлером вызов SP - непонятки...
11 сообщений из 11, страница 1 из 1
Анализирую вот профайлером вызов SP - непонятки...
    #32022363
_svr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MSSQL2k SP2 на W2kPro SP2
процедура ищет в табличке запись по трем полям (Like):
Вход: 4 параметра - 3 критерия и максимальное количество возвращаемых записей (для RowCount)
Выход: результирующий рекордсет и общее число записей, соответствующих критерию.
Поля поиска проиндексированы.

Пускаю ее из проги на VB6 (с той же машины, где сервак). Максимально возвращается записей - всегда 50. Все работает.

В процессе отладки заметил некоторую странность: в профайлере задаю пару событий SP:Starting и SP:Completed.
Дык вот, эта парочка при одном вызове выскакивает как минимум, дважды.
Почему из проги вызываю один раз, а в профайлере регистрится 2 вызова??? Причем данные возвращает только последний вызов...
Это так и должно быть, или я что-то не так делаю?


Вот примерная статистика количества вызовов в зависимости от числа удовлетворяющих критериям записей:
1 запись --- 2 вызова
2 записи --- 3 вызова
5 записей --- 12 вызовов
... ...
больше 60 тыс. --- 51 вызов (процедура возвращает в этом сл. 50 записей, но рассчитывает общее число)

Вот код вызова:

Set cn = New ADODB.Connection
cn.Open "Provider=sqloledb;Data Source=SERGE;Initial Catalog=MyBase; Trusted_connection=Yes; "

Set cm = New ADODB.Command
Set cm.ActiveConnection = cn
cm.CommandType = adCmdStoredProc
cm.CommandText = "my_SP"
'Тут я готовлю параметры для cm
.....
'
Set rstPF = New ADODB.Recordset
rstPF.CursorLocation = adUseClient
rstPF.CursorType = adOpenDynamic
rstPF.Properties("Bookmarkable") = True
Set rstPF = cm.Execute
...
Рейтинг: 0 / 0
Анализирую вот профайлером вызов SP - непонятки...
    #32022379
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А текст процедуры?
...
Рейтинг: 0 / 0
Анализирую вот профайлером вызов SP - непонятки...
    #32022391
_svr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаете, в ней дело?
Кстати - зацените, может есть какие-нибудь типичные для новичка ошибки/помарки?


CREATE PROCEDURE my_SP
@p1 varchar(30) ='',
@p2 varchar(20)='',
@p2 varchar(7)='',
@toprec int = 50,
@rt int output
AS

set nocount on
set ROWCOUNT @toprec

select t1.fld1, t1.fld2, t1.fld3, t1.fld4, t2.restr
FROM tbl1 t1 left join tbl2 t2 on (t1.restr_fk=t2.restr_id)
where (t1.fld1 like @p1 + '%') and (t1.fld2 like @p2+ '%') and (t1.fld3 like @p3+ '%' )

SELECT @rt = COUNT (*) FROM tbl1
where (fld1 like @p1 + '%') and (fld2 like @p2 + '%') and (fld3 like @p3 + '%' )

return 0
set nocount off
GO

(кстати, параметр @rt не возвращался, пока я не поставил return 0, но я склонен винить в этом VB...)
Я чуток упростил первый запрос - там несколько полей из tbl1 сливаются в одно (ну типа t1.fld1 + ', ' + t1.fld2 as bigfld), и вызывается UDF, форматирующая одно из полей (номер телефона, вставляет символы '-')
...
Рейтинг: 0 / 0
Анализирую вот профайлером вызов SP - непонятки...
    #32022392
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<В процессе отладки заметил некоторую странность: в профайлере задаю пару событий SP:Starting и SP:Completed.
<Дык вот, эта парочка при одном вызове выскакивает как минимум, дважды.
<Почему из проги вызываю один раз, а в профайлере регистрится 2 вызова??? Причем данные возвращает только последний <вызов...

Это вызовы "чего"? В каком профайлере, я чего-то не дойду малость
Чего такое SP:Starting и SP:Completed
...
Рейтинг: 0 / 0
Анализирую вот профайлером вызов SP - непонятки...
    #32022397
_svr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извинямся... Дабы не ломать язык и не морочить голову:

>В каком профайлере

SQL Profiler, тулза такая для сервера, стандартная

>Это вызовы "чего"?

В этой тулзе мона наблюдать вызовы хранимой процедуры (и много еще чего, наверное
) из клиента, если для трассы (Trace) установить следующие регистрируемые события (Events):

>Чего такое SP:Starting и SP:Completed

Event class для них - Stored Procedures.
...
Рейтинг: 0 / 0
Анализирую вот профайлером вызов SP - непонятки...
    #32022398
_svr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы, наверное издеваетесь, да?
...
Рейтинг: 0 / 0
Анализирую вот профайлером вызов SP - непонятки...
    #32022401
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SPID у двойных вызовов разный или один ?
...
Рейтинг: 0 / 0
Анализирую вот профайлером вызов SP - непонятки...
    #32022404
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Вы, наверное издеваетесь, да?

Нет, я просто по событиям не отслеживал никогда (не нужно было), только внутри процедуры трассировал. Сорри :-0
...
Рейтинг: 0 / 0
Анализирую вот профайлером вызов SP - непонятки...
    #32022454
_svr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Glory:
>SPID у двойных вызовов разный или один ?

Да, один. Более того, все столбцы совпадают, за исключением столбца Duration - он только в SP:Completed, который возвращает данные, отличен от нуля.
TextData для последнего события SP:Completed выглядит так (потому я и решил, что возврат данных идет в этой строке):

declare @P1 int
set @P1=61844
exec my_SP '', '', '', '50', @P1 output
select @P1

Это в случае, когда запрос без критериев и рассчитывается колич. записей во всей табличке (61844 записей). Ну и вот - 51 вызов.
Во второй строке у всех остальных вызовов стоит set @P1=NULL

Ощущение такое, что провайдер долбит сервер запросами непрерывно, а тот отстреливается холостыми, пока не выполнится самый первый запрос...
Да, забыл сказать - SP:Starting и SP:Completed чередуются, за исключением начала (2 шт. SP:Starting) и конца (2 шт. SP:Completed)

2tygra:
>Нет, я просто по событиям не отслеживал никогда (не нужно было),
А мне вот понадобилось - на клиента не передавался параметр, хотел подсмотреть... Метод тыка все-таки помог, но озадачился я сильно...
...
Рейтинг: 0 / 0
Анализирую вот профайлером вызов SP - непонятки...
    #32022467
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ощущение такое, что провайдер долбит сервер запросами непрерывно, а тот отстреливается холостыми, пока не выполнится самый первый запрос...

Режим выполнения запросов асинхронный ?
...
Рейтинг: 0 / 0
Анализирую вот профайлером вызов SP - непонятки...
    #32022469
_svr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Режим выполнения запросов асинхронный ?

ООПС!!!
А как это посмотреть/где настраивается?
Дело в том, что я выложил сюда весь код, который написал самостоятельно...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Анализирую вот профайлером вызов SP - непонятки...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]