powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Переменные и запросы
12 сообщений из 12, страница 1 из 1
Переменные и запросы
    #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
Переменные и запросы
    #33207729
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в том,
что в данном случае оптимизатор на этапе построения плана запроса
(перед выполнением) не знает значения переменных, и строит план запроса
исходя из своих преположений о них.
Об этом много говорится в Performance&Tuning в разделе описывающем оптимизацию хранимых процедур.

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

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

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

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

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

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

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

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

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

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


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

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


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