Wednesday, December 28, 2011

Slow UPDATE


По поводу вчерашнего медленного UPDATE.

Мы запускаем UPDATE над идентичными данными на двух серверах - Oracle Database Appliance (ODA) и старенький сервер. В табличке ровно 10 млн строк. Выражение, которое мы тестируем предельно простое:

UPDATE TAB1
SET COL1 = COL1
, COL2 = COL2
, COL3 = COL3
, COL4 = COL4

Старенький сервер это 4-ядерный XEON 2.66 cache 4m , RAM 4g (533MHz).
ODA это два 6-ядерных Xeon 3.06 cache 12M, RAM 96g (1333MHz).
При этом старенький сервер опережает ОДУ со счетом 13 минут против 21.

Базы в обоих случаях 11.2.0.2. Никакого шифрования ТП нет.
Вся табличка находится в SGA, физические чтения из датафайлов отсутствуют.
Всяческие ожидания также отсутствуют. В обоих случаях 95% сессия проводит на ЦПУ.

Вот такая картина на ODA:

Top 5 Timed Foreground Events

EventWaitsTime(s)Avg wait (ms)% DB timeWait Class
DB CPU
1,360
95.19
gc current grant 2-way90,2943802.69Cluster
gc current block 2-way67,0513612.54Cluster
reliable message6,016510.35Other
gc cr multi block request1,085430.26Cluster


Поскольку ожидания отсутсвуют как класс, то для выяснения чем занмается процесс на ЦПУ сделали несколько снимков pstack-ом на старом и новом серверах. Слева ODA, справа - старый сервер:
#0  0x000000000909080d in kdr4chk ()      
#1  0x000000000908b9ce in kdb4chk1 ()     
#2  0x000000000908a493 in kd4chk ()       
#3  0x0000000008f55266 in kdgchk ()       
#4  0x0000000008dd7b0b in ktbdbchk ()     
#5  0x0000000008ded010 in kcbchk_ctx ()   
#6  0x0000000008f8fc93 in kco_blkchk ()   
#7  0x0000000008f8e989 in kcoapl ()       
#8  0x0000000008e0d8ab in kcbapl ()       
#9  0x0000000008f95c4e in kcrfw_redo_gen ()
                                                                  
                                                                                                             
#10 0x0000000000e4540c in kcbchg1_main ()       #0  0x0021f7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
#11 0x0000000008e0dbfb in kcbchg1 ()            #1  0x002c7342 in times () from /lib/tls/libc.so.6           
#12 0x0000000008dcc876 in ktuchg2 ()            #2  0x0fcc9754 in sltrgatime64 ()                            
#13 0x0000000008dd7093 in ktbchg2 ()            #3  0x0fac31b5 in kcbchg1_main ()                            
#14 0x0000000008d8afef in kddchg ()             #4  0x0fac206b in kcbchg1 ()                                 
#15 0x000000000488ed65 in kdblccovwr ()         #5  0x0fa94300 in ktuchg2 ()                                 
#16 0x00000000048908e8 in kdblcovw ()           #6  0x0fa9d60a in ktbchg2 ()                                 
#17 0x0000000008d82d52 in kduurp ()             #7  0x0fa56b58 in kddchg ()                                  
#18 0x0000000008d7fb66 in kdusru ()             #8  0x087c65db in kddlok ()                                  
#19 0x0000000008d78c14 in kauupd ()             #9  0x087c4cad in kddlkr ()                                  
#20 0x0000000008f3f7f6 in updrow ()             #10 0x0fc02392 in updrow ()                                  
#21 0x00000000023cd72c in qerupFetch ()         #11 0x09d19442 in qerupFetch ()                              
#22 0x0000000001e989ee in updaul ()             #12 0x09830eaa in updaul ()                                  
#23 0x0000000001e9686e in updThreePhaseExe ()   #13 0x0982f56f in updThreePhaseExe ()                        
#24 0x0000000001e9616d in updexe ()             #14 0x0982e85a in updexe ()                                  
#25 0x0000000008ed2a96 in opiexe ()             #15 0x0fb80330 in opiexe ()                                  
#26 0x0000000001b1816b in kpoal8 ()             #16 0x09517c5d in kpoal8 ()                                  
#27 0x000000000172dded in opiodr ()             #17 0x0fb7afb7 in opiodr ()                                  
#28 0x00000000090600b1 in ttcpip ()             #18 0x0fcf013e in ttcpip ()                                  
#29 0x000000000171c86e in opitsk ()             #19 0x091cdb0e in opitsk ()                                  
#30 0x000000000172150e in opiino ()             #20 0x091d17d7 in opiino ()                                  
#31 0x000000000172dded in opiodr ()             #21 0x0fb7afb7 in opiodr ()                                  
#32 0x00000000017187c4 in opidrv ()             #22 0x091c9fbb in opidrv ()                                  
#33 0x0000000001d8fa77 in sou2o ()              #23 0x09747df4 in sou2o ()                                   
#34 0x0000000000a07d05 in opimai_real ()        #24 0x0854f0a3 in opimai_real ()                             
#35 0x0000000001d94f20 in ssthrdmain ()         #25 0x0974cdce in ssthrdmain ()                              
#36 0x0000000000a07c71 in main ()               #26 0x0854f01f in main ()                                    

Pstack - показывает OPI-вызовы снизу вверх. Т.е. нижняя строка - это заголовок программы, функция main().

Из сравнения стала видна разница:

#0  0x000000000909080d in kdr4chk ()       
#1  0x000000000908b9ce in kdb4chk1 ()      
#2  0x000000000908a493 in kd4chk ()        
#3  0x0000000008f55266 in kdgchk ()        
#4  0x0000000008dd7b0b in ktbdbchk ()      
#5  0x0000000008ded010 in kcbchk_ctx ()    
#6  0x0000000008f8fc93 in kco_blkchk ()    
#7  0x0000000008f8e989 in kcoapl ()        
#8  0x0000000008e0d8ab in kcbapl ()        
#9  0x0000000008f95c4e in kcrfw_redo_gen ()


А точнее, набор функций:

kdr4chk  
kdb4chk1
kd4chk
kdgchk
ktbdbchk
kcbchk_ctx 
kco_blkchk   

В имени каждой функции заметны буковки chk = CHECK.

Поэтому следующим шагом на обоих инстансах была выполнена команда:

На старом сервере:
SQL> show parameter db_block_check

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------
db_block_checking                    string      FALSE
db_block_checksum                    string      TYPICAL

А в инит файле БД на ODA стоит:

db_block_checksum    = "FULL"
db_block_checking      = "FULL"

Отключаем эти настройки - побеждает ОДА со счетом 8 мин против 13:

 

Резюме:
- На ODA БД по-умолчанию создается с чрезвычайно затратными настройками. Отключение их позволяет значительно повысить скорость транзакций. Лицензия на ODA не запрещает пользователю создать свою БД со своими настройками.
-  Применение настроек
db_block_checksum    = "FULL"
db_block_checking      = "FULL"
 замедляет транзакции в 3-4 раза.
- команда pstack является мощным инструментом для исследования производительности в тех случаях, когда процесс все делает на ЦПУ, но непонятно, чем он там реально занимается. Курс Оракла по Performance Tuning в данном случае вам ничем помочь не сможет.

Tuesday, December 27, 2011

Consistent copy

Сегодня занимался исследованием медленного UPDATE...

Вот как это происходит с точки зрения ОС:


[root@ODA01-pub1 ~]# pstack 11517

#0  0x000000000467fce0 in __intel_new_memcpy ()

#1  0x000000000467eaa8 in _intel_fast_memcpy.J ()

#2  0x0000000008f990f1 in kcrfw_copy_cv ()


#3  0x0000000008f95b78 in kcrfw_redo_gen ()

