Oracle mechanics

15.11.2015

_high_priority_processes 12c

Filed under: Oracle,parameters — Игорь Усольцев @ 19:05
Tags: ,

Максим Филатов привлёк внимание к странным изменениям в приоритетах background процессов в Oracle 12c

Например, на 12.1.0.2 OEL x86_64 release 6.4 доморощенным скриптом наблюдаю:

SQL> @param_ _high_priority_processes

 
NAME                      VALUE                                        IS_DEF   IS_MOD     IS_ADJ   DSC
------------------------- -------------------------------------------- -------- ---------- -------- -------------------------------
_high_priority_processes  LMS*|LM*|LCK0|GCR*|DIAG|CKPT|DBRM|RMS0|LGWR  TRUE     FALSE      FALSE    High Priority Process Name Mask

— расширенный в 12c список процессов, которые должны запускаться с высоким приоритетом, однако на хосте вижу, что повышенный приоритет имеют лишь:

$ ps axl|grep '\-2'|grep ora_
0   500 13933     1  -2   - 184900632 19376  hrtime Ss ?      582:49 ora_vktm_INST1
0   500 13966     1  -2   - 185022444 647692 poll_s Ss ?      302:28 ora_lms0_INST1
0   500 13970     1  -2   - 185022444 647544 poll_s Ss ?      298:04 ora_lms1_INST1
0   500 13974     1  -2   - 185022444 647728 poll_s Ss ?      300:44 ora_lms2_INST1

— как это и было в 11g, а вот фактически рекомендованный в параметре LGWR работает со стандартным приоритетом(:

$ ps axl|grep lgwr
0   500   896     1  20   0 1445192 26860    semtim Ss ?        7:40 asm_lgwr_+ASM1
0   500 13992     1  20   0 184907992 545264 semtim Ss ?       46:03 ora_lgwr_INST1

Ок, возможно скрипт мой нехорош? Беру каноническое из How To Query And Change The Oracle Hidden Parameters In Oracle 10g ,11g and 12c (Doc ID 315631.1):

SQL> SELECT a.ksppinm "Parameter",
  2         b.ksppstvl "Session Value",
  3         c.ksppstvl "Instance Value",
  4         decode(bitand(a.ksppiflg/256,1),1,'TRUE','FALSE') IS_SESSION_MODIFIABLE,
  5         decode(bitand(a.ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',3,'IMMEDIATE','FALSE') IS_SYSTEM_MODIFIABLE
  6  FROM   x$ksppi a,
  7         x$ksppcv b,
  8         x$ksppsv c
  9  WHERE  a.indx = b.indx
 10  AND    a.indx = c.indx
 11  AND    a.ksppinm LIKE '/_high_priority_processes%' escape '/'
 12  /
 
Parameter                Session Value                               Instance Value                              IS_SESSION_MODIFIABLE IS_SYSTEM_MODIFIABLE
------------------------ ------------------------------------------- ------------------------------------------- --------------------- --------------------
_high_priority_processes LMS*|LM*|LCK0|GCR*|DIAG|CKPT|DBRM|RMS0|LGWR LMS*|LM*|LCK0|GCR*|DIAG|CKPT|DBRM|RMS0|LGWR FALSE                 FALSE

и подтверждаю, что именно таково значение параметра по умолчанию, и, естественно, show [sp]parameter также не показывает модификаций:

SQL> show parameter _high_priority_processes
SQL> show spparameter _high_priority_processes

Меняем в spfile:

SQL> alter system set "_high_priority_processes"="LMS*|LM*|LCK0|GCR*|DIAG|CKPT|DBRM|RMS0|LGWR" scope=spfile sid='*';

System altered.

SQL> show spparameter _high_priority_processes

SID      NAME                          TYPE   VALUE
-------- ----------------------------- ------ -------------------------------------------
*        _high_priority_processes      string LMS*|LM*|LCK0|GCR*|DIAG|CKPT|DBRM|RMS0|LGWR

После рестарта LGWR ожидаемо получает приоритет:

$ ps axl|grep lgwr
0   500 23171     1  20   0 1445264   29132 semtim Ss ?         0:12 asm_lgwr_+ASM1
0   500 24680     1  -2   - 136676000 27652 semtim Ss ?         0:15 ora_lgwr_INST1

, а параметр приобретает duble-значение:)

SQL> show parameter _high_priority_processes

NAME                     TYPE   VALUE
------------------------ ------ ----------------------------------------------------------------------------------
_high_priority_processes string LMS*|LM*|LCK0|GCR*|DIAG|CKPT|DBRM|RMS0|LGWR|LM*|LCK0|GCR*|DIAG|CKPT|DBRM|RMS0|LGWR

По хорошему, учитывая добавленную в 12c многопроцессность LGWR, хорошо бы использовать шаблон LG* для LGWR и worker-ов чтобы вместо:

$ ps axl|grep lg
0   500 24680     1  -2   - 136676000 27652 semtim Ss ?         0:15 ora_lgwr_INST1
0   500 24688     1  20   0 136675996 25264 semtim Ss ?         0:04 ora_lg00_INST1
0   500 24692     1  20   0 136675996 25216 semtim Ss ?         0:00 ora_lg01_INST1

получить:

$ ps axl|grep ora_lg
0   500  4621     1  -2   - 184922016 30924 semtim Ss ?         7:55 ora_lgwr_INST1
0   500  4661     1  -2   - 184908700 24016 semtim Ss ?         0:16 ora_lg00_INST1
0   500  4667     1  -2   - 184908700 23780 semtim Ss ?         0:10 ora_lg01_INST1

Про другой замечательный шаблон *oracle* для повышения приоритета всех background процессов можно прочитать Craig Shallahamer.How To Change The Priority Of Oracle Background Processes

Кроме того в 12c появился параметр (пока, видимо, недействующий — на потестировать, в будущем):

SQL> @param_ _highest_priority_processes
 
NAME                        VALUE IS_DEF   IS_MOD     IS_ADJ   DSC
--------------------------- ----- -------- ---------- -------- ----------------------------------
_highest_priority_processes VKTM  TRUE     FALSE      FALSE    Highest Priority Process Name Mask

И, естественно, вышеперечисленные действия могут быть полезны исключительно в случаях недостатка фоновым процессам (LG*) процессорных ресурсов / cpu starvation

Добавить комментарий »

Комментариев нет.

RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Блог на WordPress.com.

%d такие блоггеры, как: