Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с планом запроса в IQ 12.7 / 10 сообщений из 10, страница 1 из 1
21.04.2010, 15:32
    #36590425
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с планом запроса в IQ 12.7
Всем день добрый. Столкнулся с такой интересной ситуацией.
Вводные данные
Код: plaintext
1.
2.
@@version
'Sybase IQ/12.7.0/080707/P/ESD 5/Enterprise Linux64 - amd64,Opteron64,X86_64/2.4.21-27.0.1.ELsmp/64bit/2008-07-07 14:27:26'

Запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select p.operday_month,p.operday_year,
            count(*) as count_pay --,
            --sum(p.pb_total_sum) as 'sum'
from bpl.payment as p   
where 
p.pt_pkey =  1  and 
p.pb_storno =  0  and 
p.pb_commission =  0  and 
p.pb_state <> 'P' and 
p.operday_year in( 2009 , 2010 )
group by p.operday_month,p.operday_year 
order by p.operday_month,p.operday_year

Выполняется за пару секунд. План красивый, все условия отбора в плане есть. План прилагаю.
...
Рейтинг: 0 / 0
21.04.2010, 15:35
    #36590439
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с планом запроса в IQ 12.7
Разремливаю сумму - время улетает - секунд за 20
Запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select p.operday_month,p.operday_year,
            count(*) as count_pay ,
            sum(p.pb_total_sum) as 'sum'
from bpl.payment as p   
where p.pt_pkey =  1  and p.pb_storno =  0  and p.pb_commission =  0  and p.pb_state <> 'P' and p.operday_year in( 2009 , 2010 )
group by p.operday_month,p.operday_year 
order by p.operday_month,p.operday_year


В плане пропадают условия выборки (что удивительно). Плюс появляется юнион.
...
Рейтинг: 0 / 0
21.04.2010, 15:41
    #36590453
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с планом запроса в IQ 12.7
С чем может быть связано такое? Раньше никогда такого разделения запроса с юнионом не замечал.
Индекс по полю агрегирования есть (HG)
Запрос вроде весьма простой.
И не понятно куда могут пропадать условия из плана. Иногда при выполнении они всеже отображаются, в большинстве случаев - нет.
Была мысль что чтото с самими условиями отбора
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select p.operday_month,p.operday_year,
            count(*) as count_pay ,
            sum(p.pb_total_sum) as 'sum'
from bpl.payment as p   
where 
p.pt_pkey =  1  and 
p.pb_storno =  0  and 
--p.pb_commission = 0 and 
p.pb_state <> 'P' --and 
--p.operday_year in(2009,2010)
group by p.operday_month,p.operday_year 
order by p.operday_month,p.operday_year

Вот этот запрос отрабатывает раза в два быстрее (хотя в нем по идее лопатится почти в два раза больше записей). И в плане - никакого юниона, все просто и в рядочек.
Дропнул и пересоздал индексы по этим двум полям - эффекта не дало..

Что это может быть?
...
Рейтинг: 0 / 0
21.04.2010, 17:05
    #36590714
Проблема с планом запроса в IQ 12.7
MichaelTim,

Попробуйте создать HNG индекс на pb_total_sum.
...
Рейтинг: 0 / 0
21.04.2010, 17:38
    #36590781
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с планом запроса в IQ 12.7
Сделал
Код: plaintext
CREATE HNG INDEX "HNG_p_pb_total_sum" ON "BPL"."payment" ( pb_total_sum);

Запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select p.operday_month,p.operday_year,
            count(*) as count_pay ,
            sum(p.pb_total_sum) as 'sum'
from bpl.payment as p   
where 
p.pt_pkey =  1  and 
p.pb_storno =  0  and 
p.pb_commission =  0  and 
p.pb_state <> 'P' and 
p.operday_year in( 2009 , 2010 )
group by p.operday_month,p.operday_year 
order by p.operday_month,p.operday_year

Ничего не изменилось. Время выполнения секунд 25
План в аттаче.
...
Рейтинг: 0 / 0
22.04.2010, 10:15
    #36591674
guest_565654757
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с планом запроса в IQ 12.7
Скорее всего это условие приводит к такому результату
MichaelTim
Код: plaintext
1.
2.
 
p.operday_year in( 2009 , 2010 )


Попробуйте p.operday_year>=2009
...
Рейтинг: 0 / 0
22.04.2010, 10:35
    #36591724
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с планом запроса в IQ 12.7
Ничего не изменилось. Время выполнения около 37 секунд.
План в аттаче
...
Рейтинг: 0 / 0
22.04.2010, 15:56
    #36592682
guest_565654757
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с планом запроса в IQ 12.7
MichaelTim,

Так, с UNION вроде понял - надо почитать про опции MAX_QUERY_PARALLELISM и PARALLEL_GBH_UNITS. В кратце, оптимизатор запросы с GROUP BY может разбивать на куски по-умолчанию по количеству процессоров и в зависимости от количества пользователей. Но не всегда это оптимизирует время исполнения.
Можно попробовать SET TEMPORARY OPTION PARALLEL_GBH_UNITS = 1 перед запросом - должен получиться без UNION-а.
...
Рейтинг: 0 / 0
22.04.2010, 17:59
    #36593053
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с планом запроса в IQ 12.7
Да, выставил - пошло без юнионов. Скорость - 4 секунды примерно. Вернул опцию в дефолт (0) - 23-24 секунды. И юнион с тремя частями.
Когда ушел юнион - сразу в плане появились Condition.
Неужели параллелизм запросов в случае группировки - это такое зло? Или может в сервере чтото не так настроено? Или недостроено
...
Рейтинг: 0 / 0
29.04.2010, 17:22
    #36605785
Andrejs Pasnevs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с планом запроса в IQ 12.7
авторИли может в сервере чтото не так настроено? Или недостроено
А сколько памяти у Вашего Linux сервера? Какие значения -iqmc/-iqtc выставлены в .cfg файле IQ сервера?
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с планом запроса в IQ 12.7 / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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