powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Htlp! помогите новичку разобраться с оптимизацией
20 сообщений из 20, страница 1 из 1
Htlp! помогите новичку разобраться с оптимизацией
    #32132975
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть запрос, выполняется очень быстро (3 сек). При добавлении параметров group by и order by время выполнения увеличивается до 10 мин.
Как оптимизировать group by и opder by - для всех полей, по которым делается группировка и сортировка есть индексы.
А ситуация усугубляется тем, что в пакете несколько однотипных запросов и время выполнения пакета затягивается до 15 мин.
С чего лучше начать?
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32133012
_no_name_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начать надо с того, что написать запрос в форуме
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32133019
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще он достаточно большой, хотя опубликовать конечно не проблема.
А каких-то общих правил оптимизации предложений группировки и сортировки нет?
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32133040
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть тогда поможете разобраться с трассировкой? Что означает такое окончание файла трасиировки (по всему пакету):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
 ------- ------  -------- ---------- ---------- ---------- ----------  ----------
 
Parse         4        0 . 15         0 . 30            1            0            1             0 
Execute       5       17 . 66        26 . 19            0            0            4             1 
Fetch         0        0 . 00         0 . 00            0            0            0             0 
 ------- ------  -------- ---------- ---------- ---------- ----------  ----------
 
total         9       17 . 81        26 . 49            1            0            5             1 

Misses in library cache during parse:  4 
Misses in library cache during execute:  1 


OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
 ------- ------  -------- ---------- ---------- ---------- ----------  ----------
 
Parse       234        0 . 72         1 . 42            9            0            9             0 
Execute   44843       41 . 69       270 . 26        23442       728184        28508         26874 
Fetch     41328       93 . 28       774 . 57       108942      8888484           75         40292 
 ------- ------  -------- ---------- ---------- ---------- ----------  ----------
 
total     86405      135 . 69      1046 . 25       132393      9616668        28592         67166 

Misses in library cache during parse:  39 


Откуда такое кол-во рекурсивных вызовов и как с ними можно бороться (если нужно конечно)? Или все таки вам, уважаемые гуру, нужен запрос?
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32133766
new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
короче корешок тут такие дела
во первых наверно коряво написан запрос
и когда ты сначала его запрашиваешь он выбират к примеру первых 5-10 записей и все, а когда ты пишешь ORDER BY то он выбирает сначала все записи и потом начинает их сортировать и из-за это время просто увеличвивается до минут



