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

Код: 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
04.04.2003, 15:49
    #32133766
new one
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
короче корешок тут такие дела
во первых наверно коряво написан запрос
и когда ты сначала его запрашиваешь он выбират к примеру первых 5-10 записей и все, а когда ты пишешь ORDER BY то он выбирает сначала все записи и потом начинает их сортировать и из-за это время просто увеличвивается до минут



тут надо запрос смотреть, индексы и все такое
...
Рейтинг: 0 / 0
07.04.2003, 09:45
    #32134363
Новичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
2 New one
В этом случае может помочь скидывание результатов запроса в промежуточную таблицу и уже потом по ней группировка и сортировка?
Индексы есть по всем полям, по которым проходит группировка. Explain plan показывает что все ингдексы задействованы.
Там где я точно знаю, что выбирается более 50% записей индексы не используются - то есть судя по плану все верно :-(
...
Рейтинг: 0 / 0
07.04.2003, 09:56
    #32134370
new one
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
можно конечно и во временную таблицу, очень часто это помогает, но тут надо тебе оценить временные затраты на формирование данной таблицы, просто если записей достаточно много, то довольно длительной будет заполнение вр. таблицы (с формированием индексов) и т.д. может даже сначала придется грохать индексы перед вставкой потом их создавать тут короче надо смотреть так не глядя на реальное положение и не скажешь.
но лучше всего попробывать что нибудь поковырять в запросах, и уже если не поможет то тогда только таблицы хинты какие-нить использовать.
...
Рейтинг: 0 / 0
07.04.2003, 10:15
    #32134387
Новичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
Запросы перековырены уже от и до. Косты снижены до 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
07.04.2003, 10:23
    #32134392
Oracle X-pert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
Klassika!
Ty uveren, chto tebe nugny vse eti "or"?
...
Рейтинг: 0 / 0
07.04.2003, 10:25
    #32134395
Новичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
К моему величайшему сожалению - да :((
может быть будет работать быстрее если их сделать union?
...
Рейтинг: 0 / 0
07.04.2003, 10:44
    #32134412
no name
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
Может все эти "or" вынести в from как подзапрос к "dogovors"?
...
Рейтинг: 0 / 0
07.04.2003, 10:45
    #32134415
Новичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
Изначально так и было - работает еще хуже
...
Рейтинг: 0 / 0
07.04.2003, 12:48
    #32134582
_no_name_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
Вопрос такой, а что сильнее замедляет работу order или group by ? Без одного из них вернулась ли былая скорость?
...
Рейтинг: 0 / 0
07.04.2003, 12:53
    #32134589
Новичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
Замедляют одинаково.
То есть только группировка или только сортировка или обе вместе выполняются одно и тоже время
...
Рейтинг: 0 / 0
07.04.2003, 13:02
    #32134609
Седов А.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
like '%2.6%' и обещал работать быстро ? помоему он полным перебором по таблице ходит. При том, что многие подзапросы кореллированные-врядле удастся оптимизировать. Я бы хранимую процедуру написал вместо запроса.
...
Рейтинг: 0 / 0
07.04.2003, 14:17
    #32134730
new one
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
короче если ты говоришь, что уже все перековырено и это выполняется около 10 минут, тогда делай временную таблицу или несколько таких таблиц с промежуточными вычислениями в них.
(можешь их чере триггеры заполнять)
и все я думаю будет ОК....
...
Рейтинг: 0 / 0
07.04.2003, 14:25
    #32134738
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Htlp! помогите новичку разобраться с оптимизацией
>Запросы перековырены уже от и до. Косты снижены до 116. Вообще запрос
>выглядит так:

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

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


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