Помогите понять откуда растут ноги.

Cooper
Дата: 26.02.2003 18:40:23
/topic/23924\r
\r
Вот два дня уже пытал этот вопрос на главном форуме. Может здесь чем поможите?
Cat2
Дата: 26.02.2003 22:10:34
Попробуй так

В все обработки поставь DataSource в событие onUpdateDat

Сначала сделай обновляющий запрос, а потом ReQuery

А потом Abort.

Завтра гляну точно, как это у меня делается - начисто из головы выскочило.
Cooper
Дата: 02.03.2003 15:07:33
2 Cat2

Не мог бы ты поподробнее рассказать, как это сделать. А то я недогоняю малёха. Особенно вот это не понял:

Сначала сделай обновляющий запрос, а потом ReQuery
А потом Abort.
Cooper
Дата: 02.03.2003 16:34:54
Блин, чё делать? Все перепробовал.

Убрал все обработки.

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

Народ ну помогите хоть чем-нибудь!!!

Спасибо.
Cooper
Дата: 03.03.2003 19:17:45
Люди!!! Человеки Вы или хто?

Ну помогите!!! Ну позарез нужно. Это не ради праздного любопытства!!! Все, что мог все перепробовал. Не дайте погибнуть моей программе!!!

P.S. Жители и гости Столицы будут ублажены пивом.

P.S. Я плакаю :((((
Cat2
Дата: 03.03.2003 23:21:11
Какой у тебя в кнопке код? Последовательность должна быть такова

DataSource.Enabled:=false;
DataSet.ReQuery;
DataSource.Enabled:=true;

=========
Что видно в профилере? Где задержка? В период от нажатия кнопки до посылки запроса, или от посылки запроса до получения результата?

=======
Еще вопрос. Как ты тестируешь? У тебя клиент и сервер на одной машине?
Cooper
Дата: 04.03.2003 11:42:45
2 Cat2

В кнопке такой код:

adostoredproc1.Active:=false;
adostoredproc1.Active:=true; //Вот здесь висит долго (при первом выполнении около 2 секунд, при втором около 5 секунд, при последующих выполняется мгновенно)

Где задержка? В период от нажатия кнопки до посылки запроса, или от посылки запроса до получения результата?

Я так понимаю, что от посылки запроса до получения результата.

Но это все чешуя. Посмотрел в профайлере. Там видно, что тормозит Хр.Процедура.А тормозит вот где:
Я там объявляю 12 Параметров процедуры типа output. И там их меняю и на клиенте естественно получаю новые значения.
Так вот в профайлере вижу:

SP:Completed (Это я не знаю чего значит) (3 секунды)
declare @P1 int

set @P1=0
declare @P2 float
set @P2=3.000000000000000e+001
declare @P3 int
set @P3=10000001
declare @P4 int
set @P4=1
declare @P5 varchar(50)
set @P5='4'
declare @P6 varchar(50)
set @P6='USD'
declare @P7 varchar(50)
set @P7='OLDI 344'
declare @P8 varchar(50)
set @P8='Варшавка'
declare @P9 int
set @P9=10000001
declare @P10 datetime
set @P10='Mar 3 2003 10:12AM'
declare @P11 varchar(50)
set @P11=''
declare @P12 bit
set @P12=0
exec SP_Tapm_tovar_Select 1, 0, @P1 output, 10000017, @P2 output, @P3 output, @P4 output, @P5 output, @P6 output, @P7 output, @P8 output, @P9 output, @P10 output, @P11 output, @P12 output
select @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12


и строку RPC:Completed (4 секунды)
declare @P1 int

set @P1=0
declare @P2 float
set @P2=3.000000000000000e+001
declare @P3 int
set @P3=10000001
declare @P4 int
set @P4=1
declare @P5 varchar(50)
set @P5='4'
declare @P6 varchar(50)
set @P6='USD'
declare @P7 varchar(50)
set @P7='OLDI 344'
declare @P8 varchar(50)
set @P8='Варшавка'
declare @P9 int
set @P9=10000001
declare @P10 datetime
set @P10='Mar 3 2003 10:12AM'
declare @P11 varchar(50)
set @P11=''
declare @P12 bit
set @P12=0
exec SP_Tapm_tovar_Select 1, 0, @P1 output, 10000017, @P2 output, @P3 output, @P4 output, @P5 output, @P6 output, @P7 output, @P8 output, @P9 output, @P10 output, @P11 output, @P12 output
select @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12


Потом убрал в хранимой процедуре у параметров тип output. И Процедура выполняется очень быстро. И эти две строки из профайлера исчезли.

Так что же, получается ХП тормозит (причем на первом и втором выполнении в одном соединении) из-за того, что у параметров стоит output?

Так чтоли? А почему это происходит? И что мне теперь делать?
Cooper
Дата: 04.03.2003 12:15:57
Странно, А может дело и не в этом. Есть у меня другая ХП. Там теже параметры и тоже output. Но выполняется быстро.

А могут быть тормоза из-за использования временных таблиц?

Ну типа:

insert a, b, c into #table from T


................

select a, b, c from #table
Cat2
Дата: 04.03.2003 13:23:04
Я не понял, зачем ты делаешь в SP_Tapm_tovar_Select ввод-выход через OUTPUT-параметры?
Почему просто не делаешь в теле этой процедуры вызов SELECT с требуемыми данными? А ввод параметров константами?
Похоже, что имея передачу параметрами, заданными в виде переменных, сервер каждый раз переделывает план запроса.

Тормоза из-за временных таблиц тоже могут быть. Но это решается увеличением tempdb. И, помоему, это не тот случай.

"Completed" - в данном контексте - "закончено, готово"

=========
Ты не ответил, на чем тестируешь. Если и сервер и клиент на одной машине, особенно если стоит не серверная ОС, то такого рода тормоза могут выскакивать и в QA.
Cooper
Дата: 04.03.2003 14:06:18
2 Cat2

А ввод параметров константами?

Так я же вроде ввожу параметры константами. Вот так:

adostoredpro1.parameters.parambyname('имя параметра').value:=777;


Похоже, что имея передачу параметрами, заданными в виде переменных

В виде переменных, в смысле output?

А почему, если я убираю output, то вот это исчезает из профайлера?:

declare @P1 int

set @P1=0
declare @P2 float
set @P2=3.000000000000000e+001
declare @P3 int
set @P3=10000001
declare @P4 int
set @P4=1
declare @P5 varchar(50)
set @P5='4'
declare @P6 varchar(50)
set @P6='USD'
declare @P7 varchar(50)
set @P7='OLDI 344'
declare @P8 varchar(50)
set @P8='Варшавка'
declare @P9 int
set @P9=10000001
declare @P10 datetime
set @P10='Mar 3 2003 10:12AM'
declare @P11 varchar(50)
set @P11=''
declare @P12 bit
set @P12=0
exec SP_Tapm_tovar_Select 1, 0, @P1 output, 10000017, @P2 output, @P3 output, @P4 output, @P5 output, @P6 output, @P7 output, @P8 output, @P9 output, @P10 output, @P11 output, @P12 output
select @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12


Я чего то не пойму, эта процедура (SP_Tapm_tovar_Select) второй раз что ли запускается?

exec SP_Tapm_tovar_Select 1, 0, @P1 output, 10000017, @P2 output, @P3 output, @P4 output, @P5 output, @P6 output, @P7 output, @P8 output, @P9 output, @P10 output, @P11 output, @P12 output

select @P1, @P2, @P3, @P4, @


На счет временных таблиц:

Когда я в ХП (SP_Tapm_tovar_Select) вместо вот этого:

insert a, b, c into #table from T

................
select a, b, c from #table

Пишу вот это:
select a, b, c from T


То ХП выполняется мгновенно (всегда).
То есть тормоза могут быть из-за временной таблицы?

Ты не ответил, на чем тестируешь. Если и сервер и клиент на одной машине, особенно если стоит не серверная ОС, то такого рода тормоза могут выскакивать и в QA.

Windows 2000 SERVER + SQL SERVER 2000 PE. Клиента запускал и на этой машине и по сети. Результат одинаковый. Я уверен, что дело в процедуре.

P.S.
А нужно ли в ХП сначала создавать Временную таблицу вот так:
if object_id('tempdb..#table') is not null drop table #table

create table #table
(
a int,
b int,
c int,
......
)*/

Или можно сразу делать так:
Insert a,b,c into #Table from T


Спасибо за помощь.