|
|
|
Время выполнения ХП
|
|||
|---|---|---|---|
|
#18+
ХП процедура выgолняеться недопустимо долго. В для анализа создаю функцию. Функция выполняеться довольнатаки быстро... Привожу часть ее: Work_for_kurs_loop: loop fetch next Cur_P_R_of_day; if sqlstate=Err_not_found then Work_for_kurs_loop leave Work_for_kurs_loop end if ; set k=k+1 end loop Work_for_kurs_loop Изменяю эту же часть на следующию: Work_for_kurs_loop: loop fetch next Cur_P_R_of_day into Var_Date,Var_seb,Var_QuantityP_Magazin,Var_QuantityR_Magazin,Var_QuantityP_Sklad,Var_QuantityR_Sklad,Var_QuantityP_brak,Var_QuantityR_brak,Var_QuantityP_moscow,Var_QuantityR_moscow,Var_Magazin,Var_Sklad,Var_brak,Var_moscow,Var_id,Var_goods_name,Var_seb_,Var_QuantityP_Magazin_,Var_QuantityR_Magazin_,Var_QuantityP_Sklad_,Var_QuantityR_Sklad_,Var_QuantityP_Brak_,Var_QuantityR_Brak_,Var_QuantityP_moscow_,Var_QuantityR_moscow_; if sqlstate=Err_not_found then Work_for_kurs_loop leave Work_for_kurs_loop end if ; set k=k+1 end loop Work_for_kurs_loop все приплили... очень-очень долго. Разница выделена красным... Подскажите что можно сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2004, 17:09 |
|
||
|
Время выполнения ХП
|
|||
|---|---|---|---|
|
#18+
Судя по семантике это WatcomSQL Sybase ASA, хотя на будующее неплохо бы уточнять, что это не ASE. Чтобы понять что у Вас не так, необходимо привести еще номер версии и билда ASA и более подробный кусок хранимой процедуры с описанием создания самого курсора. Так же можно попробовать вместо цикла по курсору организовать цикл FOR, возможно он будет работать быстрее. P.S. А почему так много полей в курсоре ? Позаписное перелопачивание запросов с большими обьемами данных всегда будет тормозить по сравнению с операторами SQL. Возможно следует изменить логику хранимой процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2004, 17:43 |
|
||
|
Время выполнения ХП
|
|||
|---|---|---|---|
|
#18+
Насчет сервера, Да вы правы это ASA, кажись 5.0 кусок почти полной функции, немного изменил. А конесно понимаю, что надо что-то еще прокомнтирвать. Подскажите что? declare Cur_P_R_of_day dynamic scroll cursor for select T.datedoc, (select sum(order_in_item.cost_ruble)/sum(order_in_item.quantity) from Admin.order_in_item,Admin.order_in where(order_in.id=order_in_item.order_in_id) and(goods.id=order_in_item.goods_id) and firm_id<>'2003-12-01 16:46:09.001005' and firm_id<>'2002-12-10 15:47:38.001001' and firm_id<>'2003-01-10 21:53:12.001001' and firm_id<>'2003-01-29 12:59:26.001001' and(datedoc<=t.datedoc)) as seb_, (select sum(order_item.quantity) from admin.order_item,admin.order_tab,admin.type_oper where(order_tab.id=order_item.order_id) and(type_oper.id=order_tab.type_oper_id) and(order_tab.state='C') and(type_oper.type_order='P') and(order_item.goods_id=goods.id) and(store_id='2002-11-10 14:02:51.001002') and(datedoc<=t.datedoc)) as QuantityP_Magazin_, (select sum(order_item.quantity) from admin.order_item,admin.order_tab,admin.type_oper where(order_tab.id=order_item.order_id) and(type_oper.id=order_tab.type_oper_id) and(order_tab.state='C') and(type_oper.type_order='R') and(order_item.goods_id=goods.id) and(store_id='2002-11-10 14:02:51.001002') and(datedoc<=t.datedoc)) as QuantityR_Magazin_, (select sum(order_item.quantity) from admin.order_item,admin.order_tab,admin.type_oper where(order_tab.id=order_item.order_id) and(type_oper.id=order_tab.type_oper_id) and(order_tab.state='C') and(type_oper.type_order='P') and(order_item.goods_id=goods.id) and(store_id='2002-11-10 14:20:53.000101') and(datedoc<=t.datedoc)) as QuantityP_Sklad_, (select sum(order_item.quantity) from admin.order_item,admin.order_tab,admin.type_oper where(order_tab.id=order_item.order_id) and(type_oper.id=order_tab.type_oper_id) and(order_tab.state='C') and(type_oper.type_order='R') and(order_item.goods_id=goods.id) and(store_id='2002-11-10 14:20:53.000101') and(datedoc<=t.datedoc)) as QuantityR_Sklad_, (select sum(order_item.quantity) from admin.order_item,admin.order_tab,admin.type_oper where(order_tab.id=order_item.order_id) and(type_oper.id=order_tab.type_oper_id) and(order_tab.state='C') and(type_oper.type_order='P') and(order_item.goods_id=goods.id) and(store_id='2003-02-13 17:08:58.000101') and(datedoc<=t.datedoc)) as QuantityP_Brak_, (select sum(order_item.quantity) from admin.order_item,admin.order_tab,admin.type_oper where(order_tab.id=order_item.order_id) and(type_oper.id=order_tab.type_oper_id) and(order_tab.state='C') and(type_oper.type_order='R') and(order_item.goods_id=goods.id) and(store_id='2003-02-13 17:08:58.000101') and(datedoc<=t.datedoc)) as QuantityR_Brak_, (select sum(order_item.quantity) from admin.order_item,admin.order_tab,admin.type_oper where(order_tab.id=order_item.order_id) and(type_oper.id=order_tab.type_oper_id) and(order_tab.state='C') and(type_oper.type_order='P') and(order_item.goods_id=goods.id) and(store_id='2003-07-31 17:44:17.000001') and(datedoc<=t.datedoc)) as QuantityP_moscow_, (select sum(order_item.quantity) from admin.order_item,admin.order_tab,admin.type_oper where(order_tab.id=order_item.order_id) and(type_oper.id=order_tab.type_oper_id) and(order_tab.state='C') and(type_oper.type_order='R') and(order_item.goods_id=goods.id) and(store_id='2003-07-31 17:44:17.000001') and(datedoc<=t.datedoc)) as QuantityR_moscow_ from Admin.My_Date_Oper as T,Admin.goods,Admin.pricelist_item where pricelist_item.goods_id=goods.id and T.datedoc>=@StartDate and T.datedoc<=@EndDate group by t.datedoc,goods.id; /* create table #TempData( T_Date date null, T_seb decimal(18,3) null, T_QuantityP_Magazin decimal(18,2) null, T_QuantityR_Magazin decimal(18,2) null, T_QuantityP_Sklad decimal(18,2) null, T_QuantityR_Sklad decimal(18,2) null, T_QuantityP_brak decimal(18,2) null, T_QuantityR_brak decimal(18,2) null, T_QuantityP_moscow decimal(18,2) null, T_QuantityR_moscow decimal(18,2) null, T_Magazin decimal(18,2) null, T_Sklad decimal(18,2) null, T_brak decimal(18,2) null, T_moscow decimal(18,2) null, );*/ open Cur_P_R_of_day; set k=0; Work_for_kurs_loop: loop //ìåòêà öèêëà fetch next Cur_P_R_of_day into Var_Date,Var_seb_,Var_QuantityP_Magazin_,Var_QuantityR_Magazin_,Var_QuantityP_Sklad_,Var_QuantityR_Sklad_,Var_QuantityP_Brak_,Var_QuantityR_Brak_,Var_QuantityP_moscow_,Var_QuantityR_moscow_; if sqlstate=Err_not_found then // ñëó÷àå åñëè ïðîèçîøåë âûõîä çà ïðåäåëû êóðñîðà, òî çàâåðøàåòñÿ ðàáîòà öèêëà Work_for_kurs_loop leave Work_for_kurs_loop end if ; set k=k+1 end loop Work_for_kurs_loop ; close Cur_P_R_of_day; return k end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2004, 18:33 |
|
||
|
Время выполнения ХП
|
|||
|---|---|---|---|
|
#18+
Изменяю эту же часть на следующию: Work_for_kurs_loop: loop fetch next Cur_P_R_of_day into Var_Date,Var_seb,Var_QuantityP_Magazin,Var_QuantityR_Magazin,Var_QuantityP_Sklad,Var_QuantityR_Sklad,Var_QuantityP_brak,Var_QuantityR_brak,Var_QuantityP_moscow,Var_QuantityR_moscow,Var_Magazin,Var_Sklad,Var_brak,Var_moscow,Var_id,Var_goods_name,Var_seb_,Var_QuantityP_Magazin_,Var_QuantityR_Magazin_,Var_QuantityP_Sklad_,Var_QuantityR_Sklad_,Var_QuantityP_Brak_,Var_QuantityR_Brak_,Var_QuantityP_moscow_,Var_QuantityR_moscow_; if sqlstate=Err_not_found then Work_for_kurs_loop leave Work_for_kurs_loop end if ; set k=k+1 end loop Work_for_kurs_loop У меня вопрос - что ВОТ ЭТО такое: "if sqlstate=Err_not_found then Work_for_kurs_loop " Если записей больше нет, идем на начало? Тогда понятно, почему "все прилипли" :) Если смотреть функцию полностью, там нет этой ошибки. Зато курсор делает нечто невообразимое: подзапросы, суммы, деленные на суммы, да еще и group by в конце. Это ОЧЕНЬ долго, тем более что записи он тянет по одной, ибо курсор. Надо бы как-то переписать IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 22:55 |
|
||
|
|

start [/forum/topic.php?fid=55&gotonew=1&tid=2014676]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 515ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...