#4  0x0000000000e4540c in kcbchg1_main ()

#5  0x0000000008e0dbfb in kcbchg1 ()

#6  0x0000000008dcc876 in ktuchg2 ()

#7  0x0000000008dd7093 in ktbchg2 ()

#8  0x0000000008d8afef in kddchg ()

#9  0x000000000488ed65 in kdblccovwr ()

#10 0x00000000048908e8 in kdblcovw ()

#11 0x0000000008d82d52 in kduurp ()

#12 0x0000000008d7fb66 in kdusru ()

#13 0x0000000008d78c14 in kauupd ()

#14 0x0000000008f3f7f6 in updrow ()

#15 0x00000000023cd72c in qerupFetch ()

#16 0x0000000001e989ee in updaul ()

#17 0x0000000001e9686e in updThreePhaseExe ()

#18 0x0000000001e9616d in updexe ()

#19 0x0000000008ed2a96 in opiexe ()

Как оказалось, для создания консистентной копии блока на Intel-платформе Оракл в последних версиях (в данном случае в 11.2.0.2) использует команды

__intel_new_memcpy ()

_intel_fast_memcpy.J ()

которые копируют данные блоками по 16 байт через регистры SSE, что значительно ускоряет процесс копирования. 

Кроме того, создание консистентные копии блока при включенной NUMA-оптимизации Оракл вначале пытается локально (в локальной порции SGA). И если локально места нет, то идет в другие ноды и ищет свободные буферы глобально.

Monday, December 26, 2011

gbms_stats.gather_system_stats

Давно это было ...
Был такой случай - после миграции СУБД с 9 на 10 стал медленно работать SAP.
Продуктив - около 1Тб, 15 тыс пользователей, 500 активных сессий.

В процессе уяснения для себя проблемы вяснилось, что многие планы "поплыли", и выражения стали выполняться полным сканированием. Для анализа включили event 10053 для какого-то простенького выражения. Когда пришел трейс, то обнаружилось, что значение db_file_multiblock_read_count установлено в какое-то необычно большое значение.
Поэтому решили собрать системную статистику ...
После сбора статистики ситуация с планами пришла в норму.

Но данная проблема актуальна до сих пор.
Поэтому сегодня - о важности сбора системной статистики:

dbms_stats.gater_system_stats('start');
dbms_stats.gater_system_stats('stop');

Итак, для чего же ее надо собирать?

Рассмотрим, как Оракл вычисляет стоимость. Для это в документации приведена формула :

