Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Переменные и запросы / 12 сообщений из 12, страница 1 из 1
09.08.2005, 15:18
    #33207035
c0smic_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
Не могу понять в чем дело уже битый час сижу... Есть бальшой такой запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare
  @DateStart smalldatetime,
  @DateEnd smalldatetime

select
  @DateStart = '20050808',
  @DateEnd = '20050808'

/*
  тут идет много маленьких селектов,
  потом один большой селект на объединение
*/
Грабли в том, что данные переменные используются в запросе в двух десятках местах, как минимум... В данном случае запрос при выполнении повисает и по истечении некоторого интервала времени выдает таймаут... Если же напрямую прописать все даты, вместо переменных, прогон отчета занимает меньше 10 секунд...
Объясните мне в чем же все таки здесь хрущ, я плакаль...
Версия Sybase ASE 12.0.0.6/P/EBF
Заранее благодарю.
...
Рейтинг: 0 / 0
09.08.2005, 18:31
    #33207729
kolchanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
Проблема в том,
что в данном случае оптимизатор на этапе построения плана запроса
(перед выполнением) не знает значения переменных, и строит план запроса
исходя из своих преположений о них.
Об этом много говорится в Performance&Tuning в разделе описывающем оптимизацию хранимых процедур.

В качестве quick fix - либо используйте значения а не переменные,
либо оформите медленный запрос с виде хранимой процедуры с этими параметрами.

Ну и Performance&Tuning на сон грядущий.

С уважением,
Андрей Колчанов
...
Рейтинг: 0 / 0
11.08.2005, 07:36
    #33209470
c0smic_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
kolchanovПроблема в том,
что в данном случае оптимизатор на этапе построения плана запроса
(перед выполнением) не знает значения переменных, и строит план запроса
исходя из своих преположений о них.
Об этом много говорится в Performance&Tuning в разделе описывающем оптимизацию хранимых процедур.

В качестве quick fix - либо используйте значения а не переменные,
либо оформите медленный запрос с виде хранимой процедуры с этими параметрами.

Ну и Performance&Tuning на сон грядущий.

С уважением,
Андрей Колчанов

Спасибо, Андрей... И еще одна загадка оттуда же... Если в запросе указывать критерий сравнения для дат типа ">=" либо "<=", то он тоже повисает (опять же при использовании переменных) но стоит нам строго указать "=" все проходит на ура... Это связано тоже с тем же, с планом? Тогда есть ли смысл воспользоваться директивой "#M_FORCEPLAN_OFF"?
...
Рейтинг: 0 / 0
11.08.2005, 09:31
    #33209608
Litus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
ох, чую, чую Диасофт...
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
11.08.2005, 16:59
    #33211127
bumbastic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
c0smic_ , а в начале секции стоит #M_FORCEPLAN?
...
Рейтинг: 0 / 0
11.08.2005, 17:27
    #33211243
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
В ASE 12.5 много и плодотворно приходилось использовать хинты, в связи с природной "тупостью" АSE-шного оптимизатора. Особенно на запросах по интервалу дат. Еще конечно очень желательно обновить статистику.
...
Рейтинг: 0 / 0
12.08.2005, 02:20
    #33211846
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
c0smic_Если в запросе указывать критерий сравнения для дат типа ">=" либо "<=", то он тоже повисает (опять же при использовании переменных) но стоит нам строго указать "=" все проходит на ура... Это связано тоже с тем же, с планом?

Это связано видимо с тем, что ">=" и "=" - мягко говоря, немного разные операции, и они так легонечко вам семантику запроса-то меняют.
...
Рейтинг: 0 / 0
19.08.2005, 10:13
    #33224523
karitos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
Недавно наступал на подобные грабли, при несовпадении типов переменных запрос выполнялся около 30 мин, но стоило изменить тип переменных время сократилось до ~10 c.
Обычно такое происходит из-за несоответствия типов данных ....

Несоответствия типов данных приводят к проблемам с оптимизацией,
так как они не позволяют оптимизатору выбирать индекс. Наиболее часто
встречающиеся проблемы возникают по следующим причинам:
• из-за сравнений между целочисленными типами, int, smallint и tinyint;
• из-за сравнений между типами money и smallmoney;
• из-за сравнений между типами datetime и smalldatetime;
• из-за сравнений между типами numeric и decimal разной точности
и масштаба;
• из-за сравнений между типами numeric или decimal и столбцами
integer или money.

какие таблицы используются в запросе ?
...
Рейтинг: 0 / 0
19.08.2005, 11:45
    #33224806
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
c0smic_Спасибо, Андрей... И еще одна загадка оттуда же... Если в запросе указывать критерий сравнения для дат типа ">=" либо "<=", то он тоже повисает (опять же при использовании переменных) но стоит нам строго указать "=" все проходит на ура... Это связано тоже с тем же, с планом? Тогда есть ли смысл воспользоваться директивой "#M_FORCEPLAN_OFF"?
Ну это же коню понятно откуда ноги растут.
У вас селективность по дате высокая, поэтому индекс по конкретной дате используется всегда! А когда запрос по диапозону дат, то вполне возможно, что период будет большим и дешевле использовать сканирование, поэтому оптимизатор его и выбирают.
Внимательно перечитайте ответ kolchanov и особенно обратите внимание выделить "тяжелый" запрос в отдельную процедуру с конкретными параметрыми и все у вас будет хорошо.
...
Рейтинг: 0 / 0
19.08.2005, 12:47
    #33225094
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
karitosНедавно наступал на подобные грабли, при несовпадении типов переменных запрос выполнялся около 30 мин, но стоило изменить тип переменных время сократилось до ~10 c.
Обычно такое происходит из-за несоответствия типов данных ....


А какая версия сервера у вас была ?
...
Рейтинг: 0 / 0
19.08.2005, 15:57
    #33225700
karitos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
MasterZiv А какая версия сервера у вас была ?

ASE 12.0.0.6
...
Рейтинг: 0 / 0
25.08.2005, 10:30
    #33233326
c0smic_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные и запросы
Litusох, чую, чую Диасофт... Братья, блин почти... :)
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Переменные и запросы / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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