Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Экспоненциальный рост времени выполнения отчета  [new]
AntSol
Member

Откуда: СПБ
Сообщений: 60
Отцы приветствую.


Есть следующая проблема: скрипт считает среднее значение использования карт в течении определенной даты(фильтр). С какого то момента подсчет за месяц стал занимать очень много времени. Раньше час-два. Теперь сутки\полтора. Опытным путем установил, что за день считаем 5 секунд, за 5 дней 10 минут. За 15 дней 11 часов и тд...Я вот думаю может есть какая то проблема с пространством TEMP или ему надо добавить еще один REDO файлик. Можете что то посоветовать?
16 май 17, 12:39    [20484523]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
londinium
Member

Откуда: Киев
Сообщений: 1181
AntSol,
А есть все необходимые индексы?
16 май 17, 12:41    [20484532]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
Добрый Э - Эх
Guest
AntSol,

а мне думается что у вас там slow-by-slow построчная обработка в многократно вложенных друг в друга циклах.
16 май 17, 12:46    [20484564]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
AntSol,

То есть сначала предполагает угадать код, а потом куда уходит время.
Ждем телепатов.
16 май 17, 12:56    [20484621]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
AntSol
Member

Откуда: СПБ
Сообщений: 60
londinium,

С индексами все в порядке. Конечно попробую перестроить, но не думаю что причина в этом.
16 май 17, 13:02    [20484641]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
AntSol
Member

Откуда: СПБ
Сообщений: 60
dbms_photoshop,

Код чего? Запроса?
16 май 17, 13:03    [20484645]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
AntSol
Member

Откуда: СПБ
Сообщений: 60
Добрый Э - Эх,

Скрипт простой:


with mainselect as(
select t_data.*, division.code as dcode, operator.code as ocode
from t_data
join division on (division.id = t_data.id_division)
join operator on (operator.id = division.id_operator)
where t_data.kind in (16,17,34)
and nvl(t_data.card_series, t_data.new_card_series) in (11,20,21,30,36,40,50,60)
and t_data.date_of between TO_DATE('01.10.2016 00:00:00', 'dd.mm.yyyy hh24:mi:ss')
and TO_DATE('01.11.2016 00:00:00', 'dd.mm.yyyy hh24:mi:ss')
order by nvl(t_data.card_series, t_data.new_card_series), t_data.card_num
)
select nvl(ms.card_series, ms.new_card_series) as "серии", ms.card_num "Номер карты", COUNT(ms.id) "Среднее",
(SELECT COUNT(mainselect.id) from mainselect where dcode = 0001 and ms.card_num = mainselect.card_num) as "0001",
(SELECT COUNT(mainselect.id) from mainselect where dcode = 0101 and ms.card_num = mainselect.card_num) as "0101",
(SELECT COUNT(mainselect.id) from mainselect where dcode = 0102 and ms.card_num = mainselect.card_num) as "0102",
(SELECT COUNT(mainselect.id) from mainselect where dcode = 0103 and ms.card_num = mainselect.card_num) as "0103"
from mainSelect ms
group by nvl(ms.card_series, ms.new_card_series), ms.card_num
order by nvl(ms.card_series, ms.new_card_series), ms.card_num
16 май 17, 13:09    [20484681]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
Dshedoo
Member

Откуда:
Сообщений: 393
AntSol,

1) Условия из where перекинь в join:
select t_data.*, division.code as dcode, operator.code as ocode
from t_data
join division on (division.id = t_data.id_division) and  t_data.kind in (16,17,34)
and nvl(t_data.card_series, t_data.new_card_series) in (11,20,21,30,36,40,50,60) 


2) Order из with убирай.

3) (SELECT COUNT(mainselect.id) from mainselect where dcode = 0001 and ms.card_num = mainselect.card_num) as "0001",
(SELECT COUNT(mainselect.id) from mainselect where dcode = 0101 and ms.card_num = mainselect.card_num) as "0101",
(SELECT COUNT(mainselect.id) from mainselect where dcode = 0102 and ms.card_num = mainselect.card_num) as "0102",
(SELECT COUNT(mainselect.id) from mainselect where dcode = 0103 and ms.card_num = mainselect.card_num) as "0103"

заменяем на
sum(case when dcode = '0001' /*нет такого числа как ноль-ноль-ноль-один*/ then 1 else 0 as "0001",
sum(case when dcode = '0101' then 1 else 0 as "0101",
sum(case when dcode = '0102' then 1 else 0 as "0102",
sum(case when dcode = '0103' then 1 else 0 as "0103"
16 май 17, 13:27    [20484789]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Dshedoo
Условия из where перекинь в join
Просвети теперь как это отразиться на плане.

PS. Переписывание коррелированных скаляров в case - совет по делу.
16 май 17, 13:36    [20484870]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
AntSol
Member

Откуда: СПБ
Сообщений: 60
Возможно переписывание скрипта даст некоторый прирост производительности, но у меня все ощущение, что где то ему не хватает пространства....так не думаете?
16 май 17, 13:42    [20484901]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 652
AntSol,

посмотреть типы t_data.kind, t_data.card_series, t_data.new_card_series если они не number перевести in в строки (('16','17','34'))
16 май 17, 13:42    [20484902]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
AntSol
у меня все ощущение
Что-то вас много повылазило на форум в последнее время с ощущениями.
Использовать мозг и куда уходит время становится все менее популярным.
16 май 17, 13:45    [20484913]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
AntSol
Member

Откуда: СПБ
Сообщений: 60
MaximaXXL,

number
16 май 17, 13:47    [20484923]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 652
AntSol,

operator.code as ocode в дальнейшем не используется, может не надо добавлять таблицу
join operator on (operator.id = division.id_operator)
16 май 17, 13:48    [20484929]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 652
AntSol,

Я бы вообще переписал это чудо без with mainselect as(
16 май 17, 13:55    [20484969]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
Dshedoo
Member

Откуда:
Сообщений: 393
AntSol,

1) В with'е сразу определи nvl(ms.card_series, ms.new_card_series), причём лучше через case.

2) В with'e условие
 and nvl(t_data.card_series, t_data.new_card_series) in (11,20,21,30,36,40,50,60) 
замени на

and (t_data.card_series (11,20,21,30,36,40,50,60) or (t_data.card_seriesis null and  t_data.new_card_series in (11,20,21,30,36,40,50,60) )


3) COUNT(ms.id) замени на sum(1).
16 май 17, 14:00    [20484996]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
AntSol
Member

Откуда: СПБ
Сообщений: 60
Dshedoo,

в написании запросов я не очень, больше админю оракл пойду к разрабам тогда. Спасибо.
16 май 17, 14:08    [20485022]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4917
Блог
AntSol
Dshedoo,

в написании запросов я не очень, больше админю оракл пойду к разрабам тогда. Спасибо.
Админу неплохо было бы взять SQL Monitoring скрипта и глянуть на что время уходит. Я бы сильно подозревал, что резкий рост времени обусловлен вылезанием в Temp
16 май 17, 14:10    [20485033]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
AntSol
Member

Откуда: СПБ
Сообщений: 60
Alexander Ryndin,


Мое чутье говорит о том же. Да и TEMP у меня уже на краю. Просто не хочется сразу стопать БД и удалять его, создав новый. Хоть это и не сложно.
16 май 17, 14:14    [20485051]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
Q.Tarantino
Member [заблокирован]

Откуда: Где-то рядом...
Сообщений: 12015
AntSol
Просто не хочется сразу стопать БД и удалять его, создав новый.

а что это даст и зачем стопать БД???
16 май 17, 14:19    [20485077]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
AntSol
Member

Откуда: СПБ
Сообщений: 60
Q.Tarantino,


Мне казалось из mount или nomount необходимо делать. Хотя возможно переключить и так можно. Обычно стопал во избежание проблем...
16 май 17, 14:25    [20485118]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
AntSol
Member

Откуда: СПБ
Сообщений: 60
AntSol,

Ну и сделаю его побольше. Со стандартным развером в 30 гигов точно испытывал проблемы но при индексации
16 май 17, 14:26    [20485126]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4917
Блог
AntSol
AntSol,

Ну и сделаю его побольше. Со стандартным развером в 30 гигов точно испытывал проблемы но при индексации
Еще раз.
Админу неплохо было бы взять SQL Monitoring скрипта и глянуть на что время уходит. Я бы сильно подозревал, что резкий рост времени обусловлен вылезанием в Temp
16 май 17, 14:28    [20485146]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
AntSol
Member

Откуда: СПБ
Сообщений: 60
Alexander Ryndin,


Окей, попробую. Ни разу не использовал данный инструмент, так как кроме простейших запросов ничего не пишу.
16 май 17, 14:31    [20485166]     Ответить | Цитировать Сообщить модератору
 Re: Экспоненциальный рост времени выполнения отчета  [new]
Vladimir Filin
Member

Откуда: Москва
Сообщений: 110
AntSol,
Alexander Ryndin
... Я бы сильно подозревал, что резкий рост времени обусловлен вылезанием в Temp

Если вылезание в TEMP имеет место быть и не уйдёт после оптимизации, несколько доков для подумать/попробовать:
  • tablespace_group_clause for temporary tablespaces
  • Temporary tablespace group tips
  • Storage Management for OLAP (не совсем в тему, но почитать стоит)
    Oracle 11R2
    A tablespace group lets you assign multiple temporary tablespaces to a single user and increases the addressability of temporary tablespaces.
  • 16 май 17, 14:40    [20485223]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
    Все форумы / Oracle Ответить