powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Низкая загрузка ЦП ораклом. не выше 25% всегда.
25 сообщений из 105, страница 4 из 5
Низкая загрузка ЦП ораклом. не выше 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 сообщений из 105, страница 4 из 5
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Низкая загрузка ЦП ораклом. не выше 25% всегда.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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