Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
Время работы кода SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5). Почему это возможно, что может влиять на это? В хранимой процедуре на сервере ASE 12.5 создается курсор, открывается и затем обрабатываются результаты. Время выполнения (создание курсора и открытие) составляет порядка 9 сек (запускаю процедуру в Advantage). При выполнении тех же действий в Advantage время выполнения составляет порядка 1 сек. Из-за чего может быть такая разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 11:18 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
Выполните SP с опцией with recompile ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 11:26 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
Eugeny_M пишет: > Время работы кода SQL в хр.процедуре и в Advantage отличаются на порядок > (ASE 12.5). Код давайте, будут советы конкретные. > Почему это возможно, что может влиять на это? Запросы в процедурах и вне процедур оптимизируются немного по-разному. Связано это с тем, что оптимизатор не знает значений переменных, которые выступают в качестве параметров запросов в процедурах и не применяет вычисление селективности для этого конкретного значения. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 11:28 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
Вот код: 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 - разницы никакой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 11:45 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
morisВыполните SP с опцией with recompile Спасибо, проверил - не влияет на время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 11:46 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
конечно, надо бы посмотреть на запрос. У меня в большинстве случаев вопрос решается указанием индекса "в лоб" в ХП. Т.е. смотришь план запроса в адвантаже и в ХП прописываешь индексы. Но это не панацея, решение зависит от запроса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 11:51 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
Да, тут или хинты по использованию индексов надо или использовать абстрактый план. Чтобы АП не писать самому, (утомительно) захватить АП c запроса выполняемого в Advantage, а потом добавить ключевое слово plan после запроса в SP и прописать захваченный ранее АП запрос получиться типа такого: select avg(price) from titles plan " ( plan ( i_scan type_price_ix titles ) ( ) )" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 11:57 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
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 показывает адантаж? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 12:03 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 12:10 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
попробуй перекомпилить процу с хинтом 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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 12:16 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
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) Спасибо, меньше секунды! Вопрос - насколько часто Вы используете принудительное указание индексов в запросах? Мне говорили, что это не рекомендуется, так как при изменении кол-ва данных выполнение запросов может резко замедлиться? А если изменится индексное выражение, добавят в начало новое поле? Или требовать чтобы индексы не меняли, а создавали новый с теми же полями и + новым полем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 12:44 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
MasterZiv Eugeny_M пишет: > Время работы кода SQL в хр.процедуре и в Advantage отличаются на порядок > (ASE 12.5). Код давайте, будут советы конкретные. > Почему это возможно, что может влиять на это? Запросы в процедурах и вне процедур оптимизируются немного по-разному. Связано это с тем, что оптимизатор не знает значений переменных, которые выступают в качестве параметров запросов в процедурах и не применяет вычисление селективности для этого конкретного значения. Posted via ActualForum NNTP Server 1.4 Код я дал. Какие можете дать советы, как новичку. Как заставить применять вычисление селективности в хр? И нужно ли всегда задавать индексы жестко в хр.процедуре в тексте запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 12:48 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
Eugeny_M пишет: Всю процедуру надо, весь код. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 12:52 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
поэтому и говорю - "это не панацея". Изменение количества данных может замедлить время отработки, для таких вариантов есть разные 'лекарства' от UPDATE STATISTICS до REORG (если схема блокировки не ALL PAGES) и т.п. [имхо: чтоб база продуктивно работала за ней нужно постоянно "следить" - периодически выполнять профилактику]. А что касается изменения структуры (не важно таблиц или индексов) - так извините, в таком случае - с процедур нужно тоже "смахивать пыль" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 12:56 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
Eugeny_M пишет: > Вопрос - насколько часто Вы используете принудительное указание индексов > в запросах? Процентах в 20. Если запрос не оптимизируется самостоятельно сервером. > Мне говорили, что это не рекомендуется, так как при изменении кол-ва > данных выполнение запросов может резко замедлиться? Причина такой рекомендации в том, что люди часто не знают последствий указаний хинтов. Не знают, что делают, короче. Если вы знаете и тщательно все проверили - то ничего плохого в этом нет. > А если изменится индексное выражение, добавят в начало новое поле? То надо переписывать запрос. Убирать хинт, добавлять другой. > Или требовать чтобы индексы не меняли, а создавали новый с теми же > полями и + новым полем? Конечно. Или пусть только в конец новые поля добавляют. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 12:57 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
Eugeny_M пишет: > Код я дал. Это не код. Это один запрос. Там ничего не видно. Как заставить > применять вычисление селективности в хр? Использовать в качестве параметров запросов параметры процедуры. Но это не всегда надо, и не всегда помогает. И нужно ли всегда задавать > индексы жестко в хр.процедуре в тексте запроса? Нет, не всегда, а когда только план генерируется плохой. Как в вашем случае. И нельзя вынести переменные в параметры процедуры или это не помогает. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 12:59 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
Rubberпоэтому и говорю - "это не панацея". Изменение количества данных может замедлить время отработки, для таких вариантов есть разные 'лекарства' от UPDATE STATISTICS до REORG (если схема блокировки не ALL PAGES) и т.п. [имхо: чтоб база продуктивно работала за ней нужно постоянно "следить" - периодически выполнять профилактику]. А что касается изменения структуры (не важно таблиц или индексов) - так извините, в таком случае - с процедур нужно тоже "смахивать пыль" :) Спасибо! Почитаю про UPDATE STATISTICS и REORG. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 13:27 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
MasterZiv Eugeny_M пишет: > Код я дал. Это не код. Это один запрос. Там ничего не видно. Весь код занимает около 4 страниц. Меня интересовал тот код, который тормозил. Как заставить > применять вычисление селективности в хр? Использовать в качестве параметров запросов параметры процедуры. Но это не всегда надо, и не всегда помогает. Т.е если в том примере я не использовал бы переменные @rp_p, @eid а только параметры процедуры (т.е вычислял бы их раньше и передавал в процедуру, в качестве параметров), то запрос был бы оптимизирован и выполнился быстро (с подключением индекса)? И нужно ли всегда задавать > индексы жестко в хр.процедуре в тексте запроса? Нет, не всегда, а когда только план генерируется плохой. Как в вашем случае. И нельзя вынести переменные в параметры процедуры или это не помогает. Posted via ActualForum NNTP Server 1.4 Как определить в большой хр. процедуре, где 200 строк + вызов еще десятка других хранимых процедур, для каких конструкций в хр. процедуре план генерируется плохой, а для каких хороший? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 13:37 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
почитайте :) а в указанном запросе производительность будет снижаться при увеличении количества записей в таблице #div, так что если такое предусматривается - именно в этой части надо менять запрос уже сейчас... удачи ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 13:37 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
Eugeny_M пишет: > Весь код занимает около 4 страниц. Меня интересовал тот код, который > тормозил. Ну и давай . 8 килобайт-то всего. Ну или выкинь все после этого запроса. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 13:39 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
Rubber пишет: > Изменение количества данных может замедлить время отработки, для таких > вариантов есть разные 'лекарства' от UPDATE STATISTICS до REORG (если При чем здесь это-то? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 13:40 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 13:44 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
> При чем здесь это-то? это к в вопросу "Мне говорили, что это не рекомендуется, так как при изменении кол-ва данных выполнение запросов может резко замедлиться?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 13:45 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
> Вы имеете ввиду такой вариант: > 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. если, к примеру, оно перевалит за пару десятков тысяч, то уже сейчас можно это предусмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 13:50 |
|
||
|
Время работы SQL в хр.процедуре и в Advantage отличаются на порядок (ASE 12.5)
|
|||
|---|---|---|---|
|
#18+
MasterZiv Eugeny_M пишет: > Весь код занимает около 4 страниц. Меня интересовал тот код, который > тормозил. Ну и давай . 8 килобайт-то всего. Ну или выкинь все после этого запроса. Posted via ActualForum NNTP Server 1.4 Я ошибся, не 4 страницы, там 54 кб - более 1200 строк. Выкладывать всё, зачем? Не хочу захламлять ветку и сервер. Или вы хотите стиль написания запросов посмотреть? Код писал не я! Что он делает без поллитра не разберешься :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 13:56 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=34580433&tid=2011998]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 435ms |

| 0 / 0 |