тут надо запрос смотреть, индексы и все такое
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134363
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 New one
В этом случае может помочь скидывание результатов запроса в промежуточную таблицу и уже потом по ней группировка и сортировка?
Индексы есть по всем полям, по которым проходит группировка. Explain plan показывает что все ингдексы задействованы.
Там где я точно знаю, что выбирается более 50% записей индексы не используются - то есть судя по плану все верно :-(
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134370
new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно конечно и во временную таблицу, очень часто это помогает, но тут надо тебе оценить временные затраты на формирование данной таблицы, просто если записей достаточно много, то довольно длительной будет заполнение вр. таблицы (с формированием индексов) и т.д. может даже сначала придется грохать индексы перед вставкой потом их создавать тут короче надо смотреть так не глядя на реальное положение и не скажешь.
но лучше всего попробывать что нибудь поковырять в запросах, и уже если не поможет то тогда только таблицы хинты какие-нить использовать.
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134387
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запросы перековырены уже от и до. Косты снижены до 116. Вообще запрос выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
select 
		r.fd_anketa,
	    z.month_,
	    z.year_,
	    h.progr_,
	    u.sotr_,
	    sum(u.Sum_dogovor) Sum_dogovor
	from dogovors u,
	    (select *
	    from anketa r
	    where  r.type_anketa =  78 ) r,
	    (select * from history where progr1 in ('1','2','3','8')) h,
	    calendar z,
	    (select * from temp where temp_n =  161 ) rt
	where u.date_dogovors between rt.fd_temp and rt.td_temp
	    and (r.old_ != 'Y' or ( r.old_ = 'Y' and r.fd_anketa < rt.fd_temp))
	    and u.sotr_=r.sotr_
	    and u.date_dogovors between z.fd_calendar and z.td_calendar
	    and h.sotr_=u.sotr_
	    and h.year_=z.year_
  	    and h.month_=z.month_
	    and (z.fd_calendar between rt.fd_temp
		and rt.td_temp or td_calendar between rt.fd_temp and rt.td_temp)
	    and
	        (
	            ( rtrim(u.progr_) in ('1','2','3','8') and u.type_dogovors not in ( 11 , 5 ) )
	            or
	            ( rtrim(u.progr_) = '6'
	                and u.dogovor_ in
	                    (select dogovor_
	                    from factura
	                    where dogovor_ = u.dogovor_
	                        and progr_ = '6'
	                        and (inv_code in ('1.12','22.65','444.58')
	                            or inv_code like '3%.2')
	                    )
	            )
	            or
	            ( rtrim(u.progr_) = '3'
	                and u.type_dogovors in ( 11 , 5 )
	                and u.dogovor_ in
	                    (select distinct k.dogovor_
	                    from factura k, price_list c
	                    where k.dogovor_ = u.dogovor_
	                        and k.inv_code = c.inv_code and k.progr_ = c.progr_
	                        and k.skidka = c.skidka 
	                        and c.progr_ = '3' and c.dsc like '%2.6%'
	                    )
	            )
	        )
group by r.fd_anketa, z.month_, z.year_, h.progr_, u.sotr_
order by u.sotr_, z.year_, z.month_
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134392
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Klassika!
Ty uveren, chto tebe nugny vse eti "or"?
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134395
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К моему величайшему сожалению - да :((
может быть будет работать быстрее если их сделать union?
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134412
no name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может все эти "or" вынести в from как подзапрос к "dogovors"?
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134415
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изначально так и было - работает еще хуже
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134582
_no_name_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос такой, а что сильнее замедляет работу order или group by ? Без одного из них вернулась ли былая скорость?
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134589
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Замедляют одинаково.
То есть только группировка или только сортировка или обе вместе выполняются одно и тоже время
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134609
Седов А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
like '%2.6%' и обещал работать быстро ? помоему он полным перебором по таблице ходит. При том, что многие подзапросы кореллированные-врядле удастся оптимизировать. Я бы хранимую процедуру написал вместо запроса.
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134730
new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
короче если ты говоришь, что уже все перековырено и это выполняется около 10 минут, тогда делай временную таблицу или несколько таких таблиц с промежуточными вычислениями в них.
(можешь их чере триггеры заполнять)
и все я думаю будет ОК....
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134738
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Запросы перековырены уже от и до. Косты снижены до 116. Вообще запрос
>выглядит так:

опять гадание на кофейной гуще вместо рассмотрения плана выполнения запроса, статистики и параметров сессии (инстанса).
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134808
_no_name_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По-моему здесь все очевидно.Пусть группировка и сортировка происходит хоть по суппер индексам , но ведь они из разных таблиц - таким образом чтобы произвести сортировку надо проводить index range scan по каждой из таблиц, а потом пересекать результат. Так вот выход - или упростить запрос , так чтобы group by и order by использовали только столбцы одной таблицы , причем на них должен сущ. индекс, либо создавай темп. таблицу , столбцы которой индексируй по полям группировки.
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134969
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>либо создавай темп. таблицу , столбцы которой индексируй по полям группировки.
Спасибо, похоже это именно то, что было нужно.
...
Рейтинг: 0 / 0
Htlp! помогите новичку разобраться с оптимизацией
    #32134994
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>либо создавай темп. таблицу , столбцы которой индексируй по полям
>>группировки.
>Спасибо, похоже это именно то, что было нужно.

Неужели временные затраты на создание и индексирование временной таблицы будут меньше чем сортировка данных полученных в результате запроса? В чем тут выигрышь?
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Htlp! помогите новичку разобраться с оптимизацией
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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