powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
41 сообщений из 41, показаны все 2 страниц
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580303
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Время работы кода SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5).
Почему это возможно, что может влиять на это?
В хранимой процедуре на сервере ASE 12.5 создается курсор, открывается и затем обрабатываются результаты. Время выполнения (создание курсора и открытие) составляет порядка 9 сек (запускаю процедуру в Advantage). При выполнении тех же действий в Advantage время выполнения составляет порядка 1 сек. Из-за чего может быть такая разница?
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580341
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполните SP с опцией with recompile
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580354
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugeny_M пишет:
> Время работы кода SQL в хр.процедуре и в Advantage отличаются на порядок
> (ASE 12.5).

Код давайте, будут советы конкретные.

> Почему это возможно, что может влиять на это?

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


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580433
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот код:
Declare cur_my cursor for
select c.division,tn
from zt_register_charges c
where period>=@rp_p and period<=@rp and uperiod=@rp_p and c.enterprise_id = @eid
and c.division in (select div_id from #div)

open cur_my

Пытался вложенный select заменить на inner join - разницы никакой.
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580437
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
morisВыполните SP с опцией with recompile
Спасибо, проверил - не влияет на время.
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580469
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
конечно, надо бы посмотреть на запрос.
У меня в большинстве случаев вопрос решается указанием индекса "в лоб" в ХП.
Т.е. смотришь план запроса в адвантаже и в ХП прописываешь индексы.
Но это не панацея, решение зависит от запроса...
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580492
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, тут или хинты по использованию индексов надо или использовать абстрактый план. Чтобы АП не писать самому, (утомительно) захватить АП c запроса выполняемого в Advantage, а потом добавить ключевое слово plan после запроса в SP и прописать захваченный ранее АП
запрос получиться типа такого:

select avg(price) from titles
plan
" ( plan
( i_scan type_price_ix titles )
( )
)"
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580520
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select c.division,tn
from zt_register_charges c
where period>=@rp_p and period<=@rp and uperiod=@rp_p and c.enterprise_id = @eid
and c.division in (select div_id from #div)

какой query plan показывает адантаж?
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580543
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rubberselect c.division,tn
from zt_register_charges c
where period>=@rp_p and period<=@rp and uperiod=@rp_p and c.enterprise_id = @eid
and c.division in (select div_id from #div)

какой query plan показывает адантаж?

FROM TABLE
zt_register_charges
c
Nested iteration.
Index : ztui_register_charges_tnrpup
Forward scan.
Positioning by key.
Keys are:
enterprise_id ASC
period ASC
Using I/O Size 2 Kbytes for index leaf pages.
With LRU Buffer Replacement Strategy for index leaf pages.
Using I/O Size 2 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.


FROM TABLE
#div
EXISTS TABLE : nested iteration.
Table Scan.
Forward scan.
Positioning at start of table.
Using I/O Size 2 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.
TO TABLE
Worktable1.


STEP 2
The type of query is SELECT.


FROM TABLE
Worktable1.
Nested iteration.
Table Scan.
Forward scan.
Positioning at start of table.
Using I/O Size 16 Kbytes for data pages.
With MRU Buffer Replacement Strategy for data pages.


Server Message: Number 3630, Severity 10
Server 'storm_ds', Line 1:
Total estimated I/O cost for statement 1 (at line 1): 176.


Parse and Compile Time 1.
SQL Server cpu time: 100 ms.
Table: zt_register_charges scan count 1, logical reads: (regular=2660 apf=0 total=2660), physical reads: (regular=0 apf=0 total=0), apf IOs used=0
Table: #div_________00000260009805944 scan count 24975, logical reads: (regular=24975 apf=0 total=24975), physical reads: (regular=0 apf=0 total=0), apf IOs used=0
Table: Worktable1 scan count 1, logical reads: (regular=111 apf=0 total=111), physical reads: (regular=0 apf=0 total=0), apf IOs used=0
Server Message: Number 3631, Severity 10
Server 'storm_ds', Line 1:
Total actual I/O cost for this command: 55492.
Total writes for this command: 0

Execution Time 1.
SQL Server cpu time: 100 ms. SQL Server elapsed time: 153 ms.
(50 rows affected)
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580566
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуй перекомпилить процу с хинтом

select c.division,tn
from zt_register_charges c (index ztui_register_charges_tnrpup)
where period>=@rp_p and period<=@rp and uperiod=@rp_p and c.enterprise_id = @eid
and c.division in (select div_id from #div)
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580654
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rubberпопробуй перекомпилить процу с хинтом

select c.division,tn
from zt_register_charges c (index ztui_register_charges_tnrpup)
where period>=@rp_p and period<=@rp and uperiod=@rp_p and c.enterprise_id = @eid
and c.division in (select div_id from #div)

Спасибо, меньше секунды!

Вопрос - насколько часто Вы используете принудительное указание индексов в запросах?
Мне говорили, что это не рекомендуется, так как при изменении кол-ва данных выполнение запросов может резко замедлиться?
А если изменится индексное выражение, добавят в начало новое поле?
Или требовать чтобы индексы не меняли, а создавали новый с теми же полями и + новым полем?
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580675
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Eugeny_M пишет:
> Время работы кода SQL в хр.процедуре и в Advantage отличаются на порядок
> (ASE 12.5).

Код давайте, будут советы конкретные.

> Почему это возможно, что может влиять на это?

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


Posted via ActualForum NNTP Server 1.4

Код я дал. Какие можете дать советы, как новичку. Как заставить применять вычисление селективности в хр? И нужно ли всегда задавать индексы жестко в хр.процедуре в тексте запроса?
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580692
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugeny_M пишет:

Всю процедуру надо, весь код.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580713
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поэтому и говорю - "это не панацея".
Изменение количества данных может замедлить время отработки, для таких вариантов есть разные 'лекарства' от UPDATE STATISTICS до REORG (если схема блокировки не ALL PAGES) и т.п.
[имхо: чтоб база продуктивно работала за ней нужно постоянно "следить" - периодически выполнять профилактику].
А что касается изменения структуры (не важно таблиц или индексов) - так извините, в таком случае - с процедур нужно тоже "смахивать пыль" :)
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580719
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugeny_M пишет:

> Вопрос - насколько часто Вы используете принудительное указание индексов
> в запросах?

Процентах в 20. Если запрос не оптимизируется самостоятельно сервером.

> Мне говорили, что это не рекомендуется, так как при изменении кол-ва
> данных выполнение запросов может резко замедлиться?

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

> А если изменится индексное выражение, добавят в начало новое поле?

То надо переписывать запрос. Убирать хинт, добавлять другой.

> Или требовать чтобы индексы не меняли, а создавали новый с теми же
> полями и + новым полем?

Конечно. Или пусть только в конец новые поля добавляют.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580731
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugeny_M пишет:

> Код я дал.

Это не код. Это один запрос. Там ничего не видно.

Как заставить
> применять вычисление селективности в хр?

Использовать в качестве параметров запросов параметры
процедуры. Но это не всегда надо, и не всегда помогает.

И нужно ли всегда задавать
> индексы жестко в хр.процедуре в тексте запроса?

Нет, не всегда, а когда только план генерируется плохой.
Как в вашем случае. И нельзя вынести переменные в параметры
процедуры или это не помогает.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580841
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rubberпоэтому и говорю - "это не панацея".
Изменение количества данных может замедлить время отработки, для таких вариантов есть разные 'лекарства' от UPDATE STATISTICS до REORG (если схема блокировки не ALL PAGES) и т.п.
[имхо: чтоб база продуктивно работала за ней нужно постоянно "следить" - периодически выполнять профилактику].
А что касается изменения структуры (не важно таблиц или индексов) - так извините, в таком случае - с процедур нужно тоже "смахивать пыль" :)

Спасибо! Почитаю про UPDATE STATISTICS и REORG.
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580879
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Eugeny_M пишет:

> Код я дал.

Это не код. Это один запрос. Там ничего не видно.

Весь код занимает около 4 страниц. Меня интересовал тот код, который тормозил.


Как заставить
> применять вычисление селективности в хр?

Использовать в качестве параметров запросов параметры
процедуры. Но это не всегда надо, и не всегда помогает.

Т.е если в том примере я не использовал бы переменные @rp_p, @eid
а только параметры процедуры (т.е вычислял бы их раньше и передавал
в процедуру, в качестве параметров), то запрос был бы оптимизирован
и выполнился быстро (с подключением индекса)?


И нужно ли всегда задавать
> индексы жестко в хр.процедуре в тексте запроса?

Нет, не всегда, а когда только план генерируется плохой.
Как в вашем случае. И нельзя вынести переменные в параметры
процедуры или это не помогает.
Posted via ActualForum NNTP Server 1.4

Как определить в большой хр. процедуре, где 200 строк + вызов еще десятка других
хранимых процедур, для каких конструкций в хр. процедуре план генерируется плохой,
а для каких хороший?
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580880
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почитайте :)
а в указанном запросе производительность будет снижаться при увеличении количества записей в таблице #div, так что если такое предусматривается - именно в этой части надо менять запрос уже сейчас...
удачи !
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580887
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugeny_M пишет:
> Весь код занимает около 4 страниц. Меня интересовал тот код, который
> тормозил.

Ну и давай . 8 килобайт-то всего. Ну или выкинь все после этого
запроса.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580889
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rubber пишет:
> Изменение количества данных может замедлить время отработки, для таких
> вариантов есть разные 'лекарства' от UPDATE STATISTICS до REORG (если

При чем здесь это-то?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580910
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rubberпочитайте :)
а в указанном запросе производительность будет снижаться при увеличении количества записей в таблице #div, так что если такое предусматривается - именно в этой части надо менять запрос уже сейчас...
удачи !

В таблице #div не больше 100 записей. А при выполнении подзапроса выбирается не больше 10.
create table #div(
div_id int not null,
...
wrk tinyint default 0 not null,
unique clustered (div_id))

Вы имеете ввиду такой вариант:
select c.division,tn
from zt_register_charges c (index ztui_register_charges_tnrpup), #div
where period>=@rp_p and period<=@rp and uperiod=@rp_p and c.enterprise_id = @eid
and c.division=#div.div_id and #div.wrk<2
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580914
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> При чем здесь это-то?

это к в вопросу "Мне говорили, что это не рекомендуется, так как при изменении кол-ва данных выполнение запросов может резко замедлиться?"
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580931
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Вы имеете ввиду такой вариант:
> select c.division,tn
> from zt_register_charges c (index ztui_register_charges_tnrpup), #div
> where period>=@rp_p and period<=@rp and uperiod=@rp_p and c.enterprise_id = @eid
> and c.division=#div.div_id and #div.wrk<2

не обязательно такой, это зависит от прогнозируемого в будущем кол-ва записей в #div.
если, к примеру, оно перевалит за пару десятков тысяч, то уже сейчас можно это предусмотреть.
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580956
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Eugeny_M пишет:
> Весь код занимает около 4 страниц. Меня интересовал тот код, который
> тормозил.

Ну и давай . 8 килобайт-то всего. Ну или выкинь все после этого
запроса.
Posted via ActualForum NNTP Server 1.4

Я ошибся, не 4 страницы, там 54 кб - более 1200 строк. Выкладывать всё, зачем?
Не хочу захламлять ветку и сервер.
Или вы хотите стиль написания запросов посмотреть?
Код писал не я! Что он делает без поллитра не разберешься :)
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34580969
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rubber> Вы имеете ввиду такой вариант:
> select c.division,tn
> from zt_register_charges c (index ztui_register_charges_tnrpup), #div
> where period>=@rp_p and period<=@rp and uperiod=@rp_p and c.enterprise_id = @eid
> and c.division=#div.div_id and #div.wrk<2

не обязательно такой, это зависит от прогнозируемого в будущем кол-ва записей в #div.
если, к примеру, оно перевалит за пару десятков тысяч, то уже сейчас можно это предусмотреть.

Я думаю, максимум, что может произойти за несколько лет, так это удвоение кол-ва записей в таблице #div. Ну а если бы там было 20000 записей, а не 200, то что нужно предусмотреть?
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34581053
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пересмотреть работу всего блока процедуры с участием этой таблицы. т.к. по ней идёт полный скан, и при 20000 записей именно она будет тормозить весь запрос. тут поддерживаю мнение MasterZiv: надо видеть всю ХП, ибо #div - результат некого другого запроса, и если этот другой запрос смотрит на таблицы с индексами, возможно будет смысл вообще отказаться от этой временной таблицы и 'вязать' напрямую. (это всего лишь предположение не зная содержания ХП)
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34581156
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как заставить
> применять вычисление селективности в хр?

Использовать в качестве параметров запросов параметры
процедуры. Но это не всегда надо, и не всегда помогает.

Т.е. если в том примере я не использовал бы переменные @rp_p, @eid
а только параметры процедуры (т.е вычислял бы их раньше и передавал
в процедуру, в качестве параметров), то запрос был бы оптимизирован
и выполнился быстро (с подключением индекса)?


И нужно ли всегда задавать
> индексы жестко в хр.процедуре в тексте запроса?

Нет, не всегда, а когда только план генерируется плохой.
Как в вашем случае. И нельзя вынести переменные в параметры
процедуры или это не помогает.
Posted via ActualForum NNTP Server 1.4

Как определить в большой хр. процедуре, где 1200 строк + вызов еще десятка других
хранимых процедур, для каких конструкций в хр. процедуре план генерируется плохой,
а для каких хороший?
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34581165
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rubber, я понял.
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34581420
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugeny_M пишет:

> Т.е. если в том примере я не использовал бы переменные @rp_p, @eid
> а только параметры процедуры (т.е вычислял бы их раньше и передавал
> в процедуру, в качестве параметров), то запрос был бы оптимизирован
> и выполнился быстро (с подключением индекса)?

Да, что-то типа того. НО это необходимое условие, не достаточное.
Если этого не сделать, то точно ничего не будет. А если сделать,
то возможно и будет браться индекс. Я почему и просил код,
чтобы посмотреть, откуда эти переменные идут.

> Как определить в большой хр. процедуре, где 1200 строк + вызов еще
> десятка других
> хранимых процедур, для каких конструкций в хр. процедуре план
> генерируется плохой,
> а для каких хороший?

Процедура работает медленно. Делаешь SET SHOWPLAN ON и
выполняешь ее. Смотришь планы. Ищешь плохие. находишь запросы,
исправляешь.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34581589
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Eugeny_M пишет:
> Как определить в большой хр. процедуре, где 1200 строк + вызов еще
> десятка других
> хранимых процедур, для каких конструкций в хр. процедуре план
> генерируется плохой,
> а для каких хороший?

Процедура работает медленно. Делаешь SET SHOWPLAN ON и
выполняешь ее. Смотришь планы. Ищешь плохие. находишь запросы,
исправляешь.
Posted via ActualForum NNTP Server 1.4

Я такой вариант пробовал :( Там такой листинг после выполнения процедуры ...
что просто просмотреть его, это нужно железное терпение. А тому, кто разберется,
вообще орден давать!
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34581632
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одна из возможных причин почему оптимизатор не хочет выбирать оптимальный план в хранимой процедуре в вашем селекте без хинта - это несоответствие типов параметров запроса и типов соответствующих полей в таблице. Например integer и smallint. Пожалуйста проверьте типы переменных @rp, @rp_p, @eid. В частности поэтому народ хотел видеть весь код ХП. Cчитаю что жестко прописывать индексы в запросах неправильно. Оптимизатор в ASE не такой уж и тупой
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34581796
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rcryoОдна из возможных причин почему оптимизатор не хочет выбирать оптимальный план в хранимой процедуре в вашем селекте без хинта - это несоответствие типов параметров запроса и типов соответствующих полей в таблице. Например integer и smallint. Пожалуйста проверьте типы переменных @rp, @rp_p, @eid. В частности поэтому народ хотел видеть весь код ХП. Cчитаю что жестко прописывать индексы в запросах неправильно. Оптимизатор в ASE не такой уж и тупой

Все переменны типа int. Правда в таблице поля описаны как zd_period (User Defined Datatypes), что соответствует int. Из-за того, что поле в таблице описано типа zd_period, а переменная объявлена типа zd_rp, но оба типа ссылаются на int, оптимизатор не выбирает оптимальный план?
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34581836
Eugeny_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Eugeny_M пишет:
> Как определить в большой хр. процедуре, где 1200 строк + вызов еще
> десятка других
> хранимых процедур, для каких конструкций в хр. процедуре план
> генерируется плохой,
> а для каких хороший?

Процедура работает медленно. Делаешь SET SHOWPLAN ON и
выполняешь ее. Смотришь планы. Ищешь плохие. находишь запросы,
исправляешь.
Posted via ActualForum NNTP Server 1.4

Без SET SHOWPLAN ON процедура работает 1 сек.
Ради интереса запустил эту хр.процедуру с SET SHOWPLAN ON.
Метелило 1 час ! Листинг занимает 17 Мб !

Ну всё! Всем огромное спасибо!
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34581969
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rcryo wrote:

> Одна из возможных причин почему оптимизатор не хочет выбирать
> оптимальный план в хранимой процедуре в вашем селекте без хинта - это
> несоответствие типов параметров запроса и типов соответствующих полей в
> таблице. Например integer и smallint.

А у самого оптимизатора типы привести ума не хватает ;)?

> Оптимизатор в ASE не такой уж и тупой

В свете вышесказанного - сомневаюсь .
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34582286
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема с оптимизатором, действительно, актуальная: наверное, он иногда знает больше чем вы :) , а иногда - наоборот.

В данном случае ('НА СЕЙЧАС') - это вариант. И... таки-да.
Работает? Быстро?
-Отлично! А вот теперь есть время читать мануал.
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34588843
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руководство по настройке производительности. Том 2. ;) (стр. 520 [и далее]:)

Указание индекса в запросе может помочь, если есть подозрение,
что оптимизатор выбирает не самый оптимальный план запроса.

Использовать эту возможность следует только после проверки, чтобы
быть уверенным в том, что запрос выполняется лучше с указанием
индекса. В случае включения индекса в запрос следует регулярно про-
верять, по-прежнему ли принудительно заданный план лучше, чем дру-
гие варианты, выбранные оптимизатором.
Кроме того, будущие версии Adaptive Server могут решить
проблемы, заставляющие вас принудительно указывать индексы, по-
этому после установки каждой новой версии проверяйте все запросы,
использующие принудительные планы выполнения.
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34589464
Maadox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Кроме того, будущие версии Adaptive Server могут решить
проблемы, заставляющие вас принудительно указывать индексы..."

Сплю и вижу, как SQL-сервер при джоине к таблице с клиентами по ФИО, Фёклу Иванову отбирает по индексу начинающемуся с полей "физ/юр лицо" и "имя", а Александра Редкофамильного по индексу начинающего с полей "пол" и "фамилия".
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34591155
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000А у самого оптимизатора типы привести ума не хватает ;)?
Хватает. Но на это может потребоваться время. Об этом и написано.
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34614241
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugeny_M пишет:

> Все переменны типа int. Правда в таблице поля описаны как zd_period
> (User Defined Datatypes), что соответствует int. Из-за того, что поле в
> таблице описано типа zd_period, а переменная объявлена типа zd_rp, но
> оба типа ссылаются на int, оптимизатор не выбирает оптимальный план?

Нет, главное чтобы базовые типы доменов были одинаковые. И с точностью
одинаковой. Но если современный ASE, то может это и не так важно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
    #34670844
guest88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eugeny_M
Как определить в большой хр. процедуре, где 1200 строк + вызов еще десятка других
хранимых процедур, для каких конструкций в хр. процедуре план генерируется плохой,
а для каких хороший?

set statistics io on
Простыня может получиться большая, но с ней легко работать. Надо просто найти самые большие total в logical reads.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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