Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нагрузка на сервер при использовании курсора  [new]
it_wano
Member

Откуда: Москва
Сообщений: 70
Доброго времени суток всем!

Описываю проблему.
Есть SQL Server 2000 EE SP3a.

Нужно при вставке в таблицу триггером обработать каждую
строку по возможности с наименьшей нагрузкой.
обработка производится хранимой процедурой.
Вставка ожидается как построчная так и блочная.

Пока вижу два варианта решения.
1. Курсор по inserted


create trigger ....
.....
declare @cur cursor
set @cur = cursor local fast_forward for
select PK_ID from inserted
...
открытие курсора
перемещение по курсору
...
     exec usp_ХранимаяПроцедура @InstrumentKey = @PK_ID
...

2. Цикл по inserted
    declare @pk_id int, @max_pk_id int
    select @pk_id = 0, @max_pk_id  = 0
    select @max_PK_ID = MAX(PK_ID) FROM INSERTED
    while @PK_ID < @max_PK_ID
    begin

        SELECT @PK_ID = MIN(PK_ID) 
        FROM INSERTED
        WHERE PK_ID > @PK_ID
...
     exec usp_ХранимаяПроцедура @InstrumentKey = @PK_ID
...
    end

заказчик хочет что бы это было сделано внутри триггера без курсора
(напрашивается вариант 2) мотивируя большей производительстью
и меньшими накладными расходаи

А теперь собственно вопрос:
Сколько ресурсов SQL сервера отжирает объявление и работа с курсором
(в каких попугаях ее можно померить)
Почему работа цикла может быть быстрее курсора (в данном случае)
???


Спасибо за ваши мнения.

ЗЫ: Вопрос дизайна такой обработки прошу не рассматривать
27 июл 05, 16:19    [1740707]     Ответить | Цитировать Сообщить модератору
 Re: Нагрузка на сервер при использовании курсора  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
Без курсора не означает в цикле...
27 июл 05, 16:21    [1740717]     Ответить | Цитировать Сообщить модератору
 Re: Нагрузка на сервер при использовании курсора  [new]
it_wano
Member

Откуда: Москва
Сообщений: 70
Berg
Без курсора не означает в цикле...


какие еще варианты можно предложить для построчной обработки массива строк?
27 июл 05, 16:34    [1740779]     Ответить | Цитировать Сообщить модератору
 Re: Нагрузка на сервер при использовании курсора  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
Если "построчная" - это требование, то никаких.
Просто бывает возможность обойтись без построчной...
27 июл 05, 16:41    [1740812]     Ответить | Цитировать Сообщить модератору
 Re: Нагрузка на сервер при использовании курсора  [new]
it_wano
Member

Откуда: Москва
Сообщений: 70
И все таки вопрос

при такой построчной обработке
насколько использование курсора будет хуже цикла ?

лично мне кажется что при объеме чуть больше 1 строки
использование курсора лучше
чем N раз делать выборку по inserted

Может я ошибаюсь ?
27 июл 05, 16:47    [1740833]     Ответить | Цитировать Сообщить модератору
 Re: Нагрузка на сервер при использовании курсора  [new]
ChA
Member

Откуда: Москва
Сообщений: 11136
it_wano
Может я ошибаюсь ?
Надо не более 10 минут на тест...
27 июл 05, 16:57    [1740902]     Ответить | Цитировать Сообщить модератору
 Re: Нагрузка на сервер при использовании курсора  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

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

Posted via ActualForum NNTP Server 1.2

27 июл 05, 17:02    [1740925]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить