Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема часть 3 xp - вопрос по курсору (число прочтений - 2066 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
часть 3 xp - вопрос по курсору
12. Ноября 2008 :: 15:50
Печать  
1.Почему в хп 1с v77 для курсоров не используется
FAST_FORWARD ???
т.е. вместо кода
Код
Выбрать все
DECLARE Cur_RA99 CURSOR  FOR SELECT DEBKRED, SP101, SP100, SP4021, SP102  FROM RA99 WHERE IDDOC=@IdDoc
 


использовать код
Код
Выбрать все
DECLARE Cur_RA99 CURSOR FAST_FORWARD FOR SELECT DEBKRED, SP101, SP100, SP4021, SP102  FROM RA99 WHERE IDDOC=@IdDoc
 


2. Будет ли выигрыш если использовать FAST_FORWARD
и можно ли как-то измерить выигрыш
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: часть 3 xp - вопрос по курсору
Ответ #1 - 12. Ноября 2008 :: 16:01
Печать  
Ну так с эмулируй какую-нибудь операцию с курсорами в Query Analizer и сделай замеры
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 3 xp - вопрос по курсору
Ответ #2 - 12. Ноября 2008 :: 16:06
Печать  
я думаю что без нагрузки на базу данные будут в пределах погрешности измерений. по статьям рекомендуется использовать
FAST_FORWARD, но может время на создание курсора fast превышает выигрыш от того что он быстрый т.к. обычно маленькая выборка для регистра ( меньше 1000).
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: часть 3 xp - вопрос по курсору
Ответ #3 - 12. Ноября 2008 :: 16:13
Печать  
Z1 писал(а) 12. Ноября 2008 :: 16:06:
я думаю что без нагрузки на базу данные будут в пределах погрешности измерений. по статьям рекомендуется использовать
FAST_FORWARD, но может время на создание курсора fast превышает выигрыш от того что он быстрый т.к. обычно маленькая выборка для регистра ( меньше 1000).


Создай в цикле и тот и другой курсор раз эдак 10000 и сравни время
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 3 xp - вопрос по курсору
Ответ #4 - 12. Ноября 2008 :: 17:01
Печать  
Прогнал тест
Код
Выбрать все
declare @count int
set @count = 0
while ( @count < 1000000) begin
   EXEC XXX_R1 '  ST0BAA4',1
   set @count = @count + 1
end
 


тест прогнал по 3 раза
1 без  FAST_FORWARD
40 сек 40 сек 40 сек
2 с   FAST_FORWARD
41 сек 41 сек 41 сек

но сейчас сервер не нагружен а при нагрузке может ситуация совсем иная ?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: часть 3 xp - вопрос по курсору
Ответ #5 - 13. Ноября 2008 :: 02:26
Печать  
Цитата:
но сейчас сервер не нагружен а при нагрузке может ситуация совсем иная ?


Вот тут вроде неплохо про курсоры написано: http://www.interface.ru/home.asp?artId=5809
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 3 xp - вопрос по курсору
Ответ #6 - 13. Ноября 2008 :: 05:41
Печать  
Прогнал  еще один тест c внешней транзакцией
Код
Выбрать все
begin tran
declare @count int
set @count = 0
while ( @count < 1000000) begin
   EXEC XXX_R1 '  ST0BAA4',1
   set @count = @count + 1
end
commit 


тест прогнал по 3 раза
1 без  FAST_FORWARD
35 сек 34 сек 35 сек
2 с   FAST_FORWARD
35 сек 36 сек 36 сек

Тест практически ничего не показывает.
С одной стороны все равно приблизительно варианты одинаковые
С другой  вроде без FAST_FORWARD  быстрее как показывает тест
С третьей стороны Цитата:
используйте опцию FAST_FORWARD вместо опции FORWARD_ONLY, поскольку она имеет внутреннюю оптимизацию производительности по скорости. Этот тип курсора создает наименьшую нагрузку на SQL Server
т.е  FAST_FORWARD дает лучшую сумарную производительность
работы сервера

Ну и самый окончательный вывод надо стремиться вообще избавляться от курсоров.
Буду думать именно в этом направлении
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать