Гость
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Курсоры в ASE / 8 сообщений из 8, страница 1 из 1
25.08.2013, 16:33
    #38376937
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE
ASE 15.7 SP101

Есть простой курсор:
...
Рейтинг: 0 / 0
25.08.2013, 17:00
    #38376943
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE
ASE 15.7 SP101

Есть простой курсор:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
declare crs cursor for   
select distinct x_field
from x_table 
where is_del = 0 
and date_field >= '20130701' and date_field < '20130801'
  
go
declare @sc_id unsigned int  
declare @ii int
declare @iic varchar(8)
set @ii = 0

open crs  
fetch crs into @sc_id  
  
while (@@sqlstatus = 0)   
begin   
    select @ii = @ii +1
	exec x_proc @sc_id
	select @iic = convert (varchar(8),@ii)
    print @iic 
	fetch crs into @sc_id  
end  
close crs  
deallocate crs  




все хорошо! только почему-то падает производительность. каждая следующая итерация замедляется. где-то после 1000 обработанных строк, совсем "опанька".
сама процедура x_proc отрабатывает мгновенно. и поданный в нее параметр не влияет на производительность.
в errorlog появилось вот это
авторIncrease the config parameter 'number of open objects' to avoid descriptor reuse. Reuse may result in performance degradation.
увеличил в четверо, по данным sp_monitorconfig стало достаточно. но на производительность это не повлияло, так же постепенно падает.

что делаю не так?

чтоб как-то ускорить процесс, запускаю скрипт параллельно(в двух коннектах), разбивая месяц на 2 части
and date_field >= '20130701' and date_field < '20130715'
и
and date_field >= '20130715' and date_field < '20130801'
но после того как отработал первый процесс, все равно он ждет когда работу закончит второй.
как будто второй что-то блокирует для первого. но mon_Locks показывает только shared intent по таблице x_table.

чего тогда ждет первый процесс?
...
Рейтинг: 0 / 0
25.08.2013, 18:52
    #38376970
mikron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE
cherrex_Den,

Я не знаток ASE но могу предположит, дело в distinct и ошибочно само ожидание постоянного времени выполнения. С продвижением по списку ДБМС просмотривает много строк но не находит новых значений.
...
Рейтинг: 0 / 0
05.09.2013, 18:43
    #38388355
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE
cherrex_Den,

авторв errorlog появилось вот это
автор
Increase the config parameter 'number of open objects' to avoid descriptor reuse. Reuse may result in performance degradation.

увеличил в четверо, по данным sp_monitorconfig стало достаточно. но на производительность это не повлияло, так же постепенно падает.


Это тут точно ни при чём, у тебя нет тут роста кол-ва используемых объектов по мере выполнения скрипта.
Просто совпало.
...
Рейтинг: 0 / 0
05.09.2013, 18:45
    #38388360
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE
Надо смотреть внутрь процедуры x_proc,
и ещё я бы убрал PRINT-ы, хотя бы для того, что бы убедится, что они не тормозят.
А они могут. И в таком случае виноват будет не сервер, а клиент, он тормозит.
...
Рейтинг: 0 / 0
05.09.2013, 18:47
    #38388363
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE
cherrex_Denчтоб как-то ускорить процесс, запускаю скрипт параллельно(в двух коннектах), разбивая месяц на 2 части
and date_field >= '20130701' and date_field < '20130715'
и
and date_field >= '20130715' and date_field < '20130801'
но после того как отработал первый процесс, все равно он ждет когда работу закончит второй.
как будто второй что-то блокирует для первого. но mon_Locks показывает только shared intent по таблице x_table.

чего тогда ждет первый процесс?

Не должен он ничего ждать.
Если конечно в процедуре нет какой-то ждущей логики.
...
Рейтинг: 0 / 0
06.09.2013, 13:15
    #38389027
Nashville
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE
а процедура x_proc не инсёртит или апдейтит в x_table?
...
Рейтинг: 0 / 0
06.09.2013, 22:08
    #38389721
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE
Причина действительна в процедуре x_proc.
Точнее, из-за "select for xml..." в этой процедуре, если это убрать все нормально.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Курсоры в ASE / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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