Cost =  (#SRds * sreadtim + 
         #MRds * mreadtim + 
         #CPUCycles / cpuspeed ) / sreadtim
 
http://docs.oracle.com/cd/B10501_01/server.920/a96533/ex_plan.htm#19598

sreadtim - время чтения одного блока
mreadtim - время многоблочного чтения
cpuspeed - скорость работы ЦПУ


Все серверы разные - скорость дисковой системы, скорость ЦПУ, доступ к памяти.
Поэтому и скорость доступа к блокам БД, находящимся в  SGA или на дисках - разная.
Отсюда и стоимость вычисления одного и того же SQL на разных системах должна отличаться.
Поэтому очень желательно, чтобы Оракл точно знал технические характеристики системы в которой он работает. Сбор системной статистики фактически производит калибровку ЦПУ, памяти и системы в/в подавая на вход оптимизатору реальные физические значения вашего сервера. При наличии системной статистики ошибаться оптимизатор будет гораздо реже!

Пересобирать системную статистику надо после физических изменений в сервере и системе в/в.

Ну а параметр db_file_multiblock_read_count из инит файла надо удалить.

200 Экза* за квартал

Оракл  подводит итоги второго квартала.

Larry said:
"This past Q2, Oracle sold over 200 Exadata and Exalogic engineered systems. In Q3, we plan to sell over 300 Exadata and Exalogic engineered systems. In Q4, we plan to sell over 400 Exadata and Exalogic engineered systems. That would make our annualized Q4 engineered system sales approximately $1 billion. Then we plan to double that -- those sales again next fiscal year."

http://seekingalpha.com/article/315180-oracle-s-ceo-discusses-q2-2012-results-earnings-call-transcript

Friday, December 23, 2011

ADDM bug


В addm-отчете часто возникает такая пугающая рекомендация:

Finding 1: Virtual Memory Paging
Impact is 5.14 active sessions, 100% of total activity.
-------------------------------------------------------
Significant virtual memory paging was detected on the host operating system.

   Recommendation 1: Host Configuration
   Estimated benefit is 5.14 active sessions, 100% of total activity.
   ------------------------------------------------------------------
   Action
      Host operating system was experiencing significant paging but no
      particular root cause could be detected. Investigate processes that do
      not belong to this instance running on the host that are consuming
      significant amount of virtual memory. Also consider adding more physical
      memory to the host.

Причем,
- особого пейджиинга в ОС не видно
- исправить ситуацию не получается (уменьшение SGA эффекта не дает - сообщение появляется).


Как оказалось, это баг ADDM:
ADDM Reports Significant Virtual Memory Paging [ID 1322964.1]

This issue can be seen from 10.2.0.5 to 11.2.0.2

The problem is caused by wrong values in V$OSSTAT as explained in
Bug 10148787 ADDM REPORTS VIRTUAL MEMORY PAGING AFTER APPLYING 10.2.0.5
and unpublished Bug 11712010: VIRTUAL MEMORY PAGING ON 11.2.0.2 DATABASES.
both these bugs are closed as duplicate of unpublished Bug 10220118: NEED TO ALERT WHEN SYSTEM IS CLOSE TO PAGING
В общем, есть патчик, который исправляет данную ситуацию. Завлено, что 11.2.0.3 этот баг исправлен.

pseudo AWR bug

Сегодня обнаружилась интересная картина: AWR перестал делать снапшоты. Т.е. не то чтобы совсем перестал, а просто долго делает снапшот.  Для удобства анализа сделали так:

SQL> select sid from v$mystat where rownum<2;
       SID
----------
       614

SQL> alter session set events '10046 trace name context forever, level 12';

Session altered.

SQL> exec dbms_workload_repository.create_snapshot;

и стали смотреть в трейс файл :

[oracle@ODA01-pub1 trace]$ tail -100f ODA01DB1_ora_12958.trc


WAIT #46931816430624: nam='control file sequential read' ela= 179 file#=0 block#=1 blocks=1 obj#=-1 tim=1324627288235588
WAIT #46931816430624: nam='control file sequential read' ela= 185 file#=0 block#=40 blocks=1 obj#=-1 tim=1324627288235898
WAIT #46931816430624: nam='control file sequential read' ela= 182 file#=0 block#=42 blocks=1 obj#=-1 tim=1324627288236178
WAIT #46931816430624: nam='control file sequential read' ela= 183 file#=0 block#=113 blocks=1 obj#=-1 tim=1324627288236456

WAIT #46931816430624: nam='control file sequential read' ela= 179 file#=0 block#=1 blocks=1 obj#=-1 tim=1324627288236791
WAIT #46931816430624: nam='control file sequential read' ela= 183 file#=0 block#=40 blocks=1 obj#=-1 tim=1324627288237131
WAIT #46931816430624: nam='control file sequential read' ela= 185 file#=0 block#=42 blocks=1 obj#=-1 tim=1324627288237413
WAIT #46931816430624: nam='control file sequential read' ela= 181 file#=0 block#=113 blocks=1 obj#=-1 tim=1324627288237716

WAIT #46931816430624: nam='control file sequential read' ela= 182 file#=0 block#=1 blocks=1 obj#=-1 tim=1324627288238056
WAIT #46931816430624: nam='control file sequential read' ela= 184 file#=0 block#=40 blocks=1 obj#=-1 tim=1324627288238361
WAIT #46931816430624: nam='control file sequential read' ela= 187 file#=0 block#=42 blocks=1 obj#=-1 tim=1324627288238644
WAIT #46931816430624: nam='control file sequential read' ela= 184 file#=0 block#=113 blocks=1 obj#=-1 tim=1324627288238924

WAIT #46931816430624: nam='control file sequential read' ela= 177 file#=0 block#=1 blocks=1 obj#=-1 tim=1324627288239256
WAIT #46931816430624: nam='control file sequential read' ela= 178 file#=0 block#=40 blocks=1 obj#=-1 tim=1324627288239557
WAIT #46931816430624: nam='control file sequential read' ela= 176 file#=0 block#=42 blocks=1 obj#=-1 tim=1324627288239857
WAIT #46931816430624: nam='control file sequential read' ela= 180 file#=0 block#=113 blocks=1 obj#=-1 tim=1324627288240135


В общем, что-то зациклилось...

Металинк предлагает отгадку:  AWR Snapshot Causes Many Control File Sequential Read Waits [ID 941761.1]  ... AWR snapshots are taking a lot of time flushing WRH$_THREAD ...

В доке рекомендовано:
alter system set "_awr_disabled_flush_tables"='wrh$_thread';


Однако эта рекомендация "в лоб" не помогла. События 'control file sequential read' продолжались, и снапшот собирался долго. Поэтому пришлось еще немного покопаться: Смотрим

WAIT #46931816430624: nam='control file sequential read' ela= 260 file#=0 block#=1 blocks=1 obj#=-1 tim=1324626633244332


Событие ожидания относится к курсору  #46931816430624

Ищем в трейсе этот курсор: 

PARSING IN CURSOR #46931816430624 len=881 dep=1 uid=0 oct=2 lid=0 tim=1324626633222179 hv=2600278305 ad='c57822e90' sqlid='6vntx5ydgu691'
insert into wrh$_tempstatxs   (snap_id, dbid, instance_number, file#, creation_change#, phyrds,    phywrts, singleblkrds, readtim, writet
im, singleblkrdtim, phyblkrd,    phyblkwrt, wait_count, time)  select    :snap_id, :dbid, :instance_number,    tf.tfnum, to_number(tf.tfc
rc_scn) creation_change#,    ftio.kcftiopyr, ftio.kcftiopyw, ftio.kcftiosbr,    floor(ftio.kcftioprt / 10000), floor(ftio.kcftiopwt / 100
00),    floor(ftio.kcftiosbt / 10000), ftio.kcftiopbr, ftio.kcftiopbw,    fw.count, fw.time  from    x$kcftio ftio, x$kcctf tf, x$kcbfwai
t fw, x$kccfn fn, x$kccts ts  where    ts.tstsn       = tf.tftsn  and    ftio.kcftiofno = fn.fnfno  and    tf.tfnum       = fn.fnfno  and
    tf.tffnh       = fn.fnnum  and    tf.tfdup       <> 0        and    fn.fntyp  = 7 and    fn.fnnam is not null       and    bitand(tf.
tfsta, 32) <> 32 and    fw.indx+1  = (fn.fnfno + :db_files)

 


Оказывается, он относится к таблице wrh$_tempstatxs.
Поэтому переписываем alter system:

alter system set "_awr_disabled_flush_tables"='wrh$_tempstatxs';    

Во первых: ТОЖЕ НЕ ПОМОГЛО !
Во-вторых: эта команда затерла значение предыдущей: "_awr_disabled_flush_tables"='wrh$_thread'

Возникла мысль - что это за беда, если для каждой таблички WR* надо руками включать специфические свойства? Не является ли причина более общей?


Поэтому дальше сделал так:

exec dbms_stats.gather_fixed_objects_stats;
exec dbms_stats.gather_dictionary_stats;


И - вуаля - результат налицо :


SQL> alter system reset "_awr_disabled_flush_tables" ;
System altered.

SQL> /
alter system reset "_awr_disabled_flush_tables"
*
ERROR at line 1:
ORA-32010: cannot find entry to delete in SPFILE


SQL> set timing on
SQL> exec dbms_workload_repository.create_snapshot;
PL/SQL procedure successfully completed.

Elapsed: 00:00:06.77





Отсюда вывод - СОБИРАЙТЕ СТАТИСТИКУ НА СЛОВАРЬ И НА FIXED TABLES!!!

Non-standard config parameters for ODA

Examining ODA I noticed some non-standard parameters set by Oracle in init.ora for ODA Database.
These parameters allow us to evaluate Oracle view on the ODA:

_enable_NUMA_support     = FALSE  - disables NUMA support. The database server SUN Fire 4370 is NUMA server by nature. It contains two NUMA nodes. But NUMA-functionality is disabled in /etc/grub.conf with numa=off.


But there is HUGE pages configured in /etc/sysctl.conf :
vm.nr_hugepages=26000
And Oracle uses them, but use the 16g (we configured medium DB):

Starting ORACLE instance (normal)
****************** Huge Pages Information *****************
Huge Pages memory pool detected (total: 26000 free: 26000)
DFLT Huge Pages allocation successful (allocated: 8193)
***********************************************************

Therefore, the best size of SGA for O DA is engineered to 52G !
If you set SGA less than 26000 pages, then you loose memory!


_file_size_increase_increment= 2044M

_disable_interface_checking= TRUE
_lm_rcvr_hang_allow_time = 140
_kill_diagnostics_timeout= 140

_gc_undo_affinity        = FALSE
_gc_policy_time          = 0

 _kgl_cluster_lock_read_mostly= TRUE

And intersting lines in alert.log:

LMD0 started with pid=12, OS id=22987
* Load Monitor used for high load check
* New Low - High Load Threshold Range = [23040 - 30720]


Thursday, December 22, 2011

Oracle Lerning Library. Education

A lot of lerning videos:

http://apex.oracle.com/pls/apex/f?p=44785:1:0::NO

Wonderful !

Tuesday, December 20, 2011

System Statistics BUG


Рассмотрим системную статисику  на одной из промышленных систем:

SQL> set lines 1000 pages 1000
SQL> select * from aux_stats$;

SNAME              PNAME           PVAL1
------------------ --------------- -----------

SYSSTATS_MAIN      SREADTIM         60725.039
SYSSTATS_MAIN      MREADTIM        105725.525


Значения SREADTIM и MREADTIM указаны в миллисекундах.
http://docs.oracle.com/cd/E11882_01/server.112/e16638/stats.htm#i41496
Я специально сравнил со своими старыми записями.
На других продуктивах было так:



SREADTIM                7.581
MREADTIM               56.842





Значения стали различаться в 1000 раз.


Наконец пришла отгадка: "Bug 9842771 - Wrong SREADTIM and MREADTIM statistics in AUX_STATS$ [ID 9842771.8]"


Оказывается, по причине бага 9842771 в версиях 11.2 значения ошибочно показываются в 1000 раз больше, чем в предыдущих версиях. А я то сломал голову - почему в последнее время мне стали попадаться системы с медленным вводом-выводом? Баг исправлен в 11.2.0.3.


Ну и немного про DB_FILE_MULTIBLOCK_READ_COUNT, который все еще появляется в наших init-файлах. После сбора системной статистики я его всегда удаляю. MREADTIM - более правильная замена для DFMBRC.
http://docs.oracle.com/cd/E11882_01/server.112/e16638/stats.htm#PFGRF94747

Monday, December 19, 2011

Oracle Database Appliance

Итак, we have Oracle Database Appliance.
ODA contains: Oracle 11.2.0.2 EE RAC.

Let we calibrate IO:

SQL> ed

  1  DECLARE
  2    lat  INTEGER;
  3    iops INTEGER;
  4    mbps INTEGER;
  5  BEGIN
  6  -- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (<DISKS>, <MAX_LATENCY>, iops, mbps, lat);
  7     DBMS_RESOURCE_MANAGER.CALIBRATE_IO (20, 10, iops, mbps, lat);
  8    DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);
  9    DBMS_OUTPUT.PUT_LINE ('latency  = ' || lat);
 10    dbms_output.put_line('max_mbps = ' || mbps);
 11* end;
SQL>
SQL>
SQL> set serveroutput on
SQL> /

max_iops = 13230
latency  = 11
max_mbps = 2335

Итак, 13К IOPS - неплохо для 20 шпинделей.

Однако, как-то слишком много.
Если один шпиндель заявлен на сайте seagate.com как 3мс, то он способен обеспечить не более 330 IOPS. Следовательно, 20 дисков = 20 * 330 = 6600 IOPS - это теоретический максимум, который можно ожидать от такой системы. Однако мы имеем ровно в два раза больше !
Одно из объяснений - диски находятся под RAID-контроллером с 512Мб памяти, а на втором узле - второй контроллер со своими 512Мб. Возможно, причина в этом.

Гипотеза об SSD не нашла подтверждения. SSD диски в данной процедуре не включаются, потому что на SSD лежат только redo log files. Поэтому, даный ввод-вывод - исключительно с шпинделей. Это можно доказать, с помощью lsof:

SQL> !ps
  PID TTY          TIME CMD
23178 pts/1    00:00:00 bash
27465 pts/1    00:00:00 ps
32699 pts/1    00:00:00 sqlplus

[root@ODA01-pub1 ~]# ps -ef|grep 32699
root     31357 17543  0 14:38 pts/3    00:00:00 grep 32699
oracle   32699 23178  0 13:35 pts/1    00:00:00 sqlplus   as sysdba
oracle   32700 32699  0 13:35 ?        00:00:00 oracleODA01DB1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

[root@ODA01-pub1 ~]# lsof -p 32700|less
...
oracle  32700 oracle  256u   BLK  253,68                24412 /dev/mapper/HDD_E1_S06_984565747p1
oracle  32700 oracle  257u   BLK  253,59                23574 /dev/mapper/HDD_E0_S01_984620575p1
oracle  32700 oracle  258u   BLK  253,46                23379 /dev/mapper/HDD_E0_S04_984667927p1
oracle  32700 oracle  259u   BLK  253,36                23233 /dev/mapper/HDD_E1_S03_984701491p1
oracle  32700 oracle  260u   BLK  253,34                23208 /dev/mapper/HDD_E1_S15_979832135p1
oracle  32700 oracle  261u   BLK  253,48                23396 /dev/mapper/HDD_E0_S12_979857635p1
oracle  32700 oracle  262u   BLK  253,42                23340 /dev/mapper/HDD_E0_S17_979676671p1
oracle  32700 oracle  263u   BLK  253,70                24974 /dev/mapper/HDD_E1_S10_984691531p1
oracle  32700 oracle  264u   BLK  253,57                23554 /dev/mapper/HDD_E0_S05_984692403p1
oracle  32700 oracle  265u   BLK  253,29                23133 /dev/mapper/HDD_E1_S19_979811875p1

Итак, видно, что процесс открыл только 10 дисков.
Причем, для lgwr показываются SSD диски:

oracle  24544 oracle  256u   BLK             253,57                23554 /dev/mapper/HDD_E0_S05_984692403p1
oracle  24544 oracle  257u   BLK             253,32                23169 /dev/mapper/HDD_E1_S11_984698091p1
oracle  24544 oracle  258u   BLK             253,29                23133 /dev/mapper/HDD_E1_S19_979811875p1
oracle  24544 oracle  259u   BLK             253,40                23274 /dev/mapper/HDD_E0_S00_984624147p1
oracle  24544 oracle  260u   BLK             253,43                23353 /dev/mapper/HDD_E0_S08_984624267p1
oracle  24544 oracle  261u   BLK             253,59                23574 /dev/mapper/HDD_E0_S01_984620575p1
oracle  24544 oracle  262u   BLK             253,46                23379 /dev/mapper/HDD_E0_S04_984667927p1
oracle  24544 oracle  263u   BLK             253,34                23208 /dev/mapper/HDD_E1_S15_979832135p1
oracle  24544 oracle  264u   BLK             253,68                24412 /dev/mapper/HDD_E1_S06_984565747p1
oracle  24544 oracle  265u   BLK             253,67                24339 /dev/mapper/SSD_E0_S20_805674689p1
oracle  24544 oracle  266u   BLK             253,31                23144 /dev/mapper/SSD_E1_S22_805674773p1
oracle  24544 oracle  267u   BLK             253,28                23110 /dev/mapper/SSD_E1_S23_805674697p1
oracle  24544 oracle  268u   BLK             253,54                23468 /dev/mapper/SSD_E0_S21_805674938p1


Наткнулся на некий новый процесс CS :

[root@ODA01-pub1 ~]# ps -ef|grep ora_cs
oracle   13805     1  2 15:08 ?        00:00:08 ora_cs00_ODA01DB1
oracle   13807     1  2 15:08 ?        00:00:08 ora_cs01_ODA01DB1
oracle   13810     1  2 15:08 ?        00:00:08 ora_cs02_ODA01DB1
oracle   13812     1  2 15:08 ?        00:00:08 ora_cs03_ODA01DB1
oracle   13814     1  2 15:08 ?        00:00:08 ora_cs04_ODA01DB1
oracle   13816     1  2 15:08 ?        00:00:08 ora_cs05_ODA01DB1
oracle   13818     1  2 15:08 ?        00:00:07 ora_cs06_ODA01DB1
oracle   13820     1  2 15:08 ?        00:00:07 ora_cs07_ODA01DB1
oracle   13822     1  2 15:08 ?        00:00:07 ora_cs08_ODA01DB1
oracle   13824     1  2 15:08 ?        00:00:07 ora_cs09_ODA01DB1
oracle   13826     1  2 15:08 ?        00:00:07 ora_cs0a_ODA01DB1
oracle   13828     1  2 15:08 ?        00:00:07 ora_cs0b_ODA01DB1
oracle   13830     1  2 15:08 ?        00:00:06 ora_cs0c_ODA01DB1
oracle   13832     1  2 15:08 ?        00:00:06 ora_cs0d_ODA01DB1
oracle   13834     1  2 15:08 ?        00:00:06 ora_cs0e_ODA01DB1
oracle   13836     1  2 15:08 ?        00:00:06 ora_cs0f_ODA01DB1
oracle   13838     1  2 15:08 ?        00:00:06 ora_cs0g_ODA01DB1
oracle   13840     1  2 15:08 ?        00:00:06 ora_cs0h_ODA01DB1
oracle   13843     1  2 15:08 ?        00:00:05 ora_cs0i_ODA01DB1
oracle   13848     1  2 15:08 ?        00:00:05 ora_cs0j_ODA01DB1
oracle   13851     1  2 15:08 ?        00:00:06 ora_cs0k_ODA01DB1
oracle   13854     1  2 15:08 ?        00:00:06 ora_cs0l_ODA01DB1
oracle   13857     1  2 15:08 ?        00:00:05 ora_cs0m_ODA01DB1
oracle   13865     1  2 15:08 ?        00:00:05 ora_cs0n_ODA01DB1

Как оказалось, это некий новый "I/O Calibration Process":
"CSnn slave processes are started on execution of the DBMS_RESOURCE_MANAGER.CALIBRATE_IO() procedure. There is one slave process per CPU on each node of the database."

http://docs.oracle.com/cd/E11882_01/server.112/e24448/bgprocesses.htm

Причем, процесс калибрации выполняется на двух узлах кластера одновременно.


# ocrconfig -add +DATA PROT-30: The Oracle Cluster Registry location to be added is not usable. PROC-50: The Oracle Cluster Registry locatio...