powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Низкая загрузка ЦП ораклом. не выше 25% всегда.
105 сообщений из 105, показаны все 5 страниц
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39456930
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема вероятно противоположная обычной.
Оракл на сервере отказывается загружать процессор выше 25%
Любой тяжелый запрос не может нагрузить процессор,
сижу по 30 минут и жду выполнения запроса
при этом загрузка ЦП в диспетчере задач не поднимается выше 25%.
такое ощущение что где-то жёстко прописана эта планка.

сервер на базе xeon e5606, физически установлен один из двух возможных процессоров.
тоесть в наличии имеется 4 ядра
память 24 Гб
ось 2008 R2
Oracle Database 11g Release 11.2.0.1.0 - 64bit
объём базы слегка меньше 100 Гб

Куда копать?
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39456936
пара ллель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_myp,

запусти еще 10 запросов.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39456955
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_myp,
100%/4=?
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39456973
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin,

так и что делать? есть варианты как-то заставить оракл использовать несколько ядер?
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39456975
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пара ллель,

если запустить два клиента и в каждом клиенте запустить что-то тяжёлое, то суммарная загрузка выше 25%.
четырьмя клиентами поднял суммарную загрузку под 70%
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39456981
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на сервере крутится Global-EAM, система управления графиками работ.
я пытаюсь понять, это изначальная база данных такая, что она не будет работать сразу на всех ядрах, или это сервер неправильно сконфигурирован.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39456987
Фотография Jebrail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_mypПроблема вероятно противоположная обычной.
Оракл на сервере отказывается загружать процессор выше 25%
Любой тяжелый запрос не может нагрузить процессор,
сижу по 30 минут и жду выполнения запроса
при этом загрузка ЦП в диспетчере задач не поднимается выше 25%.
такое ощущение что где-то жёстко прописана эта планка.

сервер на базе xeon e5606, физически установлен один из двух возможных процессоров.
тоесть в наличии имеется 4 ядра
память 24 Гб
ось 2008 R2
Oracle Database 11g Release 11.2.0.1.0 - 64bit
объём базы слегка меньше 100 Гб

Куда копать?
Копать в сторону от процесора .

Очевидно что 30 минут ждешь ты не процессор а что то другое, чтение скорее всего . План запроса посмотри же .
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39456988
Фотография Jebrail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или Viewing Database Resource Manager Configuration and Status , что маловероятно .
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39457000
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XE ?
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39457046
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уже спрашивали про нагрузку проца
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39457100
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_mypна сервере крутится Global-EAM, система управления графиками работ
Обратиться в службу поддержки данной системы.
Вроде же логично?

Ну или решать проблему самому
lonely_myp...сижу по 30 минут и жду выполнения запроса ...
Куда копать?

Тут как всегда, 2-а решения.

1) Аппаратное
все дело в скорости электронов
они просто медленно в процессоре двигаются

нужно купить линейный ускоритель и запитать компьютер от него - более быстрые электроны, быстрее выполняются запросы

странно, что еще производители серверов и источников питания этот рынок не освоили (((

2) Программное, нужно настроить Oracle

в файле init.ora есть недокументированный параметр
__fast=true
нужно его включить. К сожалению, его название от версии к версии и от компьютера к компьютеру меняется ((( Т.ч. может потребоваться пригласить специалиста, который сможет выяснить, как данный параметр точно называется
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39457122
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_mypна сервере крутится Global-EAM, система управления графиками работ.
я пытаюсь понять, это изначальная база данных такая, что она не будет работать сразу на всех ядрах, или это сервер неправильно сконфигурирован.

25% - нагрузка одного ядра или всей системы?

Если нужно быстро выполнить один запрос, используя все ресурсы компа, и узким местом является именно CPU (что далеко не факт, нужно смотреть план и ожидания запроса), то некоторые операторы можно распараллелить, за это отвечает "parallel query option", но данная опция входит только Oracle Enterprise Edition (У Вас какая лицензия?)

Что решить эти задачи, нужны знания
так что предлагаю решать задачи по мере поступления:
1) Определить чем занимается система (ключевые слова: AWR report (EE) или utlbstat/utlestat (SE))
2) Получить план запроса и посмотреть возможна ли оптимизация
3) Принять решение, нужно ли использовать PQ
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39460284
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevОбратиться в службу поддержки данной системы.
Вроде же логично?вполне
разработчик сказал что наша БД выросла раз в 10 больше чем они могли представить.
поэтому они согласны с тем что всё может тормозить но ничем помочь не могут, никто не рассчитывал на такой объём данных.
мы единственный клиент с таким объёмом
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39460317
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin25% - нагрузка одного ядра или всей системы?
загрузка всей системы постоянно 25%, а по ядрам загрузка разная и постоянно прыгает.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39460320
Дерзкий Джоин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диск у вас дрищевый значит.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39460447
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_mypVadim Lejnin25% - нагрузка одного ядра или всей системы?
загрузка всей системы постоянно 25%, а по ядрам загрузка разная и постоянно прыгает.
не верю: 20500541
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39460452
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejninlonely_mypзагрузка всей системы постоянно 25%, а по ядрам загрузка разная и постоянно прыгает.не верю:А с чего бы это процессу, потребляющему 100% ядра, закрепляться за одним ядром?
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39461717
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дерзкий ДжоинДиск у вас дрищевый значит.
был, очередь изредка выше 1 была, поставили SSD, очередь диска около нуля, на глаз разницы не видно.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39461723
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На картинке выше - результат работы 3х минутного селекта из базы.
общая загрузка ровно 25% все 3 минуты страдания, после выполнения падает в район нуля.

я был бы супер рад если бы там была загрузка 100% и запрос длился 45 секунд.
но где-то явно проблема (помимо генетических)
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39461746
lonely_myp, alter table xxx parallel 8; alter system set parallel_max_servers=8; alter system set parallel_servers_target=8;
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39461830
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_mypя был бы супер рад если бы там была загрузка 100% и запрос длился 45 секунд.
но где-то явно проблема (помимо генетических)В последнем ты, скорее всего, заблуждаешься. Не понимая базовых вещей. И, зачем-то, распускаешь слюни в форум. Не имея возможности включить мозг.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39461847
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_myp,

Пока не покажешь отчет oracle что там у тебя происходит, гадать бесполезно
Поверим что ты не разобрался из-за неопытности (Но прочитать что такое SMP
Симметричная мультипроцессорность — Википедия все равно придется)
Для тебя важно, что Oracle - продукт изначально многопользовательский, и каждый запрос выполняет ровно один процесс, чтобы обработать как можно больше пользователей (если не указано другое)

Получить отчет о здоровье Oracle:
Если у тебя Oracle EE, можешь попробовать получить отчет через sql developer (он бесплатный)
Нужно только зарегистрироваться на oracle.com

Качаешь вместе с JDK (так проще устанавливать)
Вкладка DBA
Добавляешь Соединение
Perfomance
Automatic Diagnostic Monitor -> ADDM Report - Save report
И
AWR -

Но для одиночного запуска получить адекватную информацию трудно
Поэтому перед запуском
Perfomance -> snapshot -> правая кнопка мыши -> create snapshot
Запуск select
Perfomance -> snapshot -> правая кнопка мыши -> create snapshot
AWR -> выбираешь два последних Start ID - End Id
Кнопка Generate Report (Зеленый треуголник) или Ctrl-G
Save Report (дискетка)

Полученные файлы (не screenshot) пакуешь и прикладываешь
получаешь отчет

Если Oracle SE ( или XE)
то
Код: plsql
1.
2.
sqlplus  system/password@host/service_name
SQL> @?/rdbms/admin/utlbstat


Из другой сессии запускаешь свой отчет

По окончанию в первой сессии:
Код: plsql
1.
SQL> @?/rdbms/admin/utlestat



Результат report.txt
пакуешь и прикладываешь сюда

Это как в больнице, пока кровь/мочу не сдашь, болезнь точно не определят.
Либо обращайся к экстрасенсам
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39463375
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin,

Готово =)
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39463481
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_myp,

standard edition, запрос нагружает одно ядро из четырех, итого 25%. так и должно быть.
один запрос в тории мог быть распараллелен, если были бы у таблиц были бы партиции и EE edition. Лучше смотри что за план у запроса, что он по 30 минут работает, база крошечная, в tablespace users 45G, явно кривой план запроса.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39463597
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_myp,
Отчет уже прокомментировали
Oracle честно лопатит, то что Вы попросили, дисковых ожиданий нет, загружен только процессор

То что (возможно) не оптимально, то у Вас:

1) Статистика для cost-base собрана и актуальна?
2) Версия сервера сырая и не пропатчена
3) "грамотно" написанный простейший запрос, может полностью загрузить самый мощный сервер

Осталось показать запрос и explain plan
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39463731
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запрос...
вот "маленький" запрос на 3 минуты.
выполняется при открытии окна с перечнем бригад и графиком работ за выбранный период(месяц).
то есть юзер нажимает кнопку "открыть" и может идти курить, а если за 3 месяца открыть, то может ещё в магазин сбегать.
Код: plsql
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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
select  *
from (select a.idObject id
      ,a.nShiftNumber
      ,a.idDepartment
      ,b.sDepartmentCode sDep
      ,c.slname||nvl2(c.smidname||c.sfname,' ','')||substr(c.sfname,1,1)
       ||nvl2(c.sfname,'.','')||substr(c.smidname,1,1)||nvl2(c.smidname,'.','') sName
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('01.05.2017','dd.mm.yyyy')) as "nManHour[1]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('01.05.2017','dd.mm.yyyy')) as "sWorks[1]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('02.05.2017','dd.mm.yyyy')) as "nManHour[2]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('02.05.2017','dd.mm.yyyy')) as "sWorks[2]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('03.05.2017','dd.mm.yyyy')) as "nManHour[3]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('03.05.2017','dd.mm.yyyy')) as "sWorks[3]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('04.05.2017','dd.mm.yyyy')) as "nManHour[4]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('04.05.2017','dd.mm.yyyy')) as "sWorks[4]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('05.05.2017','dd.mm.yyyy')) as "nManHour[5]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('05.05.2017','dd.mm.yyyy')) as "sWorks[5]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('06.05.2017','dd.mm.yyyy')) as "nManHour[6]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('06.05.2017','dd.mm.yyyy')) as "sWorks[6]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('07.05.2017','dd.mm.yyyy')) as "nManHour[7]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('07.05.2017','dd.mm.yyyy')) as "sWorks[7]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('08.05.2017','dd.mm.yyyy')) as "nManHour[8]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('08.05.2017','dd.mm.yyyy')) as "sWorks[8]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('09.05.2017','dd.mm.yyyy')) as "nManHour[9]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('09.05.2017','dd.mm.yyyy')) as "sWorks[9]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('10.05.2017','dd.mm.yyyy')) as "nManHour[10]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('10.05.2017','dd.mm.yyyy')) as "sWorks[10]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('11.05.2017','dd.mm.yyyy')) as "nManHour[11]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('11.05.2017','dd.mm.yyyy')) as "sWorks[11]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('12.05.2017','dd.mm.yyyy')) as "nManHour[12]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('12.05.2017','dd.mm.yyyy')) as "sWorks[12]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('13.05.2017','dd.mm.yyyy')) as "nManHour[13]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('13.05.2017','dd.mm.yyyy')) as "sWorks[13]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('14.05.2017','dd.mm.yyyy')) as "nManHour[14]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('14.05.2017','dd.mm.yyyy')) as "sWorks[14]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('15.05.2017','dd.mm.yyyy')) as "nManHour[15]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('15.05.2017','dd.mm.yyyy')) as "sWorks[15]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('16.05.2017','dd.mm.yyyy')) as "nManHour[16]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('16.05.2017','dd.mm.yyyy')) as "sWorks[16]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('17.05.2017','dd.mm.yyyy')) as "nManHour[17]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('17.05.2017','dd.mm.yyyy')) as "sWorks[17]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('18.05.2017','dd.mm.yyyy')) as "nManHour[18]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('18.05.2017','dd.mm.yyyy')) as "sWorks[18]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('19.05.2017','dd.mm.yyyy')) as "nManHour[19]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('19.05.2017','dd.mm.yyyy')) as "sWorks[19]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('20.05.2017','dd.mm.yyyy')) as "nManHour[20]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('20.05.2017','dd.mm.yyyy')) as "sWorks[20]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('21.05.2017','dd.mm.yyyy')) as "nManHour[21]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('21.05.2017','dd.mm.yyyy')) as "sWorks[21]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('22.05.2017','dd.mm.yyyy')) as "nManHour[22]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('22.05.2017','dd.mm.yyyy')) as "sWorks[22]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('23.05.2017','dd.mm.yyyy')) as "nManHour[23]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('23.05.2017','dd.mm.yyyy')) as "sWorks[23]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('24.05.2017','dd.mm.yyyy')) as "nManHour[24]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('24.05.2017','dd.mm.yyyy')) as "sWorks[24]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('25.05.2017','dd.mm.yyyy')) as "nManHour[25]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('25.05.2017','dd.mm.yyyy')) as "sWorks[25]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('26.05.2017','dd.mm.yyyy')) as "nManHour[26]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('26.05.2017','dd.mm.yyyy')) as "sWorks[26]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('27.05.2017','dd.mm.yyyy')) as "nManHour[27]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('27.05.2017','dd.mm.yyyy')) as "sWorks[27]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('28.05.2017','dd.mm.yyyy')) as "nManHour[28]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('28.05.2017','dd.mm.yyyy')) as "sWorks[28]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('29.05.2017','dd.mm.yyyy')) as "nManHour[29]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('29.05.2017','dd.mm.yyyy')) as "sWorks[29]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('30.05.2017','dd.mm.yyyy')) as "nManHour[30]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('30.05.2017','dd.mm.yyyy')) as "sWorks[30]"
      ,EAM_SetResponsible.GetManHour(a.idObject,to_date('31.05.2017','dd.mm.yyyy')) as "nManHour[31]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('31.05.2017','dd.mm.yyyy')) as "sWorks[31]"
      ,EAM_SetResponsible.GetAllManHour(a.idObject,:filter$Flt_dBegin,:filter$Flt_dEnd) as nAllManHour
      ,EAM_SetResponsible.GetAllQty(a.idObject,:filter$Flt_dBegin,:filter$Flt_dEnd) as nAllQty
from EAM_ShiftMAP a
    ,Bs_DepartmentMAP b
    ,BS_PersonMAP c
where a.iddepartment = b.idObject(+)
  and a.idPerson = c.idObject(+)) a
where (1=1)


function GetManHour
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function GetManHour(idpShift in number, dpDate in date) return number as
    result number;
  begin
    select sum(a.nmanhour)
      into result
      from EAM_PlanRepairMAP a,
           (select b.idplanrepair
              from Eam_ShiftrepairMAP b
             where b.idresponsible = idpShift
             group by b.idplanrepair) b
     where a.idobject = b.idplanrepair
       and trunc(a.dbegin) = dpDate;
    return result;
  end;


function GetWorks
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 function GetWorks(idpShift in number, dpDate in date) return varchar2 as
    result varchar2(4000);
  begin
    select replace(straggrd(straggrdargs(to_char(decode(nCount,
                                                        1,
                                                        null,
                                                        nCount)) || t.sCode,
                                         '-')),
                   '-',
                   '')
      into result
      from (select a.idtyperepair, count(*) nCount
              from EAM_PlanRepairMAP a,
                   (select b.idplanrepair
                      from Eam_ShiftrepairMAP b
                     where b.idresponsible = idpShift
                     group by b.idplanrepair) b
             where a.idobject = b.idplanrepair
               and trunc(a.dbegin) = dpDate
             group by a.idtyperepair) a,
           Eam_Typerepair t
     where a.idtyperepair = t.id;
    return result;
  end;

...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39463756
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_myp,

ну да, студенческий дизайн. для каждого сотрдуника, на каждый день, долбишь двумя функциями, которые в свою очередь почти наверняка тоже долбят nested loop. 3 минуты еще по божески с таким дизайном.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39463777
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подобных запросов в базе множество в разных местах, есть шаблон запроса и по необходимости из шаблонов собирается один эпический запрос.

http://www.global-eam.ru/
"система, обобщающая лучшие мировые и отечественные практики ТОиP"

ответ разработчика я приводил, им искренне жаль
вопрос стоит как имея вот это вот всё, ускориться?

я например могу добавить ядер, расшириться с 4 до 12 ядер.
но что толку, если на каждого юзера одно ядро :(
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39463788
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!lonely_myp,

ну да, студенческий дизайн. для каждого сотрдуника, на каждый день, долбишь двумя функциями, которые в свою очередь почти наверняка тоже долбят nested loop. 3 минуты еще по божески с таким дизайном.
Лично я особого криминала не вижу

Функции в select листе, т.ч. если там честный nested loop, а не какие нибудь hash join'ы и никто не пытается сделать полный фетч всего результата на клиента - то все будет нормально.

Конечно, красивым кодом это не назовешь, но и обзывать говнокодом, не зная как предполагалось функционирование приложения целиком - я бы тоже не стал.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39463843
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_mypподобных запросов в базе множество в разных местах, есть шаблон запроса и по необходимости из шаблонов собирается один эпический запрос.

http://www.global-eam.ru/
"система, обобщающая лучшие мировые и отечественные практики ТОиP"

ответ разработчика я приводил, им искренне жаль
вопрос стоит как имея вот это вот всё, ускориться?

я например могу добавить ядер, расшириться с 4 до 12 ядер.
но что толку, если на каждого юзера одно ядро :(
посмотри что за индекс на EAM_PlanRepairMAP.dbegin
в функции фигурирует trunc(a.dbegin), если индекс не FBI то это заставляет фуллсканить EAM_PlanRepairMAP.

по хорошему для начала надо пересобрать статистику (exec DBMS_STATS.gather_schema_stats('schema_name') например) и смотреть план, что там эти функции такого cpu интенсив делают. апгрейд железа не поможет.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39464033
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я, честно говоря, никаким AWR и прочем премудростям не обучен

Т.ч. делаю по простому, запускаю PL/SQL developer и смотрю current (last) statement в сессии. Тот который там мелькает чаще всего - копи-пастю. По закону вероятности, скопи-пастить удается ровно тот селект, который занимает больше всего времени. Разбираюсь с ним, смотрю его план. Потом копи-пастю следующий....
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39464080
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!...
и смотреть план, что там эти функции такого cpu интенсив делают. апгрейд железа не поможет.
+100500

На самом деле, чисто визуально все не выглядит "сильно запущенным". Достаточно элементарные select'ы.

Тут два подозрения:

1) Клиническое и не лечится.
Клиентский софт всегда фетчит все записи из результата, вот здесь может быть печалька. Если данных много, а интерфейс сделан программистами страдающими "hibernate головного мозга" и по принципу "пагинация делается двумя строчками" ( C ), то вполне возможно, что на экран показывается 20-40 записей, а фетчится и обрабатывается чуть ли не вся база
Тут только лечить "hibernate головного мозга" у разработчиков, по методу доктора Жозе́ф Игн́ас Гильоте́на (написание взято из вики).

2) Все не настолько запущено и затыки именно на стороне сервера. Слетели (не хватает) индексы, кривой план... тут мне кажется уже можно пытаться как-то это дело лечить, разбираться и оптимизировать.
Конечно, было бы оптимально, если бы разработчики были бы готовы прислушаться к рекомендациям и переписать запросы в своем приложение.
Запрос на 3-и таблички с тремя подзапросами внутри - выглядит сильно по детски.

Ну и лично я, глядя на запросы, даже могу сходу предложить изменение структуры (создание индексов), которые как минимум в 2-4 раза скорость повысят, а может и больше. Только, конечно, желательно все же систему видеть. AFAIK

Куча мелких запросов, которые оперируют 2-3 полями. Я бы все эти поля (и из where и из select list'а) включил в индексы. Что бы при обработке запроса вообще избавиться от обращения к основной таблице (вся информация из индекса). Больно много в статистике "table fetch by rowid".

Сталкивался с похожей ситуацией (в системе Oracle Customer Care & Billing), где в таблице (CI_FI) были данные по клиентам + дата. И агрегировали данные по клиенту. Получалась полная фигня. Данные по одному клиенту оказывались "размазанными" по всей таблице, фактически таблица получалась жутко фрагментированная. А в отсортированном индексе, все данные по клиенту рядом. Скорость агрегирования возросла в десяток раз. Хотя пришлось городить достаточно жутко выглядящие индексы.

Пытались использовать index organized (cluster) table, но "не взлетело". Просто сделали очень широкие индексы.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465137
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!
посмотри что за индекс на EAM_PlanRepairMAP.dbegin
в функции фигурирует trunc(a.dbegin), если индекс не FBI то это заставляет фуллсканить EAM_PlanRepairMAP.
посмотрел, тип NORMAL

Yo.!по хорошему для начала надо пересобрать статистику (exec DBMS_STATS.gather_schema_stats('schema_name') например) запустил.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465140
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsevчто на экран показывается 20-40 записей, а фетчится и обрабатывается чуть ли не вся база
при открытии окна программы например с перечнем оборудования происходит селект на несколько тыщ записей, результат кэшируется в клиенте.
при этом на экран юзера влезает максимум первые 20-30 строчек из всего перечня.
зато работает сортировка и фильтры.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465180
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_mypYo.!посмотри что за индекс на EAM_PlanRepairMAP.dbegin
в функции фигурирует trunc(a.dbegin), если индекс не FBI то это заставляет фуллсканить EAM_PlanRepairMAP.
посмотрел, тип NORMAL
значит функции фулсканят из-за "and trunc(a.dbegin) = dpDate", если бы индекс был по TRUNC(dbegin) то было бы FUNCTION-BASED NORMAL

можно попробовать сделать FBI индекс
Код: plsql
1.
create index EAM_PlanRepairMAP_dbegin_idx  on EAM_PlanRepairMAP(TRUNC(dbegin)) ;



будет у вас два индекса, чуток тормозов при инсерте может дабавить.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465186
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может у него там ограничение висит dbegin=trunc(dbegin)
Тогда вполне себе сможет подхватиться и обычный индекс по dbegin
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465198
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!, два индекса не даёт сделать, ORA-01408: such column list already indexed
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465233
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровМожет у него там ограничение висит dbegin=trunc(dbegin)
Тогда вполне себе сможет подхватиться и обычный индекс по dbegin
может, но похоже не наш случай ...

lonely_mypYo.!, два индекса не даёт сделать, ORA-01408: such column list already indexed
значит FBI индекс с trunc() уже существует.
раз догадались повесить FBI индекс, то совсем детских ошибок вероятно не наделали, надо видеть SQL план, тогда будет диагноз.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465264
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!,
я посмотрел список всех индексов, такого FB индекса там точно нет
я так понимаю что не даёт создать второй индекс, так как уже есть обычный индекс.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465276
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_mypя посмотрел список всех индексов, такого FB индекса там точно нет
я так понимаю что не даёт создать второй индекс, так как уже есть обычный индекс.

не должно, помню я так в 9 или 10 версии выкручивался, только что проверил в 11.2 мне позволил.
смотри все индексы так
select * from all_indexes where table_name = 'EAM_PLANREPAIRMAP'

а вообще давай планы тех запросов.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465287
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_mypпри открытии окна программы например с перечнем оборудования происходит селект на несколько тыщ записей, результат кэшируется в клиенте.
при этом на экран юзера влезает максимум первые 20-30 строчек из всего перечня.
зато работает сортировка и фильтры.
Ну хоть кэшируют и потом сами делают сортировку. А вот фильтры - должна делать БД

Тогда, отправить поздравительную телеграмму разработчиков как сделал Кот Матроскин "Шарик, ты балбес"

То, как они пишут SELECT'ы может быть и допустимо, но не в ситуации "все фетчим, потом сами сортируем и фильтруем". Их подход "не взлетит". Или как минимум писать нормально запросы или БД должна заниматься тем, чем она и должна занимать: обработкой данных, фильтрацией и сортировкой, а клиент тем, чем должен заниматься, отображением данных. Последнее, скорее всего у них вызовет жуткий батхерд и срыв шаблонов: поэтому реально можно предложить только первый способ. Нормально писать SELECT'а...

Поскольку, те расчеты которые они хотят выполнять, одним SELECT'ом делать не удобно, как вариант: временные таблицы, заполнять данные в PL/SQL процедуре, вызывать процедуру + SELECT * из временной таблице. Их портянка из SELECT + PL/SQL функции... IMHO "не взлетит"... Но что бы говорить предметно, нужно знать систему целиком

Пока, судя по тому, что видно: нарезать индексы. Поскольку есть код и пакетах, можно попытаться и сами ф-ции оптимизировать. На мой взгляд, 2-3 кратного ускорения достигнуть можно. База не большая (вроде она у Вас вся в память поместилась), т.ч. расход места под индексы вряд ли будет существенным фактором. IMHO & AFAIK
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465291
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!можно попробовать сделать FBI индекс
Код: plsql
1.
create index EAM_PlanRepairMAP_dbegin_idx  on EAM_PlanRepairMAP(TRUNC(dbegin)) ;

....
Нафига?
Для какого запроса?

Индексы нужно строить под запросы, т.ч. начинать вот ровно с этого:
Yo.!а вообще давай планы тех запросов.
+тут полностью плюсуюсь

Если мы говорим про Вот этот запрос (подзапрос):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select a.idtyperepair, count(*) nCount
              from EAM_PlanRepairMAP a,
                   (select b.idplanrepair
                      from Eam_ShiftrepairMAP b
                     where b.idresponsible = idpShift
                     group by b.idplanrepair) b
             where a.idobject = b.idplanrepair
               and trunc(a.dbegin) = dpDate
             group by a.idtyperepair



То лично я бы:
1) его бы переписал и вместо count(*) поставил count(1)
2) нарезал бы индекс на EAM_PlanRepairMAP
idobject + trunc(a.dbegin) + idtyperepair
а не индекс по trunc() без idobject ! смысла в раздельных индексах по двум колонкам нет никакого ! AFAIK
3) нарезал бы индекс на Eam_ShiftrepairMAP
idresponsible + idplanrepair

Не уверен, что нигде не ошибся. Хорошо все же иметь доступ к БД и к системе. Но я бы думал в таком направлении. Для запросов такого вида (к одной-двум колонкам), вообще за счет индексов убрать обращение к таблицам.

IMHO & AFAIK

А вообще, озвучить бюджет. Дать доступ к системе или оплатить командировку. И можно говорить что-то предметно ))) А так... лечение экстрасенсами по фотографии...
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465945
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот этот план имеется в виду?
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465975
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GetManHour
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39465982
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GetWorks
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39466066
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет первого ничего сказать не могу

Последний и предпоследний - полный шлак. Индексов нет. От сочетания слов "совсем нет".
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39466091
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разработчикам - ссылку на данную тему.
А в данную тему - фотки разработчиков.
Страна должна знать своих героев.

Ну и тем, кто в БД для этой системы нарезал индексы, срочно читать тему:
http://www.sql.ru/forum/941371/studentam-zhelaushhim-pomoshhi

Мое такое мнение. Если я не прав, пусть меня кто нибудь поправит.

p.s.
Про первый план где сплошной Full table scan ничего говорить не буду ))). Тут часто утверждают, что full table scan и hash join это хорошо, и вообще "Oracle умный, ему виднее" ))) Не хожу вступать в полемику по этому поводу )))

Но предпоследний и последний - это шлак, за гранью добра и зла.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39466107
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE INDEX EAM_PlanRepairMAP_z1 ON EAM_PlanRepairMAP ( idobject, trunc(dbegin) );
CREATE INDEX Eam_ShiftrepairMAP_z2 ON Eam_ShiftrepairMAP ( idresponsible, idplanrepair );
CREATE INDEX Eam_Typerepair_z3 ON Eam_Typerepair ON (id);

Странно это, что бы не было по ID индекса на Eam_Typerepair... Странно все как-то. Очень странно (((
Или действительно все так запущенно или "если вдруг увидел люк, не волнуйся это глюк"
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39466110
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_mypвот этот план имеется в виду?
да, первый. покажи полностью.
ты все интересное обрезал но уже ясно, что там в цикле на каждого работягу, на каждый день долбит фуллсканами.
вместо железа наймите на пару часов ораклойда, 100% можно затюнить без вмешательства в код программки

Leonid KudryavtsevМое такое мнение. Если я не прав, пусть меня кто нибудь поправит.

а я теперь не вижу совсем явного криминала. основные индексы видно есть, IDX_EAM_PLANREPAIRM_DTRBEGIN явно FBI индекс с TRUNC
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39466113
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevСтранно это, что бы не было по ID индекса на Eam_Typerepair... Странно все как-то. Очень странно (((
Или действительно все так запущенно или "если вдруг увидел люк, не волнуйся это глюк"

не факт. там табличка 1.5 мб, 100% закеширована. обращаться по индексу к такой мелкой может быть просто дороже
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39466115
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!...а я теперь не вижу совсем явного криминала. основные индексы видно есть, IDX_EAM_PLANREPAIRM_DTRBEGIN явно FBI индекс с TRUNC

БессовкаХотелось бы сказать много и нецензурно, но так как этого делать нельзя- соответствующие термины Вы можете добавить сами ,во время чтения,согласно Вашему воображению


Вот зачем там индекс с Trunc ???
В условие where, что написано ???
Так и индекс такой должен быть, как минимум из ДВУХ полей. Два индекса по одному полю, это совсем НЕ ТОЖЕ САМОЕ, что индекс по двум полям.

IMHO & AFAIK

А вообще, конечно, что бы что-то советовать, нужно видеть систему и иметь доступ к экране и клавиатуре. Хотя бы по скайпу или team viewer'У.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39466119
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!...не факт. там табличка 1.5 мб, 100% закеширована. обращаться по индексу к такой мелкой может быть просто дороже
По опыту из Oracle 8.1.5, даже на крохотных табличках (а не 1.5 mb) с парой полей и парой десятков (меньше сотни) записей, индекс творит чудеса ))))
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39466121
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там HASH JOIN быть не должно. Как факт не должно. Тупые Nested Loop'ы

Я бы, даже, раз есть проблема со скоростью, не остановился бы пока даже table access из плана не убрал бы. Таблички маленькие, запросы простые, проблемы со скоростью - все по индексам.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39466132
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevТак и индекс такой должен быть, как минимум из ДВУХ полей. Два индекса по одному полю, это совсем НЕ ТОЖЕ САМОЕ, что индекс по двум полям.

я ничего не знаю о системе, может там мульоны таких вот функций, плодить индексы заточенные на две функции из миллиона тоже может быть не лучшее решение. ну и составной индекс по двум полям в лучшем случае лишь слегка ускорит какую-то часть, а тут явно провал в 2-3 порядка.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39466139
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!я ничего не знаю о системе, может там мульоны таких вот функций, плодить индексы заточенные на две функции из миллиона тоже может быть не лучшее решение.

Полностью согласен
Поэтому я уже третье сообщение заканчиваю словами "нужно видеть систему"

Но кроме как плодить индексы под запросы - ничего не остается. Код системы не поменяешь. А пара лишних индексов, может и не есть хорошо, но при размере БД топик стартера, и не так уж плохо. IMHO

Yo.!...в лучшем случае лишь слегка ускорит какую-то часть...
СЛЕГКА ????

Если привести в разумный вид, а не этот ужас, который сейчас в плане, я думаю в 5-50 раз ускориться "легко"

Т.е. если сейчас "вот маленький запрос на 3 минуты" потребляет 25 % CPU, то будет 10-15 секунд при 10% CPU. Как-то так.

"Быстро" при таком дизайне системы - не будет. Но судя по приведенным планам, сделать более-менее терпимо - вполне.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39466290
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_myp,

Я так понял селекты переписать нельзя?
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39467108
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevCREATE INDEX EAM_PlanRepairMAP_z1 ON EAM_PlanRepairMAP ( idobject, trunc(dbegin) );
CREATE INDEX Eam_ShiftrepairMAP_z2 ON Eam_ShiftrepairMAP ( idresponsible, idplanrepair );
снизили время запроса с 3 минут до 2:22 =)

третий индекс не создался, CREATE INDEX Eam_Typerepair_z3 ON Eam_Typerepair ON (id); ORA-00906: missing left parenthesis
я попробовал CREATE INDEX Eam_Typerepairmap_z3 ON Eam_Typerepairmap (IDOBJECT);
но он уже есть ORA-01408: such column list already indexed

планы запросов, изменились, у GetManHour стоимость ЦПУ упала вдвое, а у GetWorks ЦПУ стоимость мало изменилась.
план GetManHour :
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39467110
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
план GetWorks:
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39467124
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,
переписать можно, доступ к конфигурации нам предоставлен, но на данный момент смысла в этом мало, т.к. я у нас самый умный оракловщик.

Leonid Kudryavtsev"нужно видеть систему"
я над этим думаю, по идее я могу выставить демо версию базы которую присылал разработчик, но там нет такого объёма данных чтобы ощутить адские тормоза и оценить принимаемые меры.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39467132
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevНо кроме как плодить индексы под запросы - ничего не остается. Код системы не поменяешь.поменять можно, просто некому)))

я щас в процессе осознавания как пользоваться планом запроса, конечно это не единственный запрос который можно ускорить.
если я разберусь с планами и индексами уже что-то, тогда пробегусь по остальным часто используемым операциям в программе и хотябы слегка её ускорю.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39467135
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_mypснизили время запроса с 3 минут до 2:22 =)

ну это ожидаемо. range scan по двум индексам в лучшем случае в двое медленее, чем с одного составного, а это лишь часть запроса, который явно можно в 50 раз затюнить.
покажи план первого запроса, а не составных функций. там ответы. только найди как в текст этот план вытащить текст.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39467147
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_myp...планы запросов, изменились, у GetManHour стоимость ЦПУ упала вдвое...
Это все не то (((, там никакой порнографии с Hash join быть не должно, ну или я что-то не понимаю.

Скайп есть?
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39468869
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!в текст этот план вытащить

Код: plsql
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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
SQL> delete from plan_table;
 
0 rows deleted
 
SQL> explain plan for
  2  
  2  select  *
  3  from (select a.idObject id
  4        ,a.nShiftNumber
  5        ,a.idDepartment
  6        ,b.sDepartmentCode sDep
  7        ,c.slname||nvl2(c.smidname||c.sfname,' ','')||substr(c.sfname,1,1)
  8         ||nvl2(c.sfname,'.','')||substr(c.smidname,1,1)||nvl2(c.smidname,'.','') sName
  9        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('01.05.2017','dd.mm.yyyy')) as "nManHour[1]"
 10        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('01.05.2017','dd.mm.yyyy')) as "sWorks[1]"
 11        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('02.05.2017','dd.mm.yyyy')) as "nManHour[2]"
 12        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('02.05.2017','dd.mm.yyyy')) as "sWorks[2]"
 13        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('03.05.2017','dd.mm.yyyy')) as "nManHour[3]"
 14        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('03.05.2017','dd.mm.yyyy')) as "sWorks[3]"
 15        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('04.05.2017','dd.mm.yyyy')) as "nManHour[4]"
 16        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('04.05.2017','dd.mm.yyyy')) as "sWorks[4]"
 17        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('05.05.2017','dd.mm.yyyy')) as "nManHour[5]"
 18        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('05.05.2017','dd.mm.yyyy')) as "sWorks[5]"
 19        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('06.05.2017','dd.mm.yyyy')) as "nManHour[6]"
 20        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('06.05.2017','dd.mm.yyyy')) as "sWorks[6]"
 21        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('07.05.2017','dd.mm.yyyy')) as "nManHour[7]"
 22        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('07.05.2017','dd.mm.yyyy')) as "sWorks[7]"
 23        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('08.05.2017','dd.mm.yyyy')) as "nManHour[8]"
 24        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('08.05.2017','dd.mm.yyyy')) as "sWorks[8]"
 25        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('09.05.2017','dd.mm.yyyy')) as "nManHour[9]"
 26        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('09.05.2017','dd.mm.yyyy')) as "sWorks[9]"
 27        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('10.05.2017','dd.mm.yyyy')) as "nManHour[10]"
 28        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('10.05.2017','dd.mm.yyyy')) as "sWorks[10]"
 29        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('11.05.2017','dd.mm.yyyy')) as "nManHour[11]"
 30        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('11.05.2017','dd.mm.yyyy')) as "sWorks[11]"
 31        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('12.05.2017','dd.mm.yyyy')) as "nManHour[12]"
 32        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('12.05.2017','dd.mm.yyyy')) as "sWorks[12]"
 33        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('13.05.2017','dd.mm.yyyy')) as "nManHour[13]"
 34        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('13.05.2017','dd.mm.yyyy')) as "sWorks[13]"
 35        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('14.05.2017','dd.mm.yyyy')) as "nManHour[14]"
 36        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('14.05.2017','dd.mm.yyyy')) as "sWorks[14]"
 37        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('15.05.2017','dd.mm.yyyy')) as "nManHour[15]"
 38        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('15.05.2017','dd.mm.yyyy')) as "sWorks[15]"
 39        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('16.05.2017','dd.mm.yyyy')) as "nManHour[16]"
 40        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('16.05.2017','dd.mm.yyyy')) as "sWorks[16]"
 41        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('17.05.2017','dd.mm.yyyy')) as "nManHour[17]"
 42        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('17.05.2017','dd.mm.yyyy')) as "sWorks[17]"
 43        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('18.05.2017','dd.mm.yyyy')) as "nManHour[18]"
 44        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('18.05.2017','dd.mm.yyyy')) as "sWorks[18]"
 45        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('19.05.2017','dd.mm.yyyy')) as "nManHour[19]"
 46        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('19.05.2017','dd.mm.yyyy')) as "sWorks[19]"
 47        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('20.05.2017','dd.mm.yyyy')) as "nManHour[20]"
 48        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('20.05.2017','dd.mm.yyyy')) as "sWorks[20]"
 49        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('21.05.2017','dd.mm.yyyy')) as "nManHour[21]"
 50        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('21.05.2017','dd.mm.yyyy')) as "sWorks[21]"
 51        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('22.05.2017','dd.mm.yyyy')) as "nManHour[22]"
 52        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('22.05.2017','dd.mm.yyyy')) as "sWorks[22]"
 53        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('23.05.2017','dd.mm.yyyy')) as "nManHour[23]"
 54        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('23.05.2017','dd.mm.yyyy')) as "sWorks[23]"
 55        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('24.05.2017','dd.mm.yyyy')) as "nManHour[24]"
 56        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('24.05.2017','dd.mm.yyyy')) as "sWorks[24]"
 57        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('25.05.2017','dd.mm.yyyy')) as "nManHour[25]"
 58        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('25.05.2017','dd.mm.yyyy')) as "sWorks[25]"
 59        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('26.05.2017','dd.mm.yyyy')) as "nManHour[26]"
 60        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('26.05.2017','dd.mm.yyyy')) as "sWorks[26]"
 61        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('27.05.2017','dd.mm.yyyy')) as "nManHour[27]"
 62        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('27.05.2017','dd.mm.yyyy')) as "sWorks[27]"
 63        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('28.05.2017','dd.mm.yyyy')) as "nManHour[28]"
 64        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('28.05.2017','dd.mm.yyyy')) as "sWorks[28]"
 65        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('29.05.2017','dd.mm.yyyy')) as "nManHour[29]"
 66        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('29.05.2017','dd.mm.yyyy')) as "sWorks[29]"
 67        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('30.05.2017','dd.mm.yyyy')) as "nManHour[30]"
 68        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('30.05.2017','dd.mm.yyyy')) as "sWorks[30]"
 69        ,EAM_SetResponsible.GetManHour(a.idObject,to_date('31.05.2017','dd.mm.yyyy')) as "nManHour[31]"
 70        ,EAM_SetResponsible.GetWorks(a.idObject,to_date('31.05.2017','dd.mm.yyyy')) as "sWorks[31]"
 71  from EAM_ShiftMAP a
 72      ,Bs_DepartmentMAP b
 73      ,BS_PersonMAP c
 74  where a.iddepartment = b.idObject(+)
 75    and a.idPerson = c.idObject(+)) a
 76  where (1=1);
 
Explained
 
SQL> select * from table(dbms_xplan.display);
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3619574096
--------------------------------------------------------------------------------
| Id  | Operation           | Name             | Rows  | Bytes | Cost (%CPU)| Ti
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |                  |   102 |  8466 |    12   (9)| 00
|*  1 |  HASH JOIN OUTER    |                  |   102 |  8466 |    12   (9)| 00
|*  2 |   HASH JOIN OUTER   |                  |   102 |  4998 |     7  (15)| 00
|   3 |    TABLE ACCESS FULL| EAM_SHIFTMAP     |   102 |  2856 |     3   (0)| 00
|   4 |    TABLE ACCESS FULL| BS_DEPARTMENTMAP |   118 |  2478 |     3   (0)| 00
|   5 |   TABLE ACCESS FULL | BS_PERSONMAP     |   705 | 23970 |     5   (0)| 00
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("A"."IDPERSON"="C"."IDOBJECT"(+))
   2 - access("A"."IDDEPARTMENT"="B"."IDOBJECT"(+))
 
18 rows selected

...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39469012
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_mypMaximaXXL,
переписать можно, доступ к конфигурации нам предоставлен, но на данный момент смысла в этом мало, т.к. я у нас самый умный оракловщик.


Давно я такой ... не страдал
А попробуй вот так:
Код: plsql
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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
         select a.idObject id
      ,a.nShiftNumber
      ,a.idDepartment
      ,b.sDepartmentCode sDep
      ,c.slname||nvl2(c.smidname||c.sfname,' ','')||substr(c.sfname,1,1)
       ||nvl2(c.sfname,'.','')||substr(c.smidname,1,1)||nvl2(c.smidname,'.','') sName
      ,k.s1 as "nManHour[1]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('01.05.2017','dd.mm.yyyy')) as "sWorks[1]"
      ,k.s2 as "nManHour[2]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('02.05.2017','dd.mm.yyyy')) as "sWorks[2]"
      ,k.s3 as "nManHour[3]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('03.05.2017','dd.mm.yyyy')) as "sWorks[3]"
      ,k.s4 as "nManHour[4]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('04.05.2017','dd.mm.yyyy')) as "sWorks[4]"
      ,k.s5 as "nManHour[5]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('05.05.2017','dd.mm.yyyy')) as "sWorks[5]"
      ,k.s6 as "nManHour[6]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('06.05.2017','dd.mm.yyyy')) as "sWorks[6]"
      ,k.s7 as "nManHour[7]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('07.05.2017','dd.mm.yyyy')) as "sWorks[7]"
      ,k.s8 as "nManHour[8]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('08.05.2017','dd.mm.yyyy')) as "sWorks[8]"
      ,k.s9 as "nManHour[9]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('09.05.2017','dd.mm.yyyy')) as "sWorks[9]"
      ,k.s10 as "nManHour[10]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('10.05.2017','dd.mm.yyyy')) as "sWorks[10]"
      ,k.s11 as "nManHour[11]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('11.05.2017','dd.mm.yyyy')) as "sWorks[11]"
      ,k.s12 as "nManHour[12]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('12.05.2017','dd.mm.yyyy')) as "sWorks[12]"
      ,k.s13 as "nManHour[13]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('13.05.2017','dd.mm.yyyy')) as "sWorks[13]"
      ,k.s14 as "nManHour[14]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('14.05.2017','dd.mm.yyyy')) as "sWorks[14]"
      ,k.s15 as "nManHour[15]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('15.05.2017','dd.mm.yyyy')) as "sWorks[15]"
      ,k.s16 as "nManHour[16]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('16.05.2017','dd.mm.yyyy')) as "sWorks[16]"
      ,k.s17 as "nManHour[17]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('17.05.2017','dd.mm.yyyy')) as "sWorks[17]"
      ,k.s18 as "nManHour[18]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('18.05.2017','dd.mm.yyyy')) as "sWorks[18]"
      ,k.s19 as "nManHour[19]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('19.05.2017','dd.mm.yyyy')) as "sWorks[19]"
      ,k.s20 as "nManHour[20]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('20.05.2017','dd.mm.yyyy')) as "sWorks[20]"
      ,k.s21 as "nManHour[21]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('21.05.2017','dd.mm.yyyy')) as "sWorks[21]"
      ,k.s22 as "nManHour[22]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('22.05.2017','dd.mm.yyyy')) as "sWorks[22]"
      ,k.s23 as "nManHour[23]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('23.05.2017','dd.mm.yyyy')) as "sWorks[23]"
      ,k.s24 as "nManHour[24]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('24.05.2017','dd.mm.yyyy')) as "sWorks[24]"
      ,k.s25 as "nManHour[25]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('25.05.2017','dd.mm.yyyy')) as "sWorks[25]"
      ,k.s26 as "nManHour[26]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('26.05.2017','dd.mm.yyyy')) as "sWorks[26]"
      ,k.s27 as "nManHour[27]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('27.05.2017','dd.mm.yyyy')) as "sWorks[27]"
      ,k.s28 as "nManHour[28]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('28.05.2017','dd.mm.yyyy')) as "sWorks[28]"
      ,k.s29 as "nManHour[29]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('29.05.2017','dd.mm.yyyy')) as "sWorks[29]"
      ,k.s30 as "nManHour[30]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('30.05.2017','dd.mm.yyyy')) as "sWorks[30]"
      ,k.s31 as "nManHour[31]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('31.05.2017','dd.mm.yyyy')) as "sWorks[31]"
from EAM_ShiftMAP a
    left join Bs_DepartmentMAP b on (a.iddepartment = b.idObject)
    left join BS_PersonMAP c on (a.idPerson = c.idObject)
    left join (    select b.idresponsible, 
sum(decode(to_char(a.dbegin,'dd'),'01', a.nmanhour)) s1,
sum(decode(to_char(a.dbegin,'dd'),'02', a.nmanhour)) s2,
sum(decode(to_char(a.dbegin,'dd'),'03', a.nmanhour)) s3,
sum(decode(to_char(a.dbegin,'dd'),'04', a.nmanhour)) s4,
sum(decode(to_char(a.dbegin,'dd'),'05', a.nmanhour)) s5,
sum(decode(to_char(a.dbegin,'dd'),'06', a.nmanhour)) s6,
sum(decode(to_char(a.dbegin,'dd'),'07', a.nmanhour)) s7,
sum(decode(to_char(a.dbegin,'dd'),'08', a.nmanhour)) s8,
sum(decode(to_char(a.dbegin,'dd'),'09', a.nmanhour)) s9,
sum(decode(to_char(a.dbegin,'dd'),'10', a.nmanhour)) s10,
sum(decode(to_char(a.dbegin,'dd'),'11', a.nmanhour)) s11,
sum(decode(to_char(a.dbegin,'dd'),'12', a.nmanhour)) s12,
sum(decode(to_char(a.dbegin,'dd'),'13', a.nmanhour)) s13,
sum(decode(to_char(a.dbegin,'dd'),'14', a.nmanhour)) s14,
sum(decode(to_char(a.dbegin,'dd'),'15', a.nmanhour)) s15,
sum(decode(to_char(a.dbegin,'dd'),'16', a.nmanhour)) s16,
sum(decode(to_char(a.dbegin,'dd'),'17', a.nmanhour)) s17,
sum(decode(to_char(a.dbegin,'dd'),'18', a.nmanhour)) s18,
sum(decode(to_char(a.dbegin,'dd'),'19', a.nmanhour)) s19,
sum(decode(to_char(a.dbegin,'dd'),'20', a.nmanhour)) s20,
sum(decode(to_char(a.dbegin,'dd'),'21', a.nmanhour)) s21,
sum(decode(to_char(a.dbegin,'dd'),'22', a.nmanhour)) s22,
sum(decode(to_char(a.dbegin,'dd'),'23', a.nmanhour)) s23,
sum(decode(to_char(a.dbegin,'dd'),'24', a.nmanhour)) s24,
sum(decode(to_char(a.dbegin,'dd'),'25', a.nmanhour)) s25,
sum(decode(to_char(a.dbegin,'dd'),'26', a.nmanhour)) s26,
sum(decode(to_char(a.dbegin,'dd'),'27', a.nmanhour)) s27,
sum(decode(to_char(a.dbegin,'dd'),'28', a.nmanhour)) s28,
sum(decode(to_char(a.dbegin,'dd'),'29', a.nmanhour)) s29,
sum(decode(to_char(a.dbegin,'dd'),'30', a.nmanhour)) s30,
sum(decode(to_char(a.dbegin,'dd'),'31', a.nmanhour)) s31
      from EAM_PlanRepairMAP a, (select distinct idresponsible, idplanrepair from Eam_ShiftrepairMAP) b
     where a.idobject = b.idplanrepair
       and a.dbegin between to_date('01.05.2017','dd.mm.yyyy') and to_date('31.05.2017 23:59:59','dd.mm.yyyy HH24:mi:ss')
group by b.idresponsible) k on (a.idObject = k.idresponsible)
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39469026
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как Вы братцы круто взялись. Я бы сначала с маленьких, с простых запросов начал )))
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39469043
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

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

Как по мне, сразу переписать в 1 запрос тут делов на 30 мин.
Только бы понять на сколько ускорился/замедлился. Без базы, в оффлайне (вспоминаю институт и програмки на бумажке) ускорять что-то - сущий ад
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39469099
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXLКак по мне, сразу переписать в 1 запрос тут делов на 30 мин.

у меня есть смутное подозрение, что данный запрос авто-генеренный

MaximaXXLБез базы, в оффлайне (вспоминаю институт и програмки на бумажке) ускорять что-то - сущий ад

аналогичного мнения
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39469151
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_myp,

Вот это должно работать ...

Код: plsql
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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
         select a.idObject id
      ,a.nShiftNumber
      ,a.idDepartment
      ,b.sDepartmentCode sDep
      ,c.slname||nvl2(c.smidname||c.sfname,' ','')||substr(c.sfname,1,1)
       ||nvl2(c.sfname,'.','')||substr(c.smidname,1,1)||nvl2(c.smidname,'.','') sName
      ,k.s1 as "nManHour[1]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c1,1,null,k.c1)) || k.sCode,'-')),'-','') as "sWorks[1]"
      ,k.s2 as "nManHour[2]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c2,1,null,k.c2)) || k.sCode,'-')),'-','') as "sWorks[2]"
      ,k.s3 as "nManHour[3]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c3,1,null,k.c3)) || k.sCode,'-')),'-','') as "sWorks[3]"
      ,k.s4 as "nManHour[4]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c4,1,null,k.c4)) || k.sCode,'-')),'-','') as "sWorks[4]"
      ,k.s5 as "nManHour[5]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c5,1,null,k.c5)) || k.sCode,'-')),'-','') as "sWorks[5]"
      ,k.s6 as "nManHour[6]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c6,1,null,k.c6)) || k.sCode,'-')),'-','') as "sWorks[6]"
      ,k.s7 as "nManHour[7]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c7,1,null,k.c7)) || k.sCode,'-')),'-','') as "sWorks[7]"
      ,k.s8 as "nManHour[8]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c8,1,null,k.c8)) || k.sCode,'-')),'-','') as "sWorks[8]"
      ,k.s9 as "nManHour[9]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c9,1,null,k.c9)) || k.sCode,'-')),'-','') as "sWorks[9]"
      ,k.s10 as "nManHour[10]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c10,1,null,k.c10)) || k.sCode,'-')),'-','') as "sWorks[10]"
      ,k.s11 as "nManHour[11]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c11,1,null,k.c11)) || k.sCode,'-')),'-','') as "sWorks[11]"
      ,k.s12 as "nManHour[12]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c12,1,null,k.c12)) || k.sCode,'-')),'-','') as "sWorks[12]"
      ,k.s13 as "nManHour[13]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c13,1,null,k.c13)) || k.sCode,'-')),'-','') as "sWorks[13]"
      ,k.s14 as "nManHour[14]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c14,1,null,k.c14)) || k.sCode,'-')),'-','') as "sWorks[14]"
      ,k.s15 as "nManHour[15]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c15,1,null,k.c15)) || k.sCode,'-')),'-','') as "sWorks[15]"
      ,k.s16 as "nManHour[16]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c16,1,null,k.c16)) || k.sCode,'-')),'-','') as "sWorks[16]"
      ,k.s17 as "nManHour[17]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c17,1,null,k.c17)) || k.sCode,'-')),'-','') as "sWorks[17]"
      ,k.s18 as "nManHour[18]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c18,1,null,k.c18)) || k.sCode,'-')),'-','') as "sWorks[18]"
      ,k.s19 as "nManHour[19]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c19,1,null,k.c19)) || k.sCode,'-')),'-','') as "sWorks[19]"
      ,k.s20 as "nManHour[20]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c20,1,null,k.c20)) || k.sCode,'-')),'-','') as "sWorks[20]"
      ,k.s21 as "nManHour[21]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c21,1,null,k.c21)) || k.sCode,'-')),'-','') as "sWorks[21]"
      ,k.s22 as "nManHour[22]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c22,1,null,k.c22)) || k.sCode,'-')),'-','') as "sWorks[22]"
      ,k.s23 as "nManHour[23]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c23,1,null,k.c23)) || k.sCode,'-')),'-','') as "sWorks[23]"
      ,k.s24 as "nManHour[24]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c24,1,null,k.c24)) || k.sCode,'-')),'-','') as "sWorks[24]"
      ,k.s25 as "nManHour[25]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c25,1,null,k.c25)) || k.sCode,'-')),'-','') as "sWorks[25]"
      ,k.s26 as "nManHour[26]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c26,1,null,k.c26)) || k.sCode,'-')),'-','') as "sWorks[26]"
      ,k.s27 as "nManHour[27]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c27,1,null,k.c27)) || k.sCode,'-')),'-','') as "sWorks[27]"
      ,k.s28 as "nManHour[28]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c28,1,null,k.c28)) || k.sCode,'-')),'-','') as "sWorks[28]"
      ,k.s29 as "nManHour[29]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c29,1,null,k.c29)) || k.sCode,'-')),'-','') as "sWorks[29]"
      ,k.s30 as "nManHour[30]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c30,1,null,k.c30)) || k.sCode,'-')),'-','') as "sWorks[30]"
      ,k.s31 as "nManHour[31]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c31,1,null,k.c31)) || k.sCode,'-')),'-','') as "sWorks[31]"
from EAM_ShiftMAP a
    left join Bs_DepartmentMAP b on (a.iddepartment = b.idObject)
    left join BS_PersonMAP c on (a.idPerson = c.idObject)
    left join (    select b.idresponsible, (select t.sCode from Eam_Typerepair t where a.idtyperepair = t.id) sCode,
sum(decode(to_char(a.dbegin,'dd'),'01', a.nmanhour)) s1,  count(decode(to_char(a.dbegin,'dd'),'01', 1)) c1,  
sum(decode(to_char(a.dbegin,'dd'),'02', a.nmanhour)) s2,  count(decode(to_char(a.dbegin,'dd'),'02', 1)) c2,  
sum(decode(to_char(a.dbegin,'dd'),'03', a.nmanhour)) s3,  count(decode(to_char(a.dbegin,'dd'),'03', 1)) c3,  
sum(decode(to_char(a.dbegin,'dd'),'04', a.nmanhour)) s4,  count(decode(to_char(a.dbegin,'dd'),'04', 1)) c4,  
sum(decode(to_char(a.dbegin,'dd'),'05', a.nmanhour)) s5,  count(decode(to_char(a.dbegin,'dd'),'05', 1)) c5,  
sum(decode(to_char(a.dbegin,'dd'),'06', a.nmanhour)) s6,  count(decode(to_char(a.dbegin,'dd'),'06', 1)) c6,  
sum(decode(to_char(a.dbegin,'dd'),'07', a.nmanhour)) s7,  count(decode(to_char(a.dbegin,'dd'),'07', 1)) c7,  
sum(decode(to_char(a.dbegin,'dd'),'08', a.nmanhour)) s8,  count(decode(to_char(a.dbegin,'dd'),'08', 1)) c8,  
sum(decode(to_char(a.dbegin,'dd'),'09', a.nmanhour)) s9,  count(decode(to_char(a.dbegin,'dd'),'09', 1)) c9,  
sum(decode(to_char(a.dbegin,'dd'),'10', a.nmanhour)) s10, count(decode(to_char(a.dbegin,'dd'),'10', 1)) c10, 
sum(decode(to_char(a.dbegin,'dd'),'11', a.nmanhour)) s11, count(decode(to_char(a.dbegin,'dd'),'11', 1)) c11, 
sum(decode(to_char(a.dbegin,'dd'),'12', a.nmanhour)) s12, count(decode(to_char(a.dbegin,'dd'),'12', 1)) c12, 
sum(decode(to_char(a.dbegin,'dd'),'13', a.nmanhour)) s13, count(decode(to_char(a.dbegin,'dd'),'13', 1)) c13, 
sum(decode(to_char(a.dbegin,'dd'),'14', a.nmanhour)) s14, count(decode(to_char(a.dbegin,'dd'),'14', 1)) c14, 
sum(decode(to_char(a.dbegin,'dd'),'15', a.nmanhour)) s15, count(decode(to_char(a.dbegin,'dd'),'15', 1)) c15, 
sum(decode(to_char(a.dbegin,'dd'),'16', a.nmanhour)) s16, count(decode(to_char(a.dbegin,'dd'),'16', 1)) c16, 
sum(decode(to_char(a.dbegin,'dd'),'17', a.nmanhour)) s17, count(decode(to_char(a.dbegin,'dd'),'17', 1)) c17, 
sum(decode(to_char(a.dbegin,'dd'),'18', a.nmanhour)) s18, count(decode(to_char(a.dbegin,'dd'),'18', 1)) c18, 
sum(decode(to_char(a.dbegin,'dd'),'19', a.nmanhour)) s19, count(decode(to_char(a.dbegin,'dd'),'19', 1)) c19, 
sum(decode(to_char(a.dbegin,'dd'),'20', a.nmanhour)) s20, count(decode(to_char(a.dbegin,'dd'),'20', 1)) c20, 
sum(decode(to_char(a.dbegin,'dd'),'21', a.nmanhour)) s21, count(decode(to_char(a.dbegin,'dd'),'21', 1)) c21, 
sum(decode(to_char(a.dbegin,'dd'),'22', a.nmanhour)) s22, count(decode(to_char(a.dbegin,'dd'),'22', 1)) c22, 
sum(decode(to_char(a.dbegin,'dd'),'23', a.nmanhour)) s23, count(decode(to_char(a.dbegin,'dd'),'23', 1)) c23, 
sum(decode(to_char(a.dbegin,'dd'),'24', a.nmanhour)) s24, count(decode(to_char(a.dbegin,'dd'),'24', 1)) c24, 
sum(decode(to_char(a.dbegin,'dd'),'25', a.nmanhour)) s25, count(decode(to_char(a.dbegin,'dd'),'25', 1)) c25, 
sum(decode(to_char(a.dbegin,'dd'),'26', a.nmanhour)) s26, count(decode(to_char(a.dbegin,'dd'),'26', 1)) c26, 
sum(decode(to_char(a.dbegin,'dd'),'27', a.nmanhour)) s27, count(decode(to_char(a.dbegin,'dd'),'27', 1)) c27, 
sum(decode(to_char(a.dbegin,'dd'),'28', a.nmanhour)) s28, count(decode(to_char(a.dbegin,'dd'),'28', 1)) c28, 
sum(decode(to_char(a.dbegin,'dd'),'29', a.nmanhour)) s29, count(decode(to_char(a.dbegin,'dd'),'29', 1)) c29, 
sum(decode(to_char(a.dbegin,'dd'),'30', a.nmanhour)) s30, count(decode(to_char(a.dbegin,'dd'),'30', 1)) c30, 
sum(decode(to_char(a.dbegin,'dd'),'31', a.nmanhour)) s31, count(decode(to_char(a.dbegin,'dd'),'31', 1)) c31  
      from EAM_PlanRepairMAP a, (select distinct idresponsible, idplanrepair from Eam_ShiftrepairMAP) b
     where a.idobject = b.idplanrepair
       and a.dbegin between to_date('01.05.2017','dd.mm.yyyy') and to_date('31.05.2017 23:59:59','dd.mm.yyyy HH24:mi:ss')
group by b.idresponsible, a.idtyperepair) k on (a.idObject = k.idresponsible)



хотя я и не понимаю что это такое
Код: plsql
1.
replace(straggrd(straggrdargs(to_char(decode(k.c24,1,null,k.c24)) || k.sCode,'-')),'-','')


и зачем передавать знак "-" а потом его реплейсить
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39469412
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev данный запрос авто-генеренныйда, собирается на нужное число дней.

более общий вид

Код: plsql
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.
 function GetGST(dpBegin in date, dpEnd in date) return clob as
    svText clob;
  begin
    if dpEnd - dpBegin > 59 then
      BTK_ErrorAPI.Generate('BTK.eCustomError',
                            'Задан слишком большой временной диапазон. 60 дней - максимально возможный');
    end if;
  
    for x in (select to_char(num) id,
                     'to_date(''' ||
                     to_char(dpBegin + (num - 1), 'dd.mm.yyyy') ||
                     ''',''dd.mm.yyyy'')' sDate
                from BTK_SolidSeq b
               where b.num <= (dpEnd - dpBegin) + 1
               order by num) loop
      svText := svText ||
                '      ,EAM_SetResponsible.GetManHour(a.idObject,' ||
                x.sdate || ') as "nManHour[' || x.id || ']"
      , EAM_SetResponsible.GetWorks(a.idObject,' || x.sdate ||
                ') as "sWorks[' || x.id || ']"' || chr(13);
    end loop;
    svText := 'select a.idObject id
      ,a.nShiftNumber
      ,a.idDepartment
      ,b.sDepartmentCode sDep
      ,c.slname||nvl2(c.smidname||c.sfname,'' '','''')||substr(c.sfname,1,1)
       ||nvl2(c.sfname,''.'','''')||substr(c.smidname,1,1)||nvl2(c.smidname,''.'','''') sName
' || svText || '
      ,EAM_SetResponsible.GetAllManHour(a.idObject,:filter$Flt_dBegin,:filter$Flt_dEnd) as nAllManHour
      ,EAM_SetResponsible.GetAllQty(a.idObject,:filter$Flt_dBegin,:filter$Flt_dEnd) as nAllQty
from EAM_ShiftMAP a
    ,Bs_DepartmentMAP b
    ,BS_PersonMAP c
where a.iddepartment = b.idObject(+)
  and a.idPerson = c.idObject(+)';
    return svText;
  end;

...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39469454
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Взять и переписать.

Система не так уж и плоха, как кажется на первый взгляд. Функции, генерация кода тоже на сторед-процедурах... Т.ч., в принципе, все понятно. Взять и переписать. Те куски, которые работают анормально большое кол-во времени.

Малой кровью, ф-ции GetAllManHour, GetAllQty. Делов на пару часов, если иметь доступ хотя бы к экрану компьютера (скайп, TeamViewer). Будет быстрее раз в 5-50

Чуть побольше, подумать и переделать всю эту сборки, как предлагает MaximaXXL. Отказаться от ф-ций и все данные доставать одним запросом (или With...select... ). Это уже посложнее.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470170
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_myp,

хм ... я уже и забыл как план с UDF выглядит, думал на картинках план обрезан...
не думаю что переписывать чужой sql хорошая идея, по хорошему надо докопаться чего сбивает оптимизатор. все таблички выглядят крошечными, может это как-то сбивает его с толку.

для начала я бы просто посмотрел с хинтом /*+ RULE */ , он должен nested loop по индексам врубить
Код: sql
1.
2.
3.
select /*+ RULE */  *
from (select a.idObject id
...


если хинт RULE даст ожидаемые 10-30 сек, попробовал бы участвующие таблицы ALTER TABLE ... CACHE;
в теории это может от фулскана избавить.

плюс пересобрал бы системную статистику, может у оптимизатора неверные данные о скорости дисков/процессора

exec dbms_stats.gather_system_stats(gathering_mode=>'start') ;
тут часик нагрузки ...
exec dbms_stats.gather_system_stats(gathering_mode=>'stop') ;
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470231
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!...по хорошему надо докопаться чего сбивает оптимизатор...
IMHO бесконечно вложенные один в другой подзапросы

что бы добавить hint, я так подозреваю, на SE все равно придется код запроса править

У авторов запросов очень не традиционное мышление. Очень изощренный способ с помощью вложенного подзапроса, group by и join изобразить in (select...)

IMHO
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470307
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_mypLeonid Kudryavtsev данный запрос авто-генеренныйда, собирается на нужное число дней.

более общий вид



Вы бы не могли написать подходит ли Вам скорость/загрузка для предложенного мной селекта из 20551953 сообщения, сделать его автогенерируемым, не составит большого труда
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470309
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsevчто бы добавить hint, я так подозреваю, на SE все равно придется код запроса править

не, хинт зашивать в код я не предлагаю. хинт чисто посмотреть даст ли nested loop ожидаемые 10-30 секунд.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470363
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!если хинт RULE даст ожидаемые 10-30 сек
Yo.!не, хинт зашивать в код я не предлагаю. хинт чисто посмотреть даст ли nested loop ожидаемые 10-30 секунд.
Ну RULE и nested loop как бы вещи достаточно не связанные. Вангую, что при RULE там тоже NL не будет

тогда надо ORDERED и USE_NL ==> но тогда как минимум нужно подзапросы местами переставлять ==> тогда уж посмотреть, какой будет план и скорость с нормальными запросами с in и exists ==> тогда уж посмотреть и попытаться понять, что за информация в табличках, что лучше in или exists исходя из логики

был бы доступ к экрану или, на худой конец, skype - делов на полчаса (или несколько часов). Но через форум... слишком много надо наводящих вопросов для простейшего запроса из 2-х табличек.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470771
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLВы бы не могли написать подходит ли Вам скорость/загрузка для предложенного мной селекта из 20551953 сообщения
не запустился, какой-то группировки не хватает? :(
ORA-00937: not a single-group group function
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470811
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!для начала я бы просто посмотрел с хинтом /*+ RULE */ , он должен nested loop по индексам врубить
Код: sql
1.
2.
3.
select /*+ RULE */  *
from (select a.idObject id
...


если хинт RULE даст ожидаемые 10-30 сек, попробовал бы участвующие таблицы ALTER TABLE ... CACHE;
в теории это может от фулскана избавить.
план запроса с RULE
Код: plsql
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.
SQL> select * from table(dbms_xplan.display);
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 122050614
-------------------------------------------------------------
| Id  | Operation                     | Name                |
-------------------------------------------------------------
|   0 | SELECT STATEMENT              |                     |
|   1 |  NESTED LOOPS OUTER           |                     |
|   2 |   NESTED LOOPS OUTER          |                     |
|   3 |    TABLE ACCESS FULL          | EAM_SHIFTMAP        |
|   4 |    TABLE ACCESS BY INDEX ROWID| BS_PERSONMAP        |
|*  5 |     INDEX UNIQUE SCAN         | PK_BS_PERSONMAP     |
|   6 |   TABLE ACCESS BY INDEX ROWID | BS_DEPARTMENTMAP    |
|*  7 |    INDEX UNIQUE SCAN          | PK_BS_DEPARTMENTMAP |
-------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   5 - access("A"."IDPERSON"="C"."IDOBJECT"(+))
   7 - access("A"."IDDEPARTMENT"="B"."IDOBJECT"(+))
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Note
-----
   - rule based optimizer used (consider using cbo)
 
24 rows selected



тоже самое без RULE

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> select * from table(dbms_xplan.display);
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3619574096
--------------------------------------------------------------------------------
| Id  | Operation           | Name             | Rows  | Bytes | Cost (%CPU)| Ti
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |                  |   102 |  8466 |    14   (8)| 00
|*  1 |  HASH JOIN OUTER    |                  |   102 |  8466 |    14   (8)| 00
|*  2 |   HASH JOIN OUTER   |                  |   102 |  4998 |     7  (15)| 00
|   3 |    TABLE ACCESS FULL| EAM_SHIFTMAP     |   102 |  2856 |     3   (0)| 00
|   4 |    TABLE ACCESS FULL| BS_DEPARTMENTMAP |   118 |  2478 |     3   (0)| 00
|   5 |   TABLE ACCESS FULL | BS_PERSONMAP     |   730 | 24820 |     7   (0)| 00
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("A"."IDPERSON"="C"."IDOBJECT"(+))
   2 - access("A"."IDDEPARTMENT"="B"."IDOBJECT"(+))
 
18 rows selected

[/SRC]
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470820
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_myp,

какое время с хинтом rule ?
без хинта время это после ALTER TABLE ... CACHE ?
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470822
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLДавно я такой ... не страдал
А попробуй вот так:
Код: plsql
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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
         select a.idObject id
      ,a.nShiftNumber
      ,a.idDepartment
      ,b.sDepartmentCode sDep
      ,c.slname||nvl2(c.smidname||c.sfname,' ','')||substr(c.sfname,1,1)
       ||nvl2(c.sfname,'.','')||substr(c.smidname,1,1)||nvl2(c.smidname,'.','') sName
      ,k.s1 as "nManHour[1]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('01.05.2017','dd.mm.yyyy')) as "sWorks[1]"
      ,k.s2 as "nManHour[2]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('02.05.2017','dd.mm.yyyy')) as "sWorks[2]"
      ,k.s3 as "nManHour[3]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('03.05.2017','dd.mm.yyyy')) as "sWorks[3]"
      ,k.s4 as "nManHour[4]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('04.05.2017','dd.mm.yyyy')) as "sWorks[4]"
      ,k.s5 as "nManHour[5]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('05.05.2017','dd.mm.yyyy')) as "sWorks[5]"
      ,k.s6 as "nManHour[6]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('06.05.2017','dd.mm.yyyy')) as "sWorks[6]"
      ,k.s7 as "nManHour[7]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('07.05.2017','dd.mm.yyyy')) as "sWorks[7]"
      ,k.s8 as "nManHour[8]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('08.05.2017','dd.mm.yyyy')) as "sWorks[8]"
      ,k.s9 as "nManHour[9]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('09.05.2017','dd.mm.yyyy')) as "sWorks[9]"
      ,k.s10 as "nManHour[10]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('10.05.2017','dd.mm.yyyy')) as "sWorks[10]"
      ,k.s11 as "nManHour[11]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('11.05.2017','dd.mm.yyyy')) as "sWorks[11]"
      ,k.s12 as "nManHour[12]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('12.05.2017','dd.mm.yyyy')) as "sWorks[12]"
      ,k.s13 as "nManHour[13]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('13.05.2017','dd.mm.yyyy')) as "sWorks[13]"
      ,k.s14 as "nManHour[14]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('14.05.2017','dd.mm.yyyy')) as "sWorks[14]"
      ,k.s15 as "nManHour[15]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('15.05.2017','dd.mm.yyyy')) as "sWorks[15]"
      ,k.s16 as "nManHour[16]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('16.05.2017','dd.mm.yyyy')) as "sWorks[16]"
      ,k.s17 as "nManHour[17]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('17.05.2017','dd.mm.yyyy')) as "sWorks[17]"
      ,k.s18 as "nManHour[18]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('18.05.2017','dd.mm.yyyy')) as "sWorks[18]"
      ,k.s19 as "nManHour[19]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('19.05.2017','dd.mm.yyyy')) as "sWorks[19]"
      ,k.s20 as "nManHour[20]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('20.05.2017','dd.mm.yyyy')) as "sWorks[20]"
      ,k.s21 as "nManHour[21]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('21.05.2017','dd.mm.yyyy')) as "sWorks[21]"
      ,k.s22 as "nManHour[22]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('22.05.2017','dd.mm.yyyy')) as "sWorks[22]"
      ,k.s23 as "nManHour[23]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('23.05.2017','dd.mm.yyyy')) as "sWorks[23]"
      ,k.s24 as "nManHour[24]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('24.05.2017','dd.mm.yyyy')) as "sWorks[24]"
      ,k.s25 as "nManHour[25]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('25.05.2017','dd.mm.yyyy')) as "sWorks[25]"
      ,k.s26 as "nManHour[26]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('26.05.2017','dd.mm.yyyy')) as "sWorks[26]"
      ,k.s27 as "nManHour[27]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('27.05.2017','dd.mm.yyyy')) as "sWorks[27]"
      ,k.s28 as "nManHour[28]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('28.05.2017','dd.mm.yyyy')) as "sWorks[28]"
      ,k.s29 as "nManHour[29]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('29.05.2017','dd.mm.yyyy')) as "sWorks[29]"
      ,k.s30 as "nManHour[30]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('30.05.2017','dd.mm.yyyy')) as "sWorks[30]"
      ,k.s31 as "nManHour[31]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('31.05.2017','dd.mm.yyyy')) as "sWorks[31]"
from EAM_ShiftMAP a
    left join Bs_DepartmentMAP b on (a.iddepartment = b.idObject)
    left join BS_PersonMAP c on (a.idPerson = c.idObject)
    left join (    select b.idresponsible, 
sum(decode(to_char(a.dbegin,'dd'),'01', a.nmanhour)) s1,
sum(decode(to_char(a.dbegin,'dd'),'02', a.nmanhour)) s2,
sum(decode(to_char(a.dbegin,'dd'),'03', a.nmanhour)) s3,
sum(decode(to_char(a.dbegin,'dd'),'04', a.nmanhour)) s4,
sum(decode(to_char(a.dbegin,'dd'),'05', a.nmanhour)) s5,
sum(decode(to_char(a.dbegin,'dd'),'06', a.nmanhour)) s6,
sum(decode(to_char(a.dbegin,'dd'),'07', a.nmanhour)) s7,
sum(decode(to_char(a.dbegin,'dd'),'08', a.nmanhour)) s8,
sum(decode(to_char(a.dbegin,'dd'),'09', a.nmanhour)) s9,
sum(decode(to_char(a.dbegin,'dd'),'10', a.nmanhour)) s10,
sum(decode(to_char(a.dbegin,'dd'),'11', a.nmanhour)) s11,
sum(decode(to_char(a.dbegin,'dd'),'12', a.nmanhour)) s12,
sum(decode(to_char(a.dbegin,'dd'),'13', a.nmanhour)) s13,
sum(decode(to_char(a.dbegin,'dd'),'14', a.nmanhour)) s14,
sum(decode(to_char(a.dbegin,'dd'),'15', a.nmanhour)) s15,
sum(decode(to_char(a.dbegin,'dd'),'16', a.nmanhour)) s16,
sum(decode(to_char(a.dbegin,'dd'),'17', a.nmanhour)) s17,
sum(decode(to_char(a.dbegin,'dd'),'18', a.nmanhour)) s18,
sum(decode(to_char(a.dbegin,'dd'),'19', a.nmanhour)) s19,
sum(decode(to_char(a.dbegin,'dd'),'20', a.nmanhour)) s20,
sum(decode(to_char(a.dbegin,'dd'),'21', a.nmanhour)) s21,
sum(decode(to_char(a.dbegin,'dd'),'22', a.nmanhour)) s22,
sum(decode(to_char(a.dbegin,'dd'),'23', a.nmanhour)) s23,
sum(decode(to_char(a.dbegin,'dd'),'24', a.nmanhour)) s24,
sum(decode(to_char(a.dbegin,'dd'),'25', a.nmanhour)) s25,
sum(decode(to_char(a.dbegin,'dd'),'26', a.nmanhour)) s26,
sum(decode(to_char(a.dbegin,'dd'),'27', a.nmanhour)) s27,
sum(decode(to_char(a.dbegin,'dd'),'28', a.nmanhour)) s28,
sum(decode(to_char(a.dbegin,'dd'),'29', a.nmanhour)) s29,
sum(decode(to_char(a.dbegin,'dd'),'30', a.nmanhour)) s30,
sum(decode(to_char(a.dbegin,'dd'),'31', a.nmanhour)) s31
      from EAM_PlanRepairMAP a, (select distinct idresponsible, idplanrepair from Eam_ShiftrepairMAP) b
     where a.idobject = b.idplanrepair
       and a.dbegin between to_date('01.05.2017','dd.mm.yyyy') and to_date('31.05.2017 23:59:59','dd.mm.yyyy HH24:mi:ss')
group by b.idresponsible) k on (a.idObject = k.idresponsible)


такой запрос отработал за 77 секунд, штатный запрос работает 154 секунды
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470827
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!lonely_myp,

какое время с хинтом rule ?время выполнения запроса с хинтом такое же как без хинта, 154 секунды.

ALTER TABLE ... CACHE не делал.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470843
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_mypвремя выполнения запроса с хинтом такое же как без хинта, 154 секунды.

ALTER TABLE ... CACHE не делал.

если у RULE то же время, то танцы с ALTER TABLE ... CACHE или не имеют смысла.
значит надо лезть в логику запросов, избавляться от функций
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470899
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_mypMaximaXXLВы бы не могли написать подходит ли Вам скорость/загрузка для предложенного мной селекта из 20551953 сообщения
не запустился, какой-то группировки не хватает? :(
ORA-00937: not a single-group group function

Попробуй пока так и скажи время:
Код: plsql
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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
         select a.idObject id
      ,a.nShiftNumber
      ,a.idDepartment
      ,b.sDepartmentCode sDep
      ,c.slname||nvl2(c.smidname||c.sfname,' ','')||substr(c.sfname,1,1)
       ||nvl2(c.sfname,'.','')||substr(c.smidname,1,1)||nvl2(c.smidname,'.','') sName
      ,k.s1 as "nManHour[1]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c1,1,null,k.c1)) || k.sCode,'-')),'-','') as "sWorks[1]"
      ,k.s2 as "nManHour[2]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c2,1,null,k.c2)) || k.sCode,'-')),'-','') as "sWorks[2]"
      ,k.s3 as "nManHour[3]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c3,1,null,k.c3)) || k.sCode,'-')),'-','') as "sWorks[3]"
      ,k.s4 as "nManHour[4]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c4,1,null,k.c4)) || k.sCode,'-')),'-','') as "sWorks[4]"
      ,k.s5 as "nManHour[5]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c5,1,null,k.c5)) || k.sCode,'-')),'-','') as "sWorks[5]"
      ,k.s6 as "nManHour[6]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c6,1,null,k.c6)) || k.sCode,'-')),'-','') as "sWorks[6]"
      ,k.s7 as "nManHour[7]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c7,1,null,k.c7)) || k.sCode,'-')),'-','') as "sWorks[7]"
      ,k.s8 as "nManHour[8]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c8,1,null,k.c8)) || k.sCode,'-')),'-','') as "sWorks[8]"
      ,k.s9 as "nManHour[9]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c9,1,null,k.c9)) || k.sCode,'-')),'-','') as "sWorks[9]"
      ,k.s10 as "nManHour[10]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c10,1,null,k.c10)) || k.sCode,'-')),'-','') as "sWorks[10]"
      ,k.s11 as "nManHour[11]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c11,1,null,k.c11)) || k.sCode,'-')),'-','') as "sWorks[11]"
      ,k.s12 as "nManHour[12]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c12,1,null,k.c12)) || k.sCode,'-')),'-','') as "sWorks[12]"
      ,k.s13 as "nManHour[13]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c13,1,null,k.c13)) || k.sCode,'-')),'-','') as "sWorks[13]"
      ,k.s14 as "nManHour[14]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c14,1,null,k.c14)) || k.sCode,'-')),'-','') as "sWorks[14]"
      ,k.s15 as "nManHour[15]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c15,1,null,k.c15)) || k.sCode,'-')),'-','') as "sWorks[15]"
      ,k.s16 as "nManHour[16]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c16,1,null,k.c16)) || k.sCode,'-')),'-','') as "sWorks[16]"
      ,k.s17 as "nManHour[17]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c17,1,null,k.c17)) || k.sCode,'-')),'-','') as "sWorks[17]"
      ,k.s18 as "nManHour[18]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c18,1,null,k.c18)) || k.sCode,'-')),'-','') as "sWorks[18]"
      ,k.s19 as "nManHour[19]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c19,1,null,k.c19)) || k.sCode,'-')),'-','') as "sWorks[19]"
      ,k.s20 as "nManHour[20]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c20,1,null,k.c20)) || k.sCode,'-')),'-','') as "sWorks[20]"
      ,k.s21 as "nManHour[21]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c21,1,null,k.c21)) || k.sCode,'-')),'-','') as "sWorks[21]"
      ,k.s22 as "nManHour[22]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c22,1,null,k.c22)) || k.sCode,'-')),'-','') as "sWorks[22]"
      ,k.s23 as "nManHour[23]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c23,1,null,k.c23)) || k.sCode,'-')),'-','') as "sWorks[23]"
      ,k.s24 as "nManHour[24]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c24,1,null,k.c24)) || k.sCode,'-')),'-','') as "sWorks[24]"
      ,k.s25 as "nManHour[25]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c25,1,null,k.c25)) || k.sCode,'-')),'-','') as "sWorks[25]"
      ,k.s26 as "nManHour[26]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c26,1,null,k.c26)) || k.sCode,'-')),'-','') as "sWorks[26]"
      ,k.s27 as "nManHour[27]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c27,1,null,k.c27)) || k.sCode,'-')),'-','') as "sWorks[27]"
      ,k.s28 as "nManHour[28]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c28,1,null,k.c28)) || k.sCode,'-')),'-','') as "sWorks[28]"
      ,k.s29 as "nManHour[29]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c29,1,null,k.c29)) || k.sCode,'-')),'-','') as "sWorks[29]"
      ,k.s30 as "nManHour[30]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c30,1,null,k.c30)) || k.sCode,'-')),'-','') as "sWorks[30]"
      ,k.s31 as "nManHour[31]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c31,1,null,k.c31)) || k.sCode,'-')),'-','') as "sWorks[31]"
from EAM_ShiftMAP a
    left join Bs_DepartmentMAP b on (a.iddepartment = b.idObject)
    left join BS_PersonMAP c on (a.idPerson = c.idObject)
    left join (    select b.idresponsible,  a.idtyperepair sCode,
sum(decode(to_char(a.dbegin,'dd'),'01', a.nmanhour)) s1,  count(decode(to_char(a.dbegin,'dd'),'01', 1)) c1,  
sum(decode(to_char(a.dbegin,'dd'),'02', a.nmanhour)) s2,  count(decode(to_char(a.dbegin,'dd'),'02', 1)) c2,  
sum(decode(to_char(a.dbegin,'dd'),'03', a.nmanhour)) s3,  count(decode(to_char(a.dbegin,'dd'),'03', 1)) c3,  
sum(decode(to_char(a.dbegin,'dd'),'04', a.nmanhour)) s4,  count(decode(to_char(a.dbegin,'dd'),'04', 1)) c4,  
sum(decode(to_char(a.dbegin,'dd'),'05', a.nmanhour)) s5,  count(decode(to_char(a.dbegin,'dd'),'05', 1)) c5,  
sum(decode(to_char(a.dbegin,'dd'),'06', a.nmanhour)) s6,  count(decode(to_char(a.dbegin,'dd'),'06', 1)) c6,  
sum(decode(to_char(a.dbegin,'dd'),'07', a.nmanhour)) s7,  count(decode(to_char(a.dbegin,'dd'),'07', 1)) c7,  
sum(decode(to_char(a.dbegin,'dd'),'08', a.nmanhour)) s8,  count(decode(to_char(a.dbegin,'dd'),'08', 1)) c8,  
sum(decode(to_char(a.dbegin,'dd'),'09', a.nmanhour)) s9,  count(decode(to_char(a.dbegin,'dd'),'09', 1)) c9,  
sum(decode(to_char(a.dbegin,'dd'),'10', a.nmanhour)) s10, count(decode(to_char(a.dbegin,'dd'),'10', 1)) c10, 
sum(decode(to_char(a.dbegin,'dd'),'11', a.nmanhour)) s11, count(decode(to_char(a.dbegin,'dd'),'11', 1)) c11, 
sum(decode(to_char(a.dbegin,'dd'),'12', a.nmanhour)) s12, count(decode(to_char(a.dbegin,'dd'),'12', 1)) c12, 
sum(decode(to_char(a.dbegin,'dd'),'13', a.nmanhour)) s13, count(decode(to_char(a.dbegin,'dd'),'13', 1)) c13, 
sum(decode(to_char(a.dbegin,'dd'),'14', a.nmanhour)) s14, count(decode(to_char(a.dbegin,'dd'),'14', 1)) c14, 
sum(decode(to_char(a.dbegin,'dd'),'15', a.nmanhour)) s15, count(decode(to_char(a.dbegin,'dd'),'15', 1)) c15, 
sum(decode(to_char(a.dbegin,'dd'),'16', a.nmanhour)) s16, count(decode(to_char(a.dbegin,'dd'),'16', 1)) c16, 
sum(decode(to_char(a.dbegin,'dd'),'17', a.nmanhour)) s17, count(decode(to_char(a.dbegin,'dd'),'17', 1)) c17, 
sum(decode(to_char(a.dbegin,'dd'),'18', a.nmanhour)) s18, count(decode(to_char(a.dbegin,'dd'),'18', 1)) c18, 
sum(decode(to_char(a.dbegin,'dd'),'19', a.nmanhour)) s19, count(decode(to_char(a.dbegin,'dd'),'19', 1)) c19, 
sum(decode(to_char(a.dbegin,'dd'),'20', a.nmanhour)) s20, count(decode(to_char(a.dbegin,'dd'),'20', 1)) c20, 
sum(decode(to_char(a.dbegin,'dd'),'21', a.nmanhour)) s21, count(decode(to_char(a.dbegin,'dd'),'21', 1)) c21, 
sum(decode(to_char(a.dbegin,'dd'),'22', a.nmanhour)) s22, count(decode(to_char(a.dbegin,'dd'),'22', 1)) c22, 
sum(decode(to_char(a.dbegin,'dd'),'23', a.nmanhour)) s23, count(decode(to_char(a.dbegin,'dd'),'23', 1)) c23, 
sum(decode(to_char(a.dbegin,'dd'),'24', a.nmanhour)) s24, count(decode(to_char(a.dbegin,'dd'),'24', 1)) c24, 
sum(decode(to_char(a.dbegin,'dd'),'25', a.nmanhour)) s25, count(decode(to_char(a.dbegin,'dd'),'25', 1)) c25, 
sum(decode(to_char(a.dbegin,'dd'),'26', a.nmanhour)) s26, count(decode(to_char(a.dbegin,'dd'),'26', 1)) c26, 
sum(decode(to_char(a.dbegin,'dd'),'27', a.nmanhour)) s27, count(decode(to_char(a.dbegin,'dd'),'27', 1)) c27, 
sum(decode(to_char(a.dbegin,'dd'),'28', a.nmanhour)) s28, count(decode(to_char(a.dbegin,'dd'),'28', 1)) c28, 
sum(decode(to_char(a.dbegin,'dd'),'29', a.nmanhour)) s29, count(decode(to_char(a.dbegin,'dd'),'29', 1)) c29, 
sum(decode(to_char(a.dbegin,'dd'),'30', a.nmanhour)) s30, count(decode(to_char(a.dbegin,'dd'),'30', 1)) c30, 
sum(decode(to_char(a.dbegin,'dd'),'31', a.nmanhour)) s31, count(decode(to_char(a.dbegin,'dd'),'31', 1)) c31  
      from EAM_PlanRepairMAP a, (select distinct idresponsible, idplanrepair from Eam_ShiftrepairMAP) b
     where a.idobject = b.idplanrepair
       and a.dbegin between to_date('01.05.2017','dd.mm.yyyy') and to_date('31.05.2017 23:59:59','dd.mm.yyyy HH24:mi:ss')
group by b.idresponsible, a.idtyperepair) k on (a.idObject = k.idresponsible)

...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470907
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_myp,

и покажи плиз эти функции
1. straggrd
2. straggrdargs
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470928
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю поедать осетра по частям. Начав с самого просто )))

GetManHour - проста как 3-и копейки

Как я понимаю, народ просто пытается подсчитать сумму по PlanRepairMAP на заданную дату если idobject присутствует в Eam_ShiftrepairMAP с нужным idresponsible. Просто join не сделать, т.к. у них могут быть дубли

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function GetManHour(idpShift in number, dpDate in date) return number as
    result number;
  begin
    select sum(a.nmanhour)
      into result
      from EAM_PlanRepairMAP a,
           (select b.idplanrepair
              from Eam_ShiftrepairMAP b
             where b.idresponsible = idpShift
             group by b.idplanrepair) b
     where a.idobject = b.idplanrepair
       and trunc(a.dbegin) = dpDate;
    return result;
  end;




Я бы этот селект написал так (into выкинул):

Код: sql
1.
2.
3.
4.
5.
6.
7.
select sum(a.nmanhour)
  into result
  from EAM_PlanRepairMAP a
  where a.idobject in (select b.idplanrepair
      from Eam_ShiftrepairMAP b
      where b.idresponsible = idpShift and b.idplanrepair is not null)
    and trunc(a.dbegin) = dpDate;


или так (правильный вариант зависит от распределения данных по таблицам)
Код: sql
1.
2.
3.
4.
5.
6.
7.
select sum(a.nmanhour)
  into result
  from EAM_PlanRepairMAP a
  where exists (select b.idplanrepair
    from Eam_ShiftrepairMAP b
    where b.idresponsible = idpShift and b.idresponsible=a.idobject)
    and trunc(a.dbegin) = dpDate;



Чисто эстетически, мне вариант с in нравится больше. Дополнительно воткнул там проверку на b.idplanrepair is not null. Я такого обычно не делаю, воткнул на всякий случай.

Соответственно, сюда нужны индексы (колонки из select list тоже включил, для максимум performance):

1) Для первого варианта с in:
create index z11 on Eam_ShiftrepairMAP (idresponsible, idplanrepair);
create index z12 on EAM_PlanRepairMAP (trunc(dbegin), idobject, nmanhour)

2) Для второго варианта с exists
create index z21 on Eam_ShiftrepairMAP (idresponsible, idplanrepair);
create index z22 on EAM_PlanRepairMAP (trunc(dbegin), nmanhour);

IMHO & AFAIK

Надеюсь не ошибаюсь. Смотрим на план и радуемся. Индексы лучше называть пока как нибудь бредово, что бы потом легко в базе было эксперементы найти и удалить.

Как автор топика собирается все свои доработки оформлять и документировать, я не знаю ))) подозреваю, кранты базе и саппорту ))) Лично я со стороны разработчика на это бы смотрел крайне настороженно

Но это дело автора и его работодателей.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39470932
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с exists немного ошибся (copy/past), но не принципиально
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39471250
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevЯ бы этот селект написал так (into выкинул):

Код: sql
1.
2.
3.
4.
5.
6.
7.
select sum(a.nmanhour)
  into result
  from EAM_PlanRepairMAP a
  where a.idobject in (select b.idplanrepair
      from Eam_ShiftrepairMAP b
      where b.idresponsible = idpShift and b.idplanrepair is not null)
    and trunc(a.dbegin) = dpDate;


с ним тестовый запрос прошёл за 78 секунд (штатно 154 с.)

Leonid KudryavtsevКак автор топика собирается все свои доработки оформлять и документировать, я не знаю )))
подозреваю, кранты базе и саппорту ))) Лично я со стороны разработчика на это бы смотрел крайне настороженно
Но это дело автора и его работодателей.
договор саппорта закончился года 3 назад. как иногда бывает, интерес разработчика угас сразу же после подписания договора, доработка оценённая в 3 человекочаса могла тянуться несколько месяцев, включая такие грязные приёмы как "мы вам ещё вчера всё сделали, не знаем почему у вас ничего не изменилось, завтра программист ещё раз перепроверит"
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39471258
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLlonely_myp,

и покажи плиз эти функции
1. straggrd
2. straggrdargs
Код: plsql
1.
2.
3.
CREATE OR REPLACE FUNCTION StrAggrD( input in StrAggrDArgs )
  RETURN varchar2
  PARALLEL_ENABLE AGGREGATE USING String_AggD_Type;


Код: plsql
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.
create or replace type body String_AggD_Type
is
  static function ODCIAggregateInitialize(sctx IN OUT String_AggD_Type)
  return number
  is
  begin
     sctx := String_AggD_Type( null, null );
     return ODCIConst.Success;
  end;

  member function ODCIAggregateIterate(self IN OUT String_AggD_Type,
                                       value IN StrAggrDArgs )
  return number
  is
  begin
   if value.str is not null then
     self.svString := substr(self.svString||value.del||value.str,1,4000);
   end if;
   if self.svDelim is null then
     self.svDelim := value.del;
   end if;
   return ODCIConst.Success;
  end;

  member function ODCIAggregateTerminate(self IN String_AggD_Type,
                                         returnValue OUT varchar2,
                                         flags IN number)
  return number
  is
  begin
      returnValue := substr(self.svString, length(self.svDelim)+1, length(self.svString) );
      return ODCIConst.Success;
  end;

  member function ODCIAggregateMerge(self IN OUT String_AggD_Type,
                                     ctx2 IN String_AggD_Type)
  return number
  is
  begin
     self.svString := substr(self.svString||self.svDelim||ctx2.svString,1,4000);
     return ODCIConst.Success;
  end;
end;

...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39471260
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_mypдоговор саппорта закончился года 3 назад. как иногда бывает, интерес разработчика угас сразу же после подписания договора, доработка оценённая в 3 человекочаса могла тянуться несколько месяцев, включая такие грязные приёмы как "мы вам ещё вчера всё сделали, не знаем почему у вас ничего не изменилось, завтра программист ещё раз перепроверит"

ну если договора саппорта нет, тогда в общем претензий предъявлять некому
другое дело, есть ли исходные коды в собираемом виде

lonely_mypс ним тестовый запрос прошёл за 78 секунд (штатно 154 с.)

"тестовый запрос" - это который весь огромный?
тогда это крайне не плохо, одно узкое место убралось, осталось второе

но лучше - в скайпе, правда до сегодняшнего дня я был свободен, а сегодняшя-завтра новая работа
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39471263
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В GetWorks соответственно аналогично.
Ну и планы хорошо бы видеть, исчезли ли hash join'ы и доступ к таблицам
А лучше экран с pl/sql developer через skype
[spoiler]
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select a.idtyperepair, count(*) nCount
              from EAM_PlanRepairMAP a,
                   (select b.idplanrepair
                      from Eam_ShiftrepairMAP b
                     where b.idresponsible = idpShift
                     group by b.idplanrepair) b
             where a.idobject = b.idplanrepair
               and trunc(a.dbegin) = dpDate
             group by a.idtyperepair) a,


==>
group by & join на in
count(*) заменить на count(1)
Код: sql
1.
2.
3.
4.
5.
6.
7.
(select a.idtyperepair, count(1) nCount
              from EAM_PlanRepairMAP a
             where a.idobject = in (select b.idplanrepair
                      from Eam_ShiftrepairMAP b
                     where b.idresponsible = idpShift and b.idplanrepair is not null)
               and trunc(a.dbegin) = dpDate
             group by a.idtyperepair) a,



[spoiler]
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39471268
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В GetWorks соответственно аналогично.
Ну и планы хорошо бы видеть, исчезли ли hash join'ы и доступ к таблицам
А лучше экран с pl/sql developer через skype

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
(select a.idtyperepair, count(*) nCount
              from EAM_PlanRepairMAP a,
                   (select b.idplanrepair
                      from Eam_ShiftrepairMAP b
                     where b.idresponsible = idpShift
                     group by b.idplanrepair) b
             where a.idobject = b.idplanrepair
               and trunc(a.dbegin) = dpDate
             group by a.idtyperepair) a,


==>
group by & join на in
count(*) заменить на count(1)
Код: sql
1.
2.
3.
4.
5.
6.
7.
(select a.idtyperepair, count(1) nCount
              from EAM_PlanRepairMAP a
             where a.idobject in (select b.idplanrepair
                      from Eam_ShiftrepairMAP b
                     where b.idresponsible = idpShift and b.idplanrepair is not null)
               and trunc(a.dbegin) = dpDate
             group by a.idtyperepair) a,



...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39471278
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLПопробуй пока так и скажи время:
Код: plsql
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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
         select a.idObject id
      ,a.nShiftNumber
      ,a.idDepartment
      ,b.sDepartmentCode sDep
      ,c.slname||nvl2(c.smidname||c.sfname,' ','')||substr(c.sfname,1,1)
       ||nvl2(c.sfname,'.','')||substr(c.smidname,1,1)||nvl2(c.smidname,'.','') sName
      ,k.s1 as "nManHour[1]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c1,1,null,k.c1)) || k.sCode,'-')),'-','') as "sWorks[1]"
      ,k.s2 as "nManHour[2]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c2,1,null,k.c2)) || k.sCode,'-')),'-','') as "sWorks[2]"
      ,k.s3 as "nManHour[3]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c3,1,null,k.c3)) || k.sCode,'-')),'-','') as "sWorks[3]"
      ,k.s4 as "nManHour[4]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c4,1,null,k.c4)) || k.sCode,'-')),'-','') as "sWorks[4]"
      ,k.s5 as "nManHour[5]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c5,1,null,k.c5)) || k.sCode,'-')),'-','') as "sWorks[5]"
      ,k.s6 as "nManHour[6]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c6,1,null,k.c6)) || k.sCode,'-')),'-','') as "sWorks[6]"
      ,k.s7 as "nManHour[7]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c7,1,null,k.c7)) || k.sCode,'-')),'-','') as "sWorks[7]"
      ,k.s8 as "nManHour[8]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c8,1,null,k.c8)) || k.sCode,'-')),'-','') as "sWorks[8]"
      ,k.s9 as "nManHour[9]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c9,1,null,k.c9)) || k.sCode,'-')),'-','') as "sWorks[9]"
      ,k.s10 as "nManHour[10]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c10,1,null,k.c10)) || k.sCode,'-')),'-','') as "sWorks[10]"
      ,k.s11 as "nManHour[11]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c11,1,null,k.c11)) || k.sCode,'-')),'-','') as "sWorks[11]"
      ,k.s12 as "nManHour[12]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c12,1,null,k.c12)) || k.sCode,'-')),'-','') as "sWorks[12]"
      ,k.s13 as "nManHour[13]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c13,1,null,k.c13)) || k.sCode,'-')),'-','') as "sWorks[13]"
      ,k.s14 as "nManHour[14]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c14,1,null,k.c14)) || k.sCode,'-')),'-','') as "sWorks[14]"
      ,k.s15 as "nManHour[15]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c15,1,null,k.c15)) || k.sCode,'-')),'-','') as "sWorks[15]"
      ,k.s16 as "nManHour[16]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c16,1,null,k.c16)) || k.sCode,'-')),'-','') as "sWorks[16]"
      ,k.s17 as "nManHour[17]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c17,1,null,k.c17)) || k.sCode,'-')),'-','') as "sWorks[17]"
      ,k.s18 as "nManHour[18]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c18,1,null,k.c18)) || k.sCode,'-')),'-','') as "sWorks[18]"
      ,k.s19 as "nManHour[19]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c19,1,null,k.c19)) || k.sCode,'-')),'-','') as "sWorks[19]"
      ,k.s20 as "nManHour[20]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c20,1,null,k.c20)) || k.sCode,'-')),'-','') as "sWorks[20]"
      ,k.s21 as "nManHour[21]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c21,1,null,k.c21)) || k.sCode,'-')),'-','') as "sWorks[21]"
      ,k.s22 as "nManHour[22]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c22,1,null,k.c22)) || k.sCode,'-')),'-','') as "sWorks[22]"
      ,k.s23 as "nManHour[23]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c23,1,null,k.c23)) || k.sCode,'-')),'-','') as "sWorks[23]"
      ,k.s24 as "nManHour[24]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c24,1,null,k.c24)) || k.sCode,'-')),'-','') as "sWorks[24]"
      ,k.s25 as "nManHour[25]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c25,1,null,k.c25)) || k.sCode,'-')),'-','') as "sWorks[25]"
      ,k.s26 as "nManHour[26]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c26,1,null,k.c26)) || k.sCode,'-')),'-','') as "sWorks[26]"
      ,k.s27 as "nManHour[27]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c27,1,null,k.c27)) || k.sCode,'-')),'-','') as "sWorks[27]"
      ,k.s28 as "nManHour[28]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c28,1,null,k.c28)) || k.sCode,'-')),'-','') as "sWorks[28]"
      ,k.s29 as "nManHour[29]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c29,1,null,k.c29)) || k.sCode,'-')),'-','') as "sWorks[29]"
      ,k.s30 as "nManHour[30]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c30,1,null,k.c30)) || k.sCode,'-')),'-','') as "sWorks[30]"
      ,k.s31 as "nManHour[31]"
      ,replace(straggrd(straggrdargs(to_char(decode(k.c31,1,null,k.c31)) || k.sCode,'-')),'-','') as "sWorks[31]"
from EAM_ShiftMAP a
    left join Bs_DepartmentMAP b on (a.iddepartment = b.idObject)
    left join BS_PersonMAP c on (a.idPerson = c.idObject)
    left join (    select b.idresponsible,  a.idtyperepair sCode,
sum(decode(to_char(a.dbegin,'dd'),'01', a.nmanhour)) s1,  count(decode(to_char(a.dbegin,'dd'),'01', 1)) c1,  
sum(decode(to_char(a.dbegin,'dd'),'02', a.nmanhour)) s2,  count(decode(to_char(a.dbegin,'dd'),'02', 1)) c2,  
sum(decode(to_char(a.dbegin,'dd'),'03', a.nmanhour)) s3,  count(decode(to_char(a.dbegin,'dd'),'03', 1)) c3,  
sum(decode(to_char(a.dbegin,'dd'),'04', a.nmanhour)) s4,  count(decode(to_char(a.dbegin,'dd'),'04', 1)) c4,  
sum(decode(to_char(a.dbegin,'dd'),'05', a.nmanhour)) s5,  count(decode(to_char(a.dbegin,'dd'),'05', 1)) c5,  
sum(decode(to_char(a.dbegin,'dd'),'06', a.nmanhour)) s6,  count(decode(to_char(a.dbegin,'dd'),'06', 1)) c6,  
sum(decode(to_char(a.dbegin,'dd'),'07', a.nmanhour)) s7,  count(decode(to_char(a.dbegin,'dd'),'07', 1)) c7,  
sum(decode(to_char(a.dbegin,'dd'),'08', a.nmanhour)) s8,  count(decode(to_char(a.dbegin,'dd'),'08', 1)) c8,  
sum(decode(to_char(a.dbegin,'dd'),'09', a.nmanhour)) s9,  count(decode(to_char(a.dbegin,'dd'),'09', 1)) c9,  
sum(decode(to_char(a.dbegin,'dd'),'10', a.nmanhour)) s10, count(decode(to_char(a.dbegin,'dd'),'10', 1)) c10, 
sum(decode(to_char(a.dbegin,'dd'),'11', a.nmanhour)) s11, count(decode(to_char(a.dbegin,'dd'),'11', 1)) c11, 
sum(decode(to_char(a.dbegin,'dd'),'12', a.nmanhour)) s12, count(decode(to_char(a.dbegin,'dd'),'12', 1)) c12, 
sum(decode(to_char(a.dbegin,'dd'),'13', a.nmanhour)) s13, count(decode(to_char(a.dbegin,'dd'),'13', 1)) c13, 
sum(decode(to_char(a.dbegin,'dd'),'14', a.nmanhour)) s14, count(decode(to_char(a.dbegin,'dd'),'14', 1)) c14, 
sum(decode(to_char(a.dbegin,'dd'),'15', a.nmanhour)) s15, count(decode(to_char(a.dbegin,'dd'),'15', 1)) c15, 
sum(decode(to_char(a.dbegin,'dd'),'16', a.nmanhour)) s16, count(decode(to_char(a.dbegin,'dd'),'16', 1)) c16, 
sum(decode(to_char(a.dbegin,'dd'),'17', a.nmanhour)) s17, count(decode(to_char(a.dbegin,'dd'),'17', 1)) c17, 
sum(decode(to_char(a.dbegin,'dd'),'18', a.nmanhour)) s18, count(decode(to_char(a.dbegin,'dd'),'18', 1)) c18, 
sum(decode(to_char(a.dbegin,'dd'),'19', a.nmanhour)) s19, count(decode(to_char(a.dbegin,'dd'),'19', 1)) c19, 
sum(decode(to_char(a.dbegin,'dd'),'20', a.nmanhour)) s20, count(decode(to_char(a.dbegin,'dd'),'20', 1)) c20, 
sum(decode(to_char(a.dbegin,'dd'),'21', a.nmanhour)) s21, count(decode(to_char(a.dbegin,'dd'),'21', 1)) c21, 
sum(decode(to_char(a.dbegin,'dd'),'22', a.nmanhour)) s22, count(decode(to_char(a.dbegin,'dd'),'22', 1)) c22, 
sum(decode(to_char(a.dbegin,'dd'),'23', a.nmanhour)) s23, count(decode(to_char(a.dbegin,'dd'),'23', 1)) c23, 
sum(decode(to_char(a.dbegin,'dd'),'24', a.nmanhour)) s24, count(decode(to_char(a.dbegin,'dd'),'24', 1)) c24, 
sum(decode(to_char(a.dbegin,'dd'),'25', a.nmanhour)) s25, count(decode(to_char(a.dbegin,'dd'),'25', 1)) c25, 
sum(decode(to_char(a.dbegin,'dd'),'26', a.nmanhour)) s26, count(decode(to_char(a.dbegin,'dd'),'26', 1)) c26, 
sum(decode(to_char(a.dbegin,'dd'),'27', a.nmanhour)) s27, count(decode(to_char(a.dbegin,'dd'),'27', 1)) c27, 
sum(decode(to_char(a.dbegin,'dd'),'28', a.nmanhour)) s28, count(decode(to_char(a.dbegin,'dd'),'28', 1)) c28, 
sum(decode(to_char(a.dbegin,'dd'),'29', a.nmanhour)) s29, count(decode(to_char(a.dbegin,'dd'),'29', 1)) c29, 
sum(decode(to_char(a.dbegin,'dd'),'30', a.nmanhour)) s30, count(decode(to_char(a.dbegin,'dd'),'30', 1)) c30, 
sum(decode(to_char(a.dbegin,'dd'),'31', a.nmanhour)) s31, count(decode(to_char(a.dbegin,'dd'),'31', 1)) c31  
      from EAM_PlanRepairMAP a, (select distinct idresponsible, idplanrepair from Eam_ShiftrepairMAP) b
     where a.idobject = b.idplanrepair
       and a.dbegin between to_date('01.05.2017','dd.mm.yyyy') and to_date('31.05.2017 23:59:59','dd.mm.yyyy HH24:mi:ss')
group by b.idresponsible, a.idtyperepair) k on (a.idObject = k.idresponsible)


вот именно этот не работает, ORA-00937: not a single-group group function


а вот этот вот работает:
Код: plsql
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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
    select a.idObject id
      ,a.nShiftNumber
      ,a.idDepartment
      ,b.sDepartmentCode sDep
      ,c.slname||nvl2(c.smidname||c.sfname,' ','')||substr(c.sfname,1,1)
       ||nvl2(c.sfname,'.','')||substr(c.smidname,1,1)||nvl2(c.smidname,'.','') sName
      ,k.s1 as "nManHour[1]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('01.05.2017','dd.mm.yyyy')) as "sWorks[1]"
      ,k.s2 as "nManHour[2]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('02.05.2017','dd.mm.yyyy')) as "sWorks[2]"
      ,k.s3 as "nManHour[3]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('03.05.2017','dd.mm.yyyy')) as "sWorks[3]"
      ,k.s4 as "nManHour[4]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('04.05.2017','dd.mm.yyyy')) as "sWorks[4]"
      ,k.s5 as "nManHour[5]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('05.05.2017','dd.mm.yyyy')) as "sWorks[5]"
      ,k.s6 as "nManHour[6]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('06.05.2017','dd.mm.yyyy')) as "sWorks[6]"
      ,k.s7 as "nManHour[7]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('07.05.2017','dd.mm.yyyy')) as "sWorks[7]"
      ,k.s8 as "nManHour[8]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('08.05.2017','dd.mm.yyyy')) as "sWorks[8]"
      ,k.s9 as "nManHour[9]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('09.05.2017','dd.mm.yyyy')) as "sWorks[9]"
      ,k.s10 as "nManHour[10]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('10.05.2017','dd.mm.yyyy')) as "sWorks[10]"
      ,k.s11 as "nManHour[11]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('11.05.2017','dd.mm.yyyy')) as "sWorks[11]"
      ,k.s12 as "nManHour[12]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('12.05.2017','dd.mm.yyyy')) as "sWorks[12]"
      ,k.s13 as "nManHour[13]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('13.05.2017','dd.mm.yyyy')) as "sWorks[13]"
      ,k.s14 as "nManHour[14]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('14.05.2017','dd.mm.yyyy')) as "sWorks[14]"
      ,k.s15 as "nManHour[15]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('15.05.2017','dd.mm.yyyy')) as "sWorks[15]"
      ,k.s16 as "nManHour[16]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('16.05.2017','dd.mm.yyyy')) as "sWorks[16]"
      ,k.s17 as "nManHour[17]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('17.05.2017','dd.mm.yyyy')) as "sWorks[17]"
      ,k.s18 as "nManHour[18]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('18.05.2017','dd.mm.yyyy')) as "sWorks[18]"
      ,k.s19 as "nManHour[19]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('19.05.2017','dd.mm.yyyy')) as "sWorks[19]"
      ,k.s20 as "nManHour[20]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('20.05.2017','dd.mm.yyyy')) as "sWorks[20]"
      ,k.s21 as "nManHour[21]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('21.05.2017','dd.mm.yyyy')) as "sWorks[21]"
      ,k.s22 as "nManHour[22]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('22.05.2017','dd.mm.yyyy')) as "sWorks[22]"
      ,k.s23 as "nManHour[23]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('23.05.2017','dd.mm.yyyy')) as "sWorks[23]"
      ,k.s24 as "nManHour[24]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('24.05.2017','dd.mm.yyyy')) as "sWorks[24]"
      ,k.s25 as "nManHour[25]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('25.05.2017','dd.mm.yyyy')) as "sWorks[25]"
      ,k.s26 as "nManHour[26]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('26.05.2017','dd.mm.yyyy')) as "sWorks[26]"
      ,k.s27 as "nManHour[27]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('27.05.2017','dd.mm.yyyy')) as "sWorks[27]"
      ,k.s28 as "nManHour[28]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('28.05.2017','dd.mm.yyyy')) as "sWorks[28]"
      ,k.s29 as "nManHour[29]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('29.05.2017','dd.mm.yyyy')) as "sWorks[29]"
      ,k.s30 as "nManHour[30]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('30.05.2017','dd.mm.yyyy')) as "sWorks[30]"
      ,k.s31 as "nManHour[31]"
      ,EAM_SetResponsible.GetWorks(a.idObject,to_date('31.05.2017','dd.mm.yyyy')) as "sWorks[31]"
from EAM_ShiftMAP a
    left join Bs_DepartmentMAP b on (a.iddepartment = b.idObject)
    left join BS_PersonMAP c on (a.idPerson = c.idObject)
    left join (    select b.idresponsible, 
sum(decode(to_char(a.dbegin,'dd'),'01', a.nmanhour)) s1,
sum(decode(to_char(a.dbegin,'dd'),'02', a.nmanhour)) s2,
sum(decode(to_char(a.dbegin,'dd'),'03', a.nmanhour)) s3,
sum(decode(to_char(a.dbegin,'dd'),'04', a.nmanhour)) s4,
sum(decode(to_char(a.dbegin,'dd'),'05', a.nmanhour)) s5,
sum(decode(to_char(a.dbegin,'dd'),'06', a.nmanhour)) s6,
sum(decode(to_char(a.dbegin,'dd'),'07', a.nmanhour)) s7,
sum(decode(to_char(a.dbegin,'dd'),'08', a.nmanhour)) s8,
sum(decode(to_char(a.dbegin,'dd'),'09', a.nmanhour)) s9,
sum(decode(to_char(a.dbegin,'dd'),'10', a.nmanhour)) s10,
sum(decode(to_char(a.dbegin,'dd'),'11', a.nmanhour)) s11,
sum(decode(to_char(a.dbegin,'dd'),'12', a.nmanhour)) s12,
sum(decode(to_char(a.dbegin,'dd'),'13', a.nmanhour)) s13,
sum(decode(to_char(a.dbegin,'dd'),'14', a.nmanhour)) s14,
sum(decode(to_char(a.dbegin,'dd'),'15', a.nmanhour)) s15,
sum(decode(to_char(a.dbegin,'dd'),'16', a.nmanhour)) s16,
sum(decode(to_char(a.dbegin,'dd'),'17', a.nmanhour)) s17,
sum(decode(to_char(a.dbegin,'dd'),'18', a.nmanhour)) s18,
sum(decode(to_char(a.dbegin,'dd'),'19', a.nmanhour)) s19,
sum(decode(to_char(a.dbegin,'dd'),'20', a.nmanhour)) s20,
sum(decode(to_char(a.dbegin,'dd'),'21', a.nmanhour)) s21,
sum(decode(to_char(a.dbegin,'dd'),'22', a.nmanhour)) s22,
sum(decode(to_char(a.dbegin,'dd'),'23', a.nmanhour)) s23,
sum(decode(to_char(a.dbegin,'dd'),'24', a.nmanhour)) s24,
sum(decode(to_char(a.dbegin,'dd'),'25', a.nmanhour)) s25,
sum(decode(to_char(a.dbegin,'dd'),'26', a.nmanhour)) s26,
sum(decode(to_char(a.dbegin,'dd'),'27', a.nmanhour)) s27,
sum(decode(to_char(a.dbegin,'dd'),'28', a.nmanhour)) s28,
sum(decode(to_char(a.dbegin,'dd'),'29', a.nmanhour)) s29,
sum(decode(to_char(a.dbegin,'dd'),'30', a.nmanhour)) s30,
sum(decode(to_char(a.dbegin,'dd'),'31', a.nmanhour)) s31
      from EAM_PlanRepairMAP a, (select distinct idresponsible, idplanrepair from Eam_ShiftrepairMAP) b
     where a.idobject = b.idplanrepair
       and a.dbegin between to_date('01.05.2017','dd.mm.yyyy') and to_date('31.05.2017 23:59:59','dd.mm.yyyy HH24:mi:ss')
group by b.idresponsible) k on (a.idObject = k.idresponsible)

...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39471288
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevВ GetWorks соответственно аналогично.
Ну и планы хорошо бы видеть, исчезли ли hash join'ы и доступ к таблицам
А лучше экран с pl/sql developer через skype

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
(select a.idtyperepair, count(*) nCount
              from EAM_PlanRepairMAP a,
                   (select b.idplanrepair
                      from Eam_ShiftrepairMAP b
                     where b.idresponsible = idpShift
                     group by b.idplanrepair) b
             where a.idobject = b.idplanrepair
               and trunc(a.dbegin) = dpDate
             group by a.idtyperepair) a,


==>
group by & join на in
count(*) заменить на count(1)
Код: sql
1.
2.
3.
4.
5.
6.
7.
(select a.idtyperepair, count(1) nCount
              from EAM_PlanRepairMAP a
             where a.idobject in (select b.idplanrepair
                      from Eam_ShiftrepairMAP b
                     where b.idresponsible = idpShift and b.idplanrepair is not null)
               and trunc(a.dbegin) = dpDate
             group by a.idtyperepair) a,




ускорилось с 78 секунд до 51 секунды.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39471290
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так понимаю что бяда моя непоправима, тормоза заложены разработчиками в самой базе

Здорово конечно что в 3 раза ускорился один запрос, но к моему сожалению там везде так...
банальная операция, просто открыть для просмотра перечень оборудования и то занимает 7 секунд.
тоесть юзер нажимает кнопку "открыть" и лишь через 7 секунд отображается окно с двадцатью строчками.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39471375
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_mypЯ так понимаю что бяда моя непоправима, тормоза заложены разработчиками в самой базе

Здорово конечно что в 3 раза ускорился один запрос, но к моему сожалению там везде так...
банальная операция, просто открыть для просмотра перечень оборудования и то занимает 7 секунд.
тоесть юзер нажимает кнопку "открыть" и лишь через 7 секунд отображается окно с двадцатью строчками.

да, с таким дизайном системы, функция в функции, запускает функцию, мало чего можно придумать. все у вас упирается в процы. апгрейд процессоров, типа с 2.13Ghz на 3.8Ghz в лучшем случае в двое ускорит, т.е. особо не поможет. если бы упиралось в и/о, можно было бы жонглировать райдами, ssd, кешами ... но тут и/о считай и нет.

но я бы прежде чем принимать окончательное решение все таки пригласил бы ораклового спеца, который бы все таки глянул живую систему и подтвердил бы диагноз. у меня все равно ощущение что на столь крошечных табличках, которые в памяти, все должно шустрее шевелиться, но очевидных косяков вроде уже не видно.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39471383
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в смысле даже с таким дизайном, с хинтом RULE, который почти гарантировал nested loops и юлозание по индексам и почти без и/о, не должно имхо 154 секунд занимать. не на столько уж страшные функции и космических вычислений в них вроде там нет. куда девается процессорное время мне до конца не ясно.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39471433
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_myp,

ох уж эти самописные агрегаторы ...
а можешь проверить вот этот селект будет работать?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
(select b.idresponsible, a.idtyperepair, to_char(a.dbegin,'yyyymmdd') Agg_Date, sum(a.nmanhour) sum_, count(1) cnt_

      from EAM_PlanRepairMAP a, (select distinct idresponsible, idplanrepair from Eam_ShiftrepairMAP where idresponsible = :idObject) b
     where a.idobject = b.idplanrepair
       and a.dbegin between to_date('01.05.2017','dd.mm.yyyy') and to_date('05.05.2017 23:59:59','dd.mm.yyyy HH24:mi:ss')
group by b.idresponsible, a.idtyperepair, to_char(a.dbegin,'yyyymmdd')) Lea
cross apply (select t.sCode from Eam_Typerepair t where a.idtyperepair = t.id) ET
pivot (
sum(Lea.sum_) as Su,
replace(straggrd(straggrdargs(to_char(decode(Lea.cnt_,1,null,Lea.cnt_)) || ET.sCode,'-')),'-','') as cnt
for Agg_Date in (20170501 ,20170502 ,20170503 ,20170504 ,20170505)
)


в переменную :idObject поставь EAM_ShiftMAP.idObject который выбирался в диапазоне с 01.05.2017 - 05.05.2017

Я думаю (если все получиться) твой селект можно в 10 сек вогнать без проблемм

З.Ы. если работать не будет, сразу попробуй вместо строки
Код: plsql
1.
replace(straggrd(straggrdargs(to_char(decode(Lea.cnt_,1,null,Lea.cnt_)) || ET.sCode,'-')),'-','') as cnt


написать
Код: plsql
1.
max(replace(straggrd(straggrdargs(to_char(decode(Lea.cnt_,1,null,Lea.cnt_)) || ET.sCode,'-')),'-','')) as cnt
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39472642
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Yo.!]lonely_mypапгрейд процессоров, типа с 2.13Ghz на 3.8Ghz в лучшем случае в двое ускоритна барахолке взял пару X5650 за 3 тыщи рулей, для эксперимента.
время запроса ещё немного упало, до 37 секунд, заодно и пропылесосил.

раньше загрузка системы была 25%, теперь загрузка системы 4% :D
один единственный процесс оракла скачет по ядрам...

неужели оракл никаким образом не умеет многопоточность?
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39472655
alter table xxx parallel 8; alter system set parallel_max_servers=8; alter system set parallel_servers_target=8;
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39472677
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
девять женщин могутalter table xxx parallel 8; alter system set parallel_max_servers=8; alter system set parallel_servers_target=8;
http://www.dba-oracle.com/art_so_oracle_standard_enterprise_edition.htm

У автора вроде SE
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39472697
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_mypнеужели оракл никаким образом не умеет многопоточность?Твой - нет
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39472705
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_myp...

неужели оракл никаким образом не умеет многопоточность?
За деньги умеет
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39472796
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lonely_mypна барахолке взял пару X5650 за 3 тыщи рулей, для эксперимента.
время запроса ещё немного упало, до 37 секунд, заодно и пропылесосил.


имхо это странно. разница в частоте и размере кеша не должны были дать такую разницу. попробуй вернуть E5606, вернулись 3 минуты ?


lonely_mypнеужели оракл никаким образом не умеет многопоточность?

никто толком не умеет. мнгопоточно они все умеют читать с диска, но у тебя таблички крошечные и итак в памяти и standard редакция которая параллелить ничего не умеет.
по настоящему параллелят всякие mpp и бигдата базы данных, но они все сугубо аналитические и многое полезное приносят ради этого в жертву.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39472817
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!имхо это странно. разница в частоте и размере кеша не должны были дать такую разницу. попробуй вернуть E5606, вернулись 3 минуты ?
Я так понимаю, он время "не оригинального" запроса приводит
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39473030
lonely_myp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Yo.!]lonely_mypимхо это странно. разница в частоте и размере кеша не должны были дать такую разницу. попробуй вернуть E5606, вернулись 3 минуты ? разница на уже оптимизированным запросе, замена проца ускорила дополнительно с 58 секунд до 37.
...
Рейтинг: 0 / 0
Низкая загрузка ЦП ораклом. не выше 25% всегда.
    #39473048
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lonely_myp,

А ты не пробовал этот 20563227 скрипт выполнить?
Просто интересно
...
Рейтинг: 0 / 0
105 сообщений из 105, показаны все 5 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Низкая загрузка ЦП ораклом. не выше 25% всегда.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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