пятница, 27 февраля 2009 г.

Solaris Network

1. Enable the network card

#ifconfig hme0 plumb

ifconfig -a

hme0: flags=842 mtu 1500
inet 0.0.0.0 netmask 0
ether 3:22:11:6d:2e:1f

2. Configuring ipaddress and netmask and making the interface status as up .

#ifconfig hme0 192.9.2.106 netmask 255.255.255.0 up

#ifconfig -a

hme0: flags=843 mtu 1500
inet 192.9.2.106 netmask ffffff00 broadcast 192.9.2.255
ether 3:22:11:6d:2e:1f

The file /etc/netmasks is used to define netmasks for ip addresses .

127.0.0.1, is the standard loop back route and 127.0.0.0 is the default loopback ipaddress used by the kernel when no interface is configured this will be the only entry dispalyed by the system on invoking ifconfig -a command..

3. Configuring Virtual interface :

#ifconfig hme0:1 172.40.30.4 netmask 255.255.0.0 up

ifconfig -a

hme0: flags=843 mtu 1500
inet 192.9.2.106 netmask ffffff00 broadcast 192.9.2.255
ether 3:22:11:6d:2e:1f
hme0:1: flags=842 mtu 1500
inet 172.40.30.4 netmask ffff0000 broadcast 172.40.255.255

4. Ip-forwording :

/etc/rc2.d/S69inet .

#ndd -set /dev/ip ip_forwarding 0

5. Router Configuration

#route add -net 10.0.0.0 -netmask 255.0.0.0 172.40.30.1 1

/etc/defaultrouter.

#route add default 205.100.155.2 1

#route change default 205.100.155.2 1

#########################################################################

Add Network


Persistence IPv4 Configuration:

first NIC 192.168.1.x
new NIC 192.168.2.x

prtconf -vD

ifconfig -a

lo0: flags=1000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843 mtu 1500 index 2
inet 192.168.1.100 netmask ffffff00 broadcast 192.168.1.255
ether

add a line to the /etc/hosts file for our new card:

192.168.2.100 host2.mydomain.com host2


/etc/hostname.hme1

host2.mydomain.com

/etc/netmasks:

192.168.2.0 255.255.255.0

ifconfig -a

lo0: flags=1000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843 mtu 1500 index 2
inet 192.168.1.100 netmask ffffff00 broadcast 192.168.1.255
ether
hme1: flags=1000843 mtu 1500 index 3
inet 192.168.2.100 netmask ffffff00 broadcast 192.168.2.255
ether


Non-Persistence IPv4 Configuration:

ifconfig hme1 plumb
ifconfig hme1 192.168.2.100 netmask 255.255.255.0
ifconfig hme1 up

четверг, 26 февраля 2009 г.

Обновление системного словаря до версии 12с

1. Скорректировать файл /etc/oratab для основной БД

vi /etc/oratab

+ASM:/u01/app/grid/product/12.1.0.2:N      # line added by Agent
TESTDB:/u01/app/oracle/product/12.1.0.2:N  # Указать новый ORACLE_HOME
NEW:/u01/app/oracle/product/12.1.0.2:N     # Указать новый ORACLE_HOME


2. Запуск процесса обновления системного словаря Не-контейнерных БД до версии 12с

su - oracle

--Setup New Environment for 12c
. oraenv
ORACLE_SID = [+ASM] ? TESTDB


cd $ORACLE_HOME/rdbms/admin
sqlplus / as sysdba
SQL> startup UPGRADE
SQL> exit

Вариант 1
-- Запустить процесс обновления в последовательном режиме
-- Логи работы сохранить здесь: $ORACLE_BASE/cfgtoollogs/$ORACLE_UNQNAME
-- Setup ORACLE_UNQNAME=db_unique_name
--
export ORACLE_UNQNAME=TESTDB_OMEGA
cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catctl.pl -S -l $ORACLE_BASE/cfgtoollogs/$ORACLE_UNQNAME catupgrd.sql

Вариант 2
-- Запустить процесс обновления в параллельном режиме в 4 потока
-- Логи работы сохранить здесь: $ORACLE_BASE/cfgtoollogs/$ORACLE_UNQNAME
-- Setup ORACLE_UNQNAME=db_unique_name
--
export ORACLE_UNQNAME=TESTDB_OMEGA
cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catctl.pl -n 4 -l $ORACLE_BASE/cfgtoollogs/$ORACLE_UNQNAME catupgrd.sql


3. Просмотр процесса обновления – открыть отдельное окно консоли
su – oracle

--Setup New Environment for 12c
. oraenv
ORACLE_SID = [+ASM] ? TESTDB

export ORACLE_UNQNAME=TESTDB_OMEGA
tail -1000f $ORACLE_BASE/cfgtoollogs/$ORACLE_UNQNAME/catupgrd0.log

Если на предыдущем шаге мы запустили резервную БД в режиме наката архивных логов из ORACLE_HOME версии 12c, то во время работы процедуры обновления основной БД происходит автоматическое обновление резервной БД
так как она принимает и накатывает все архивные логи приходящие от основной БД .



4. После завершения процесса обновления, можно просмотреть результат обновления

su – oracle

--Setup New Environment for 12c
. oraenv
ORACLE_SID = [+ASM] ? TESTDB


export ORACLE_UNQNAME=TESTDB_OMEGA
tail -1000f $ORACLE_HOME/cfgtoollogs/$ORACLE_UNQNAME/upgrade/upg_summary.log

После завершения процесса обновления, экземпляр основной БД будет остановлен утилитой catctl.pl.








среда, 25 февраля 2009 г.

Solaris Service Management Facility

svcadm export > all_smf_export

To see all running services
svcs

To see all services, including not-running
svcs -a

To check for services having problems (“in maintenance mode”)
svcs -x

NAME : svc:/network/smtp:sendmail

get detail about any one service.
svcs -l NAME

To see what processes a service is running:
svcs -p NAME

Controlling existing services

svcadm -t enable NAME # Start service
svcadm -t disable NAME # Stop service
svcadm enable NAME # Start service (persists over reboots)
svcadm disable NAME # Start service (persists over reboots)
svcadm restart NAME # (only if defined in manifest?)
svcadm refresh NAME # usually does a "kill -HUP" if defined



mv /etc/rc2.d/S75cron /etc/rc2.d/s.S75cron
svcadm disable system/cron:default

edit /etc/inet/inetd.conf, uncomment the finger line
svcadm enable network/finger:default

/etc/init.d/sshd stop
svcadm disable -t network/ssh:default

/etc/init.d/sshd start
svcadm enable -t network/ssh:default

/etc/init.d/sshd stop; /etc/init.d/sshd start
svcadm restart network/ssh:default

kill -HUP `cat /var/run/sshd.pid`
svcadm refresh network/ssh:default

ok boot -m verbose
svcs -x
svcs -x -v

svcs -p network/smtp:sendmail
svcs -d network/smtp:sendmail
svcs -D network/smtp:sendmail

edit /etc/inittab
svcadm milestone -d milestone/single-user:default
svcadm milestone milestone/multi-user-server:default


boot -m milestone=
milestone (single-user, multi-user, multi-user-server)


Логи смотреть тут:
/var/adm/messages
/var/svc/log
/etc/svc/volatile


svccfg export postfix > my.smf
svccfg validate
svccfg import

Краткий план миграции на 12R1

1.Уведомление о начале работ.

2.Остановка приложений

3.Создание точки отката

sql>SELECT flashback_on, log_mode FROM v$database;
sql> alter database flashback on;  -- если режим flashback не включен

Смотрим место во fra:

sql>select name, round(space_limit/1048576),round(space_used/1048576),round ((space_used/space_limit)*100) as "% used"
from  v$RECOVERY_FILE_DEST;

sql>create restore point RP_1 guarantee flashback database;


4.Проверка целостности исходной БД перед миграцией
cd /oracle/distr/pre

$ sqlplus / as sysdba
sql> alter session set nls_language='American';
sql> @dbupgdiag.sql
sql> exit


5.Проверка БД с помощью hcheck и hout

cd /oracle/distr/pre
$ sqlplus / as sysdba
sql> alter session set nls_language='American';
sql> @hout.sql
sql> @hcheck4.sql
sql> execute hcheck.full
sql> exit


6.Очистить корзину перед обновлением

$ sqlplus /as sysdba
SQL> PURGE DBA_RECYCLEBIN;


7.Проверка версий компонентов:

select substr(comp_id,1,15) comp_id,substr(comp_name,1,30) comp_name, substr(version,1,10) version,status
from dba_registry order by modified;


8.Удалить EM DB Control

$ emctl stop dbconsole
$ sqlplus / as sysdba
SQL> @?/rdbms/admin/emremove.sql


9.Pre Upgrade Steps

cd  /u01/app/oracle/distr/pre
$ unzip preupgrade_12.1.0.2.0_15_lf.zip
$ sqlplus / as sysdba
SQL> alter session set nls_language='American';
SQL> @utluppkg.sql
SQL> @preupgrd.sql


10.Анализ логов и запуск скрипта preupgrade_fixups.sql

$ tail -1000 /u01/app/oracle/cfgtoollogs/testdb/preupgrade/preupgrade.log
SQL>@/u01/app/oracle/cfgtoollogs/testdb/preupgrade/preupgrade_fixups.sql
SQL> exit


11.Создание файла параметров и паролей в новом OH: 

SQL> create pfile from spfile;
$ cp /u01/app/oracle/product/11.2.0.4/db/dbs/inittestdb.ora  /u01/app/oracle/product/12.1.0.2/dbs/
$ cd /u01/app/oracle/product/12.1.0.2/dbs/
vi  inittestdb.ora

Пересоздание файла паролей в новом формате 12с
orapwd file=< fname > entries=< users > force=< y/n > password=< SYS password > format=12

Миграция старого файла паролей на новый формат 12c


orapwd file=< fname > entries=< users > force=< y/n > password=< SYS password > format=12 input_file=< input-fname >

Проверка
orapwd describe file=< passwordfile name with location >


<- br="" testdb="">su – oracle
. oraenv  <  - TESTDB
$ cd $ORACLE_HOME/dbs

$ ls -al orapw*

$ orapwd describe file=orapwtestdb
Password file Description : format=LEGACY ignorecase=N

$ orapwd file=orapwTESTDB entries=10 force=y password=< ... > format=12 input_file=orapwTESTDB

$ orapwd describe file=orapwtestdb
Password file Description : format=12 ignorecase=N
 



12.Upgrade Steps

$ export  ORACLE_HOME=/u01/app/oracle/product/12.1.0.2
cd $ORACLE_HOME/rdbms/admin

sqlplus / as sysdba
SQL> startup UPGRADE
SQL> exit

cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catctl.pl -n 4 -l $ORACLE_BASE/cfgtoollogs/testdb catupgrd.sql


13.Анализ логов и запуск базы:

tail -1000 $ORACLE_BASE/cfgtoollogs/testdb/catupgrd0.log
tail -1000 $ORACLE_HOME/cfgtoollogs/testdb/upgrade/upg_summary.log

Запуск базы
$ sqlplus / as sysdba
SQL> startup


14.Post Upgrade Steps

cd $ORACLE_HOME/rdbms/admin

$ sqlplus / as sysdba
SQL> @utlu121s.sql
SQL> @catuppst.sql
SQL>@/u01/app/oracle/cfgtoollogs/testdb/preupgrade/postupgrade_fixups.sql
SQL> @utlrp.sql  4
SQL> @utluiobj.sql
SQL> exit


15.Сбор статистики по фиксированным объектам словаря базы данных:

SQL> exec DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;


16.Запускаем datapatch

sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> shutdown immediate
SQL> startup UPGRADE
SQL> quit

cd $ORACLE_HOME/OPatch
./datapatch -verbose


17.Перекомпиляция инвалидных объектов.

sqlplus /nolog
sql> CONNECT / AS SYSDBA
sql> shutdown
sql> startup
sql> @?/rdbms/admin/utlrp


18.Проверка:

select action,
       version||'.'||bundle_id as version_id,
       description,
       status,
       ACTION_TIME,
       patch_id
from DBA_REGISTRY_SQLPATCH;


19.Проверка версий компонентов:

select substr(comp_id,1,15) comp_id,
substr(comp_name,1,30) comp_name,
substr(version,1,10) version,status
from dba_registry order by modified;


20.Сетевые настройки

cd $ORACLE_HOME/network/admin
$ vi listener.ora
$ vi sqlpnet.ora
$ lsnrctl start
$ lsnrctl status


21.Установка параметров инициализации экземпляра

!!!  Новый параметр compatible пока не выставляем

Устранить известные критические ошибки для версии 12cR1 (12.1.0.2)

-- Bug in 12.1.0.2 - Note 2034610.1
alter system set "_optimizer_aggr_groupby_elim"        = FALSE       scope=spfile sid='*';
alter system set "_optimizer_reduce_groupby_key"       = FALSE       scope=spfile sid='*';

-- Bug 18304693 - Note 18304693.8
alter system set "_optimizer_cost_based_transformation"='EXHAUSTIVE' scope=spfile sid='*';
alter system set "_optimizer_reuse_cost_annotations"   = FALSE       scope=spfile sid='*';

-- Bug 22173980
alter system set "_rowsets_enabled"                    = FALSE       scope=spfile sid='*';

-- Bug 19894622
alter system set "_optimizer_unnest_scalar_sq"         = FALSE       scope=spfile sid='*';

-- Bug in 12.1.0.2 Bug 21056506
alter system set "_use_single_log_writer"              = TRUE        scope=spfile sid='*';

-- Bug in 12.1.0.2 Bug 22529728 - Note 22529728.8
alter system set "_optimizer_gather_stats_on_load"     = FALSE       scope=both   sid='*';


Дополнительно можно установить следующие параметры:

alter system set db_files=2048  scope=spfile sid='*';
alter system set processes=1024 scope=spfile sid='*';
alter system set control_file_record_keep_time=30 scope=spfile sid='*';
alter system set cursor_sharing='EXACT' scope=spfile sid='*';
alter system set filesystemio_options='SETALL' scope=spfile sid='*';

alter system set fast_start_mttr_target       = 1200 scope=spfile sid='*';
alter system set fast_start_parallel_rollback = LOW scope=spfile sid='*';

alter system set open_cursors=2000                        scope=spfile sid='*';
alter system set session_cached_cursors = 200             scope=spfile sid='*';
alter system set open_links=255                           scope=spfile sid='*';
alter system set resumable_timeout=120                    scope=spfile sid='*';
alter system set job_queue_processes=1000                 scope=spfile sid='*';

-- LOG_BUFFER
alter system set log_buffer=67108864 scope=spfile sid='*';

-- deferred_segment_creation
alter system set deferred_segment_creation=FALSE  scope=both sid='*';

--
-- Configure to Protect from Data Corruption
--
alter system reset DB_ULTRA_SAFE                 scope=spfile sid='*';
alter system set db_block_checking="MEDIUM"      scope=spfile sid='*';
alter system set db_block_checksum="TYPICAL"     scope=spfile sid='*';
alter system set db_lost_write_protect="TYPICAL" scope=spfile sid='*';

sql> SHUTDOWN IMMEDIATE
sql>STARTUP
sql> exit


22.Проверка работы приложений.

Проверка работы приложений на новой версии бд


23.Удаление точки отката

Удаляем только если миграция прошла успешно.

sql> SELECT name, scn, time, database_incarnation#, guarantee_flashback_database, storage_size FROM gv$restore_point;
sql>drop restore point RP_1;
SELECT name, scn, time, database_incarnation#, guarantee_flashback_database, storage_size FROM gv$restore_point;


24.Установка нового compatible

-- Setup new compatible mode
alter system set compatible = "12.1.0.2.0" scope=spfile sid='*';

-- Switch off new adaptive features for run in compatible mode 11gR2
alter system set optimizer_adaptive_features=FALSE scope=both sid='*';

sql> SHUTDOWN IMMEDIATE
sql>STARTUP
sql> exit


25.Уведомление о завершении работ.

Завершение работ:
Работы считаются завершенными после успешного выполнения всех пунктов плана работ.


План отката: 

Точку отката не должна быть удалена
Возврат  к RESTORE POINT
sql> shutdown immediate;
sql>startup mount;
sql> flashback database to restore point RP_1;
Flashback complete.

Окончательно откроем базу
SQL> alter database open resetlogs;
sql>drop restore point RP_1;




Listener

Настройка листенера для не кластерных конфигураций

По умолчанию сетевая служба Oracle Listener должна использовать порт 1521.

Файл sqlnet.ora должен содержать:


NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.EXPIRE_TIME = 10
ADR_BASE = /u01/app/oracle

Файл listener.ora должен содержать:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = .domain)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = DB_UNIQUE_NAME)
      (ORACLE_HOME   = /u01/app/oracle/product/12.1.0.2)
      (SID_NAME = SID)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = DB_UNIQUE_NAME_DGMGRL)
      (ORACLE_HOME   = /u01/app/oracle/product/12.1.0.2)
      (SID_NAME = SID)
    )
  )

#################################
# standard parameters
#################################
ADR_BASE_LISTENER = /u01/app/oracle
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET

#################################
# extended parameters
#################################
TRACE_LEVEL_LISTENER       = OFF
STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER   = 120
INBOUND_CONNECT_TIMEOUT_LISTENER = 120
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF

#################################
# 1453883.1 CVE-2012-1675
#################################
SECURE_REGISTER_LISTENER = (TCP,IPC)


Настройка листенера для кластерных конфигураций

Файл listener.ora – по умолчанию никакие изменения не вносятся. Вносятся только параметры для устранения уязвимостей , ошибок и работы сервиса Data Guard Broker.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = DB_UNIQUE_NAME)           # для создания Standby БД
      (ORACLE_HOME   = /u01/app/oracle/product/12.1.0.2)
      (SID_NAME      = SID)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = DB_UNIQUE_NAME_DGMGRL)    #для операций Switchover
      (ORACLE_HOME   = /u01/app/oracle/product/12.1.0.2)
      (SID_NAME      = SID)
    )
  )
 




Настройка технологических дескрипторов соединения с БД для сервиса DGMGRL

Для Primary + Standby серверов добавить следующее описание дескрипторов:


vi $ORACLE_HOME/network/admin/tnsnames.ora

DB_UNIQUE_NAME_1 =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (ADDRESS_LIST=
        (ADDRESS = (PROTOCOL = TCP)(HOST = <имя_хоста_1>)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DB_UNIQUE_NAME_1)
    )
  )

DB_UNIQUE_NAME_2 =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (ADDRESS_LIST=
        (ADDRESS = (PROTOCOL = TCP)(HOST = <имя_хоста_2>)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DB_UNIQUE_NAME_2)
    )
  )

  

Пример конфигурации листенера:


oracle@omega:$  more listener.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = omega.domain)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = TESTDB_OMEGA)
      (ORACLE_HOME = /u01/app/oracle/product/12.1.0.2)
      (SID_NAME = testdb)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = TESTDB_OMEGA_DGMGRL)
      (ORACLE_HOME   = /u01/app/oracle/product/12.1.0.2)
      (SID_NAME = testdb)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = TESTDB)
      (ORACLE_HOME = /u01/app/oracle/product/12.1.0.2)
      (SID_NAME = testdb)
    )
  )


#################################
# standard parameters
#################################
ADR_BASE_LISTENER = /u01/app/oracle
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET

#################################
# extended parameters
#################################
TRACE_LEVEL_LISTENER       = OFF
STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER   = 120
INBOUND_CONNECT_TIMEOUT_LISTENER = 120
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF

#################################
# 1453883.1 CVE-2012-1675
#################################
SECURE_REGISTER_LISTENER = (TCP,IPC)


oracle@omega:$



oracle@omega:$  more sqlnet.ora

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.EXPIRE_TIME = 10
ADR_BASE = /u01/app/oracle


oracle@omega:$  more tnsnames.ora

TESTDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = testdb)
    )
  )

RCAT =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = alpha)(PORT = 1521)))
      (CONNECT_DATA = (SID = RCAT)
    )
  )

oracle@omega:$ 







Настройка дескрипторов соединений на клиентской стороне

Подключение к тестовым БД 

Non-RAC конфигурация

<имя_дескриптора> =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (ADDRESS_LIST=
        (ADDRESS = (PROTOCOL = TCP)(HOST = <имя_хоста>)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <имя_сервиса>)
    )
  )


RAC конфигурация

<имя_дескриптора> =
  (DESCRIPTION =
     (ENABLE=BROKEN)
     (CONNECT_TIMEOUT=30)
     (TRANSPORT_CONNECT_TIMEOUT=10)
     (RETRY_COUNT=3)
     (ADDRESS_LIST=
       (LOAD_BALANCE=on)
       (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
     )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <имя_сервиса>)
    )
  )

 

Подключение к боевым БД

Non-RAC конфигурация

<имя_дескриптора> =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (TRANSPORT_CONNECT_TIMEOUT=10)
    (ADDRESS_LIST=
      (LOAD_BALANCE=OFF)
      (FAILOVER=ON)
        (ADDRESS = (PROTOCOL = TCP)(HOST = <имя_хоста_1>)(PORT = 1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = <имя_хоста_2>)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <имя_сервиса>)
    )
  )

RAC конфигурация

<имя_дескриптора> =
  (DESCRIPTION_LIST=
     (LOAD_BALANCE=OFF)
     (FAILOVER=ON)
       (DESCRIPTION=
          (ENABLE=BROKEN)
          (CONNECT_TIMEOUT=30)
          (TRANSPORT_CONNECT_TIMEOUT=10)
          (RETRY_COUNT=3)
          (ADDRESS_LIST=
            (LOAD_BALANCE=ON)
            (ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=1521))
          )
            (CONNECT_DATA=
              (SERVER = DEDICATED)
              (SERVICE_NAME=<имя_сервиса>)
            )
       )
       (DESCRIPTION=
          (ENABLE=BROKEN)
          (CONNECT_TIMEOUT=30)
          (TRANSPORT_CONNECT_TIMEOUT=10)
          (RETRY_COUNT=3)
          (ADDRESS_LIST=
            (LOAD_BALANCE=ON)
            (ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=1521))
          )
            (CONNECT_DATA=
              (SERVER = DEDICATED)
              (SERVICE_NAME=<имя_сервиса>)
            )
       )
  )







Profile

Файл  .bashrc  или  .profile  должен содержать следующие строки:

##################################################
# Setup Oracle standard env
##################################################

export ORACLE_SID=SID
export ORACLE_BASE=/u01/app/oracle
export PATH=$PATH:/usr/local/bin
ORAENV_ASK=NO
. /usr/local/bin/oraenv > /dev/null 2>&1
ORAENV_ASK=YES

##################################################
# Setup Oracle extended env
##################################################
#export NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT=YYYY-MM-DD:HH24:MI:SS
export LIBPATH=$ORACLE_HOME/lib:/usr/lib
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/sbin:/usr/sbin:/bin:/usr/local/bin:/usr/bin:$PATH

umask 022
unset TMOUT


if [ `uname` = "Linux" ]; then
unset LS_COLORS
fi

if [ `uname` = "AIX" ]; then
export AIXTHREAD_SCOPE=S
fi

if [ `uname` = "SunOS" ]; then
export AWT_TOOLKIT=XToolkit
# Preventing Installation Errors Caused by Terminal Output Commands
if [ -t 0 ]; then
   stty intr ^C
fi
fi


где SID – указать идентификатор экземпляра БД


Для корректной установки переменных окружений из профайла необходимо следить
за заполнением информации в файле /etc/oratab, где регистрируется информация об используемых экземплярах баз данных.

oracle@omega:~$ more /etc/oratab

# This file is used by ORACLE utilities.  It is created by root.sh
# and updated by either Database Configuration Assistant while creating
# a database or ASM Configuration Assistant while creating ASM instance.

# A colon, ':', is used as the field terminator.  A new line terminates
# the entry.  Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
#   $ORACLE_SID:$ORACLE_HOME::
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
+ASM:/u01/app/grid/product/11.2.0.4:N
TESTDB:/u01/app/oracle/product/11.2.0.4:N         # line added by Agent
 

oracle@omega:~$




В  .bash_profile  можно поместить следующие строки:


oracle@omega:~$ cat .bash_profile

# .bash_profile

# Source global definitions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

if [ "$BASH" = "" ]; then

echo Hello Bourne or K shell ....
PS1=$LOGNAME@`uname -n`"# "
else
echo Hello Bash ...
PS1="\u@\h:\w$ "
fi



А все остальное поместить в .bashrc :

oracle@omega:~$ cat .bashrc

# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

##################################################
# Setup Oracle standard env
##################################################
export ORACLE_SID=TESTDB
export ORACLE_BASE=/u01/app/oracle
export PATH=$PATH:/usr/local/bin
ORAENV_ASK=NO
. /usr/local/bin/oraenv > /dev/null 2>&1
ORAENV_ASK=YES

##################################################
# Setup Oracle extended env
##################################################
#export NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT=YYYY-MM-DD:HH24:MI:SS
export LIBPATH=$ORACLE_HOME/lib:/usr/lib
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export PATH=$ORACLE_HOME/bin:/sbin:/usr/sbin:/bin:/usr/local/bin:/usr/bin:$PATH

umask 022
unset TMOUT

if [ `uname` = "Linux" ]; then
unset LS_COLORS
fi

oracle@omega:~$





Посмотрим что содержится в файле  /usr/local/bin/oraenv :

oracle@omega:~$ more /usr/local/bin/oraenv

#!/bin/sh
#
# $Header: buildtools/scripts/oraenv.sh /linux32/8 2010/03/25 04:17:55 ashrives Exp $ oraenv.sh.pp Copyr (c) 1991 Oracle
#
# Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
#
# This routine is used to condition a Bourne shell user's environment
# for access to an ORACLE database.  It should be installed in
# the system local bin directory.
#
# The user will be prompted for the database SID, unless the variable
# ORAENV_ASK is set to NO, in which case the current value of ORACLE_SID
# is used.
# An asterisk '*' can be used to refer to the NULL SID.
#
# 'dbhome' is called to locate ORACLE_HOME for the SID.  If
# ORACLE_HOME cannot be located, the user will be prompted for it also.
# The following environment variables are set:
#
#       ORACLE_SID      Oracle system identifier
#       ORACLE_HOME     Top level directory of the Oracle system hierarchy
#       PATH            Old ORACLE_HOME/bin removed, new one added
#       ORACLE_BASE     Top level directory for storing data files and
#                       diagnostic information.
#
# usage: . oraenv
#
# NOTE:         Due to constraints of the shell in regard to environment
# -----         variables, the command MUST be prefaced with ".". If it
#               is not, then no permanent change in the user's environment
#               can take place.
#
#####################################
#
# process aruments
#
SILENT='';
for arg in $@
do
    if [ "$arg" = "-s" ]; then
        SILENT='true'
    fi
done

case ${ORACLE_TRACE:-""} in

    T)  set -x ;;
esac

#
# Determine how to suppress newline with echo command.
#
N=
C=
if echo "\c" | grep c >/dev/null 2>&1; then
    N='-n'
else
    C='\c'
fi

#
# Set minimum environment variables
#

# ensure that OLDHOME is non-null
if [ ${ORACLE_HOME:-0} = 0 ]; then
    OLDHOME=$PATH
else
    OLDHOME=$ORACLE_HOME
fi
case ${ORAENV_ASK:-""} in                       #ORAENV_ASK suppresses prompt when set

    NO) NEWSID="$ORACLE_SID" ;;
    *)  case "$ORACLE_SID" in
            "") ORASID=$LOGNAME ;;
            *)  ORASID=$ORACLE_SID ;;
        esac
        echo $N "ORACLE_SID = [$ORASID] ? $C"
        read NEWSID
        case "$NEWSID" in
            "")         ORACLE_SID="$ORASID" ;;
            *)          ORACLE_SID="$NEWSID" ;;
        esac ;;
esac
export ORACLE_SID

ORAHOME=`dbhome "$ORACLE_SID"`
case $? in
    0)  ORACLE_HOME=$ORAHOME ;;
    *)  echo $N "ORACLE_HOME = [$ORAHOME] ? $C"
        read NEWHOME
        case "$NEWHOME" in
            "") ORACLE_HOME=$ORAHOME ;;
            *)  ORACLE_HOME=$NEWHOME ;;
        esac ;;
esac

export ORACLE_HOME

#
# Reset LD_LIBRARY_PATH
#
case ${LD_LIBRARY_PATH:-""} in
    *$OLDHOME/lib*)     LD_LIBRARY_PATH=`echo $LD_LIBRARY_PATH | \
                            sed "s;$OLDHOME/lib;$ORACLE_HOME/lib;g"` ;;
    *$ORACLE_HOME/lib*) ;;
    "")                 LD_LIBRARY_PATH=$ORACLE_HOME/lib ;;
    *)                  LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH ;;
esac

export LD_LIBRARY_PATH

#
# Put new ORACLE_HOME in path and remove old one
#

case "$OLDHOME" in
    "") OLDHOME=$PATH ;;        #This makes it so that null OLDHOME can't match
esac                            #anything in next case statement

case "$PATH" in
    *$OLDHOME/bin*)     PATH=`echo $PATH | \
                            sed "s;$OLDHOME/bin;$ORACLE_HOME/bin;g"` ;;
    *$ORACLE_HOME/bin*) ;;
    *:)                 PATH=${PATH}$ORACLE_HOME/bin: ;;
    "")                 PATH=$ORACLE_HOME/bin ;;
    *)                  PATH=$PATH:$ORACLE_HOME/bin ;;
esac

export PATH

# Locate "osh" and exec it if found
ULIMIT=`LANG=C ulimit 2>/dev/null`

if [ $? = 0 -a "$ULIMIT" != "unlimited" ] ; then
  if [ "$ULIMIT" -lt 2113674 ] ; then

    if [ -f $ORACLE_HOME/bin/osh ] ; then
        exec $ORACLE_HOME/bin/osh
    else
        for D in `echo $PATH | tr : " "`
        do
            if [ -f $D/osh ] ; then
                exec $D/osh
            fi
        done
    fi

  fi

fi

# Set the value of ORACLE_BASE in the environment.
#
# Use the orabase executable from the corresponding ORACLE_HOME, since the ORACLE_BASE of different
# ORACLE_HOMEs can be different.  The return value of orabase will be determined based on the value
# of ORACLE_BASE from oraclehomeproperties.xml as set in the ORACLE_HOME inventory.
#
# If orabase can not determine a value then oraenv returns with ORACLE_BASE unset.
#
# The existing value of ORACLE_BASE is only used to inform the user if the script has changed
# the value of ORACLE_BASE.

ORABASE_EXEC=$ORACLE_HOME/bin/orabase

if [ ${ORACLE_BASE:-"x"} != "x" ]; then
   OLD_ORACLE_BASE=$ORACLE_BASE
   unset ORACLE_BASE
   export ORACLE_BASE
else
   OLD_ORACLE_BASE=""
fi

if [ -w $ORACLE_HOME/inventory/ContentsXML/oraclehomeproperties.xml ]; then
   if [ -f $ORABASE_EXEC ]; then
      if [ -x $ORABASE_EXEC ]; then
         ORACLE_BASE=`$ORABASE_EXEC`

         # did we have a previous value for ORACLE_BASE
         if [ ${OLD_ORACLE_BASE:-"x"} != "x" ]; then
            if [ $OLD_ORACLE_BASE != $ORACLE_BASE ]; then
               if [ "$SILENT" != "true" ]; then
                  echo "The Oracle base has been changed from $OLD_ORACLE_BASE to $ORACLE_BASE"
               fi
            else
               if [ "$SILENT" != "true" ]; then
                  echo "The Oracle base remains unchanged with value $OLD_ORACLE_BASE"
               fi
            fi
         else
            if [ "$SILENT" != "true" ]; then
               echo "The Oracle base has been set to $ORACLE_BASE"
            fi
         fi
         export ORACLE_BASE
      else
         if [ "$SILENT" != "true" ]; then
            echo "The $ORACLE_HOME/bin/orabase binary does not have execute privilege"
            echo "for the current user, $USER.  Rerun the script after changing"
            echo "the permission of the mentioned executable."
            echo "You can set ORACLE_BASE manually if it is required."
         fi
      fi
   else
      if [ "$SILENT" != "true" ]; then
         echo "The $ORACLE_HOME/bin/orabase binary does not exist"
         echo "You can set ORACLE_BASE manually if it is required."
      fi
   fi
else
   if [ "$SILENT" != "true" ]; then
      echo "ORACLE_BASE environment variable is not being set since this"
      echo "information is not available for the current user ID $USER."
      echo "You can set ORACLE_BASE manually if it is required."
   fi
fi

#
# Install any "custom" code here
#

oracle@omega:~$





А файл  /u01/app/oracle/product/11.2.0.4/bin/dbhome содержит :

oracle@omega:~$ more /u01/app/oracle/product/11.2.0.4/bin/dbhome



#
# $Header: dbhome.sh 24-may-2007.12:10:51 vkolla Exp $ dbhome.sh.pp Copyr (c) 1991 Oracle
#
###################################
#
# usage: ORACLE_HOME=`dbhome [SID]`
# NOTE:  A NULL SID is specified with "" on the command line
#
# The only sane way to use this script is with SID specified on the
# command line or to have ORACLE_SID set for the database you are looking
# for.  The return code will be 1 if dbhome can't find ANY value, 2 if
# it finds a questionable value, 0 if it finds a good one (ie. out of
# oratab).
#
# If ORACLE_SID is set or provided on the command line the script
# will write to the standard output the first of the following that
# it finds:
#       1.  The value of the 2nd field in oratab where the
#           value of the 1st field equals $ORACLE_SID.
#       2.  The home directory for the user 'oracle' in /etc/passwd
#           or in the yellow pages password entries.
#
# If ORACLE_SID is not set and not provided on the command line the
# script will write to the standard output the first of the following
# that it finds:
#       1.  The current value of ORACLE_HOME if not null.
#       2.  The home directory for the user 'oracle' in /etc/passwd
#           or in the yellow pages password entries.
#
# This script currently uses no hard-coded defaults for ORACLE_SID or
# ORACLE_HOME.
#
#####################################

case "$ORACLE_TRACE" in
    T)  set -x ;;
esac

trap '' 1

RET=0
ORAHOME=""
ORASID=${ORACLE_SID-NOTSET}
ORASID=${1-$ORASID}

ORATAB=/etc/oratab

PASSWD=/etc/passwd
PASSWD_MAP=passwd.byname

case "$ORASID" in
    NOTSET)     # ORACLE_SID not passed in and not in environment
                RET=2
                ORAHOME="$ORACLE_HOME" ;;

    *)  # ORACLE_SID was set or provided on the command line
        if test -f $ORATAB ; then
            # Try for a match on ORASID in oratab
            # NULL SID is * in oratab
            case "$ORASID" in
                "")     ORASID='\*' ;;
            esac

            ORAHOME=`awk -F: '{if ($1 == "'$ORASID'") {print $2; exit}}' \
                        $ORATAB 2>/dev/null`

        fi ;;
esac

case "$ORAHOME" in
    "") # Not found in oratab or ORACLE_HOME not set;
        # try /etc/passwd & yp for "oracle"
        RET=2
        ORAHOME=`awk -F: '/^oracle:/ {print $6; exit}' $PASSWD`
        case "$ORAHOME" in

            "") ORAHOME=`(ypmatch oracle $PASSWD_MAP) 2>/dev/null | \
                    awk -F: '/^oracle:/ {print $6; exit}'`

                case "$ORAHOME" in
                    "") echo "Cannot locate ORACLE_HOME." 1>&2
                        exit 1 ;;
                esac ;;
        esac ;;
esac

echo $ORAHOME
exit $RET





oracle@omega:~$




вторник, 24 февраля 2009 г.

Oracle Некоторые вопросы оптимизации

Процент попаданий в буфер блока данных (кэш данных)
если процент ниже 95, то стоит увеличить размер DB_CACHE_SIZE
или оптимизировать запросы вызывающие много считываний с диска.

select 1- (sum(decode(name, 'physical reads',value,0))/
(sum(decode(name, 'db block gets',value,0)) +
(sum(decode(name, 'consistent gets',value,0)))))
"Read Hit Ratio"
from v$sysstat;


Покажет, как увеличение или уменьшение кэша скажется на процессе попаданий
(эффект от увеличения или уменьшения кэша данных)


select size_for_estimate, buffers_for_estimate,
estd_physical_read_factor, estd_physical_reads
from v$db_cache_advice
where name='DEFAULT'
and block_size=
(select value
from v$parameter
where name='db_block_size' )
and advice_status='ON';


Процент попадания в словарный кэш
Если меньше 95, то стоит задуматься над увеличением SHARED_POOL_SIZE


select sum(gets), sum(getmisses),
(1-(sum(getmisses)/(sum(gets)+ sum(getmisses))))* 100 HitRate
from v$rowcache;


Процент попаданий для кэша разделяемых SQL-запросов
и процедур на языке PL/SQL
процент попаданий при выполнении PinHitRatio должен быть не менее 95
процент попаданий при загрузке RelHitRatio должен быть не менее 99


select sum(pins) "Executions",
sum(pinhits) "Hits",
((sum(pinhits)/sum(pins))* 100) "PinHitRatio",
sum(reloads) "Misses",
((sum(pins)/(sum(pins) + sum(reloads)))* 100) "RelHitRatio"
from v$librarycache


Объекты PL/SQL, которые следует закрепить в памяти
(объекты, для хранения которых нужно больше 100 Кбайт)

select name, sharable_mem
from v$db_object_cache
where sharable_mem>100000
and type in ('PACKAGE','PACKAGE_BODY','FUNCTION','PROCEDURE')
and kept='NO';


Сессии, наиболее интенсивно использующие процессорное время

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

- При помощи команды top операционной системы UNIX.

- С использованием динамической статистики Oracle,
выполнив следующий запрос:

select v.sid, s.name "statistic", v.value
from v$statname s, v$sesstat v
where s.name = 'CPU used by this session'
and v.statistic# = s.statistic#
and v.value > 0
order by 3 desc;

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

Повторный разбор SQL-предложений

select name, value from v$sysstat
where name in (
'parse time cpu',
'parse time elapsed',
'parse count (hard)'
);

SQL-предложения, подвергающиеся наиболее частым разборам

select sql_text, parse_calls, executions
from v$sqlarea
order by parse_calls desc;

О том, что курсоры не разделяются между сессиями, свидетельствуют
большие и постоянно растущие значения поля VERSION_COUNT:

select sql_text, version_count
from v$sqlarea order by version_count desc;

SQL-предложения, наиболее интенсивно выполняющие обращения к блокам
данных:

select address, hash_value, buffer_gets, executions,
buffer_gets/executions "gets/exec", sql_text
from v$sqlarea
where executions > 0
order by 3 desc;

(следует обращать внимание на SQL-предложения с большим
отношением gets/exec или значением buffer_gets)

Интенсивные согласованные чтения

Система может тратить большое количество ресурсов на формирование
согласованного представления информации. Наиболее часто это происходит
в следующих ситуациях:

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

- Если мало число сегментов отката, то система может тратить много времени
на откат таблицы транзакций. Если запрос работает в течение длительного
времени, то поскольку число сегментов отката и таблиц транзакций слишком
мало, ваша система вынуждена часто повторно использовать слоты транзакций.

- Система сканирует слишком много буферов для того чтобы найти свободный.
Необходимо увеличить интенсивность скидывания буферов на диск процессом
DBWRn. Кроме этого можно увеличить размер кэша буферов для уменьшения
нагрузки для DBWR. Для нахождения среднего количества буферов, которое
необходимо просмотреть в списке LRU (Least Reasently Used) для нахождения
свободного буфера, необходимо использовать сле-дующий запрос:

select 1+sum(decode(name, 'free buffer inspected', value, 0)) /
sum(decode(name, 'free buffer requested', value, 0))
from v$sysstat
where name in (
'free buffer inspected',
'free buffer requested'
);

Результат должен быть равен в среднем 1-му или 2-м блокам.
Если количество блоков больше, то необходимо увеличить кэш буферов
или настроить процессы DBWRn.
Аналогично следует поступать, если велико среднее количество "грязных"
буферов в конце списка LRU:

select * from v$buffer_pool_statistics;


Ожидания выполнения

Для определения наиболее частых причин ожидания необходимо выполнить
следующий запрос:

select * from v$system_event
where event != 'Null event' and
event != 'rdbms ipc message' and
event != 'pipe get' and
event != 'virtual circuit status' and
event not like '%timer%' and
event not like 'SQL*Net % from %'
order by time_waited desc;

Обращать внимание следует на события с наибольшими временами ожидания.

Наиболее часто встречающиеся причины ожиданий:

- Buffer busy wait - данное событие обычно возникает, если несколько
сессий пытаются прочитать один и тот же блок, или одна или несколько
сессий ожидают окончания изменения одного блока. Конкуренция за блок
корректируется в зависимости от типа блока:

Блок данных:

- Уменьшите количество строк в блоке путем изменения параметров
pctfree/pctused или уменьшением BD_BLOCK_SIZE.

- Проверьте на наличие right.hand.indexes (индексов, в которые добавляются
данные многими процессами в одну точку). Возможно, следует использовать
индексы с обратными ключами.

Заголовок сегмента:

- Увеличьте количество freelists.

- Увеличьте размер экстентов для таблицы.

Заголовок сегмента отката:

- Добавьте больше сегментов отката для уменьшения количества транзакций
на сегмент.

- Уменьшите значение параметра TRANSACTION_PER_ROLLBACK_SEGMENT.

Блок сегмента отката:

- Увеличьте сегмент отката.

- Free buffer wait - обычно возникает, если процесс DBWR не справляется
с записью блоков на диск. Необходимо увеличить его пропускную способность.

- Latch free - конкуренция за доступ к защелкам. При помощи следующего
запроса можно определить защелки, которые ожидают активные сессии в
данный момент времени:

select * from v$latch
where latch# in (
select p2 from v$session_wait
where event = 'latch free' );

Конкуренция за доступ к защелкам

Одной из причин простоя процессов может быть конкуренция за доступ
к защелкам. Защелка - это внутренняя структура данных Oracle,
контролирующая доступ к объектам, находящимся в SGA (System Global Area).

О возникновении конкуренции за доступ к защелкам сигнализирует появление
сессий с ожиданием события "latch free" в динамическом представлении
V$SESSION_WAIT и соответственно рост статистики ожидания "latch free"
в V$SESSION_EVENT.

- Статистика по ожиданиям защелок в системе:

select * from v$system_event where event = 'latch free';

- Текущие ожидания защелок:

select * from v$session_wait where event = 'latch free';


- Защелки, доступ к которым ожидают процессы в текущий момент времени:

select * from v$latch
where latch# in (
select p2 from v$session_wait where event = 'latch free' );

Выявить возникновение конкуренции за доступ к защелкам в системе поможет
скрипт response_time_breakdown.sql.

Наиболее часто встречающиеся причины ожиданий:

- Сache buffers chains - данная защелка запрашивается при поиске блока
данных, кэшированного в SGA. Поскольку буферный кэш представляет собой
последовательность блоков, каждая последовательность защищается защелкой,
которая является дочерней для данной защелки. Конкуренция за доступ к
данной защелке вызывается очень активным доступом к одному блоку, и обычно
требует для исправления переписывания приложения. Определить блоки данных
в кэше буферов, при обращении к которым возникают задержки, поможет
следующий запрос:

select a.name, b.obj,
b.dbarfil file#, b.dbablk block#,
a.gets, a.sleeps
from v$latch_children a, x$bh b
where a.addr = b.hladdr and sleeps > 100
order by 5 desc;

select /*+ ordered first_rows*/
l.child#,
e.owner||'.'||e.segment_name segment,
e.segment_type type,
x.dbarfil file#,
x.dbablk block#,
trunc(l.sleeps/l.gets,5) rate
from
( select
(max(sleeps/gets)+avg(sleeps/gets))/2 rate,
sum(sleeps) sleeps
from
sys.v_$latch_children
where
name = 'cache buffers chains'
) a,
sys.x$bh x,
sys.v_$latch_children l,
sys.dba_extents e
where
x.inst_id = userenv('Instance') and
l.sleeps/l.gets > a.rate and
l.addr = x.hladdr and
x.dbarfil = e.file_id and
x.dbablk between e.block_id and e.block_id+e.blocks
order by rate desc;

Cущественное уменьшение количества ожиданий защелки данного типа
можно выставлением скрытого параметра базы данных

_db_block_hash_buckets = 2*db_block_buffers;


Недостаточность ресурсов памяти

Разделяемый буфер (shared pool)

- Коэффициент попадания в библиотечный кэш, должен быть близок к 1:

select (sum(pins - reloads)) / sum(pins) "lib cache"
from v$librarycache;

- Коэффициент попадания в словарный кэш (содержащий библиотечные данные),
коэффициент должен быть близок к 1:

select (sum(gets - getmisses - usage - fixed)) / sum(gets) "row cache"
from v$rowcache;

- Свободное место в разделяемом кэше:

select * from v$sgastat where name = 'free memory';

- Коэффициент не попадания в библиотечный кэш:

select sum(pins) "executions",
sum(reloads) "cache misses while executing",
sum(reloads)/sum(pins) "miss rate"
from v$librarycache;


Кэш буферов (buffer cache)

- Коэффициент попаданий в буфер должен быть больше 0.9:

select name, 1-physical_reads/(db_block_gets+consistent_gets) "Hits"
from v$buffer_pool_statistics;

- Коэффициент ожидания LRU защелок при обращении к кэшу буферов:

select bp.name, max(sleeps / gets) ratio
from v$buffer_pool bp, v$latch_children lc
where lc.name = 'cache buffers lru chain'
and lc.child# between bp.lo_setid and bp.hi_setid
group by bp.name;

Кэш журналов регистраций (redo log buffer)
Количество промахов при обращении к кэшу журналов регистрации:

select name, value
from v$sysstat
where name = 'redo buffer allocation retries';
Области сортировки (sort areas)
Количество сортировок на диске и в памяти:
select name, value
from v$sysstat
where name in ('sorts (memory)', 'sorts (disk)');

Конкуренция за доступ к ресурсам

Конкуренция за сегменты отката

Количество ожиданий доступа к сегментам отката не должно превышать 1%.
Если коэффициент ожиданий выше, то необходимо увеличить количество
сегментов отката:

select w.class, w.count/s.value "Rate"
from v$waitstat w,
( select sum(value) value from v$sysstat
where name in ('db block gets', 'consistent gets')) s
where w.class in (
'system undo header',
'system undo block',
'undo header',
'undo block');


Какие таблицы и индексы стали причиной высокого ожидания события  buffer busy waits

select
OWNER ,
OBJECT_NAME ,
OBJECT_TYPE ,
TABLESPACE_NAME
from v$segment_statistics
where statistic_name = 'buffer busy waits'
order by value desc

Долго выполняющиеся транзакции:

select hash_value, executions,
round(elapsed_time/1000000,2) total_time,
round(cpu_time/1000000,2) cpu_seconds
from (select * from v$sql order by elapsed_time desc)


Далее по hash_value находим план

select * from v$sql_plan
where hash_value = 3287028449


Просмотр SQL - кода сеанса

select a.sid, a.username, s.sql_text
from v$session a, v$sqltext s
where a.sql_address = s.address
and a.sql_hash_value = s.hash_value
and a.username = 'ANGOR'
and a.status = 'ACTIVE'
order by a.username, a.sid, s.piece;



Monitor long running operations using v$session_longops


SELECT s.sid,
       s.serial#,
       s.machine,
       s.machine,
       s.sql_id,
       s.event,
       ROUND(sl.elapsed_seconds/60) || ':' || MOD(sl.elapsed_seconds,60) elapsed,
       ROUND(sl.time_remaining/60) || ':' || MOD(sl.time_remaining,60) remaining,
       ROUND(sl.sofar/sl.totalwork*100, 2) progress_pct
FROM   v$session s,
       v$session_longops sl
WHERE  s.sid     = sl.sid
AND    s.serial# = sl.serial#
ORDER BY elapsed desc;




Как посмотреть план запроса:

Запросы потребляющие ресурсы CPU:

select substr(sql_text,1,40) sql_text, hash_value, cpu_time
from v$sql
where cpu_time > 10000000
order by cpu_time;


Или любой другой запрос:

SELECT hash_value, address, child_number, sql_id, plan_hash_value
FROM v$sql
WHERE  sql_text LIKE '%select sysdate from dual%'
AND sql_text NOT LIKE '%v_sql%';

По hash_value:

SELECT
   lpad(' ', 2 * level) || pt.operation || ' ' || pt.options || ' ' || pt.object_name "Plan Access Path",
   pt.cost,
   pt.cardinality,
   pt.bytes,
   pt.cpu_cost,
   pt.io_cost,
   pt.temp_space,
   pt.access_predicates,
   pt.filter_predicates,
   pt.qblock_name as "Query Block name"
FROM (select *
             from v$sql_plan
             where HASH_VALUE = 2343063137
             and ADDRESS =  '00007FF7C88C4128'
             and  CHILD_NUMBER = 0
           ) pt
CONNECT BY PRIOR pt.id = pt.parent_id
START WITH pt.id = 0;

Или по sql_id:

SELECT
   lpad(' ', 2 * level) || pt.operation || ' ' || pt.options || ' ' || pt.object_name "Plan Access Path",
   pt.cost,
   pt.cardinality,
   pt.bytes,
   pt.cpu_cost,
   pt.io_cost,
   pt.temp_space,
   pt.access_predicates,
   pt.filter_predicates,
   pt.qblock_name as "Query Block name"
FROM (select *
             from v$sql_plan
             where   sql_id =  '7h35uxf5uhmm1'
             and child_number = 0
            ) pt
CONNECT BY PRIOR pt.id = pt.parent_id
START WITH pt.id = 0;


Из AWR по sql_id и plan_hash_value:

SELECT lpad(' ', 2 * level) || pt.operation || ' ' || pt.options || ' ' ||
       pt.object_name "Query Plan",
       pt.cost,
       pt.cardinality,
       pt.bytes,
       pt.cpu_cost,
       pt.io_cost,
       pt.temp_space,
       pt.access_predicates,
       pt.filter_predicates,
       pt.qblock_name
 FROM (select *
              from dba_hist_sql_plan
              where sql_id = '7h35uxf5uhmm1'
              and plan_hash_value = 1388734953
        ) pt
 CONNECT BY PRIOR pt.id = pt.parent_id
START WITH pt.id = 0



В 11g из v$sql_plan_monitor :

 SELECT lpad(' ', 2 * level) || pt.plan_operation || ' ' || pt.plan_options || ' ' ||
       pt.plan_object_name "Query Plan",
       pt.plan_cost,
       pt.plan_cardinality,
       pt.plan_bytes,
       pt.plan_cpu_cost,
       pt.plan_io_cost,
       pt.plan_temp_space,
       pt.starts,
       pt.output_rows,
       pt.workarea_mem,
       pt.workarea_tempseg,
       pt.physical_read_requests,
       pt.physical_write_requests
  FROM (select *
          from v$sql_plan_monitor pt
         where sql_id = '7h35uxf5uhmm1'
  --                and sql_plan_hash_value = :sql_plan_hash_value
  --                and sid = :sid
  --                and sql_exec_id = :sql_exec_id
           and status = 'EXECUTING') pt
CONNECT BY PRIOR pt.plan_line_id = pt.plan_parent_id
 START WITH pt.plan_line_id = 0


 Также можно получить отчет:


SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON
SET TRIMSPOOL ON
SET ECHO OFF
SET FEEDBACK OFF

SPOOL /temp/report_sql_monitor.htm
SELECT DBMS_SQLTUNE.report_sql_monitor(
  sql_id       =>  '7h35uxf5uhmm1',
  type         => 'HTML',
  report_level => 'ALL') AS report
FROM dual;
SPOOL OFF

Oracle Блокировки

Выявление проблем связанных с блокировками

select /*+ ordered */
       b.username,
       b.serial#,
       d.id1,
       a.sql_text
from   v$lock d,
       v$session b,
       v$sqltext a
where  b.lockwait=d.kaddr
  and  a.address=b.sql_address
  and  a.hash_value=b.sql_hash_value


Выявление пользователя, который поставил блокировку

select /*+ ordered */
       a.serial#,       
       a.sid,
       a.username,
       b.id1,
       c.sql_text
from   v$lock b,
       v$session a,
       v$sqltext c
where  b.id1 in (select /*+ ordered */
                        distinct e.id1
                        from v$lock e,
                             v$session d
                        where d.lockwait=e.kaddr)
and a.sid=b.sid
and c.hash_value=a.sql_hash_value
and b.request=0


Кто держит temporary table

select session_id, a.object_id, oracle_username as usr, os_user_name as Os_Usr, 
        decode(Locked_mode,1,'No Lock', 
                2,'Row Share', 
                3,'Row Exclusive', 
                4,'Share', 
                5,'Share Row Exclusive', 
                6,'Exclusive','NONE') as Locked_mode, 
owner, object_name, data_object_id as Data_Id, object_type, temporary
 from V$LOCKED_OBJECT o, all_objects a where o.object_id = a.object_id


Кто лочит сессию sid=18

SELECT /*+ RULE */
lk.SID, se.username, se.osuser, se.machine,
DECODE (lk.TYPE,
'TX', 'Transaction',
'TM', 'DML',
'UL', 'PL/SQL User Lock',
lk.TYPE
) lock_type,
DECODE (lk.lmode,
0, 'None',
1, 'Null',
2, 'Row-S (SS)',
3, 'Row-X (SX)',
4, 'Share',
5, 'S/Row-X (SSX)',
6, 'Exclusive',
TO_CHAR (lk.lmode)
) mode_held,
DECODE (lk.request,
0, 'None',
1, 'Null',
2, 'Row-S (SS)',
3, 'Row-X (SX)',
4, 'Share',
5, 'S/Row-X (SSX)',
6, 'Exclusive',
TO_CHAR (lk.request)
) mode_requested,
TO_CHAR (lk.id1) lock_id1, TO_CHAR (lk.id2) lock_id2, ob.owner,
ob.object_type, ob.object_name, lk.BLOCK, se.lockwait
FROM v$lock lk, dba_objects ob, v$session se
WHERE lk.TYPE IN ('TM', 'UL')
AND lk.SID = se.SID
AND lk.id1 = ob.object_id
AND (lk.SID = '18');


Просмотр блокировок


SELECT /*+ rule */
bs.username "Blocking User", ws.username "Waiting User", bs.sid "SID",
bs.serial# "Serial#", bs.sql_address "address",
bs.sql_hash_value "Sql hash", bs.program "Blocking App",
ws.program "Waiting App", bs.machine "Blocking Machine",
ws.machine "Waiting Machine", bs.osuser "Blocking OS User",
ws.osuser "Waiting OS User", bs.serial# "Serial#",
ws.serial# "WSerial#",
DECODE (
wk.TYPE,
'MR', 'Media Recovery',
'RT', 'Redo Thread',
'UN', 'USER Name',
'TX', 'Transaction',
'TM', 'DML',
'UL', 'PL/SQL USER LOCK',
'DX', 'Distributed Xaction',
'CF', 'Control FILE',
'IS', 'Instance State',
'FS', 'FILE SET',
'IR', 'Instance Recovery',
'ST', 'Disk SPACE Transaction',
'TS', 'Temp Segment',
'IV', 'Library Cache Invalidation',
'LS', 'LOG START OR Switch',
'RW', 'ROW Wait',
'SQ', 'Sequence Number',
'TE', 'Extend TABLE',
'TT', 'Temp TABLE',
wk.TYPE
) lock_type,
DECODE (
hk.lmode,
0, 'None',
1, 'NULL',
2, 'ROW-S (SS)',
3, 'ROW-X (SX)',
4, 'SHARE',
5, 'S/ROW-X (SSX)',
6, 'EXCLUSIVE',
TO_CHAR (hk.lmode)
) mode_held,
DECODE (
wk.request,
0, 'None',
1, 'NULL',
2, 'ROW-S (SS)',
3, 'ROW-X (SX)',
4, 'SHARE',
5, 'S/ROW-X (SSX)',
6, 'EXCLUSIVE',
TO_CHAR (wk.request)
) mode_requested,
TO_CHAR (hk.id1) lock_id1, TO_CHAR (hk.id2) lock_id2,
DECODE (
hk.block,
0, 'NOT Blocking', /* Not blocking any other processes */
1, 'Blocking', /* This lock blocks other processes */
2, 'Global', /* This lock is global, so we can't tell */
TO_CHAR (hk.block)
)
blocking_others
FROM v$lock hk, v$session bs, v$lock wk, v$session ws
WHERE hk.lmode != 0
AND hk.lmode != 1
AND wk.request != 0
AND wk.TYPE(+) = hk.TYPE
AND wk.id1(+) = hk.id1
AND wk.id2(+) = hk.id2
AND hk.sid = bs.sid(+)
AND wk.sid = ws.sid(+)
AND (bs.username IS NOT NULL)
AND (bs.username <> 'SYSTEM')
AND (bs.username <> 'SYS')
ORDER BY 1;


Поиск блокировок

select 
nvl(S.USERNAME,'Internal') username, 
        L.SID, 
        nvl(S.TERMINAL,'None') terminal, 
        decode(command, 
0,'None',decode(l.id2,0,U1.NAME||'.'||substr(T1.NAME,1,20),'None')) tab, 
decode(command, 
0,'BACKGROUND', 
1,'Create Table', 
2,'INSERT', 
3,'SELECT', 
4,'CREATE CLUSTER', 
5,'ALTER CLUSTER', 
6,'UPDATE', 
7,'DELETE', 
8,'DROP', 
9,'CREATE INDEX', 
10,'DROP INDEX', 
11,'ALTER INDEX', 
12,'DROP TABLE', 
13,'CREATE SEQUENCE', 
14,'ALTER SEQUENCE', 
15,'ALTER TABLE', 
16,'DROP SEQUENCE', 
17,'GRANT', 
18,'REVOKE', 
19,'CREATE SYNONYM', 
20,'DROP SYNONYM', 
21,'CREATE VIEW', 
22,'DROP VIEW', 
23,'VALIDATE INDEX', 
24,'CREATE PROCEDURE', 
25,'ALTER PROCEDURE', 
26,'LOCK TABLE', 
27,'NO OPERATION', 
28,'RENAME', 
29,'COMMENT', 
30,'AUDIT', 
31,'NOAUDIT', 
32,'CREATE EXTERNAL DATABASE', 
33,'DROP EXTERNAL DATABASE', 
34,'CREATE DATABASE', 
35,'ALTER DATABASE', 
36,'CREATE ROLLBACK SEGMENT', 
37,'ALTER ROLLBACK SEGMENT', 
38,'DROP ROLLBACK SEGMENT', 
39,'CREATE TABLESPACE', 
40,'ALTER TABLESPACE', 
41,'DROP TABLESPACE', 
42,'ALTER SESSION', 
43,'ALTER USER', 
44,'COMMIT', 
45,'ROLLBACK', 
46,'SAVEPOINT', 
47,'PL/SQL EXECUTE', 
48,'SET TRANSACTION', 
49,'ALTER SYSTEM SWITCH LOG', 
50,'EXPLAIN', 
51,'CREATE USER', 
52,'CREATE ROLE', 
53,'DROP USER', 
54,'DROP ROLE', 
55,'SET ROLE', 
56,'CREATE SCHEMA', 
57,'CREATE CONTROL FILE', 
58,'ALTER TRACING', 
59,'CREATE TRIGGER', 
60,'ALTER TRIGGER', 
61,'DROP TRIGGER', 
62,'ANALYZE TABLE', 
63,'ANALYZE INDEX', 
64,'ANALYZE CLUSTER', 
65,'CREATE PROFILE', 
66,'DROP PROFILE', 
67,'ALTER PROFILE', 
68,'DROP PROCEDURE', 
69,'DROP PROCEDURE',
70,'ALTER RESOURCE COST', 
71,'CREATE SNAPSHOT LOG', 
72,'ALTER SNAPSHOT LOG', 
73,'DROP SNAPSHOT LOG', 
74,'CREATE SNAPSHOT', 
75,'ALTER SNAPSHOT', 
76,'DROP SNAPSHOT', 
79,'ALTER ROLE',
85,'TRUNCATE TABLE', 
86,'TRUNCATE CLUSTER', 
87,'-', 
88,'ALTER VIEW', 
89,'-', 
90,'-', 
91,'CREATE FUNCTION', 
92,'ALTER FUNCTION', 
93,'DROP FUNCTION', 
94,'CREATE PACKAGE', 
95,'ALTER PACKAGE', 
96,'DROP PACKAGE', 
97,'CREATE PACKAGE BODY', 
98,'ALTER PACKAGE BODY', 
99,'DROP PACKAGE BODY', 
command||' - ???') COMMAND, 
        decode(L.LMODE,1,'No Lock', 
                2,'Row Share', 
                3,'Row Exclusive', 
                4,'Share', 
                5,'Share Row Exclusive', 
                6,'Exclusive','NONE') lmode, 
        decode(L.REQUEST,1,'No Lock', 
                2,'Row Share', 
                3,'Row Exclusive', 
                4,'Share', 
                5,'Share Row Exclusive', 
                6,'Exclusive','NONE') request, 
l.id1||'-'||l.id2 Laddr, 
l.type||' - '|| 
decode(l.type, 
'BL','Buffer hash table instance lock', 
'CF',' Control file schema global enqueue lock', 
'CI','Cross-instance function invocation instance lock',
'CS','Control file schema global enqueue lock', 
'CU','Cursor bind lock',
'DF','Data file instance lock', 
'DL','Direct loader parallel index create',
'DM','Mount/startup db primary/secondary instance lock', 
'DR','Distributed recovery process lock', 
'DX','Distributed transaction entry lock', 
'FI','SGA open-file information lock', 
'FS','File set lock', 
'HW','Space management operations on a specific segment lock',
'IN','Instance number lock',
'IR','Instance recovery serialization global enqueue lock', 
'IS','Instance state lock',
'IV','Library cache invalidation instance lock', 
'JQ','Job queue lock',
'KK','Thread kick lock',
'MB','Master buffer hash table instance lock', 
'MM','Mount definition gloabal enqueue lock', 
'MR','Media recovery lock', 
'PF','Password file lock',
'PI','Parallel operation lock',
'PR','Process startup lock',
'PS','Parallel operation lock',
'RE','USE_ROW_ENQUEUE enforcement lock', 
'RT','Redo thread global enqueue lock', 
'RW','Row wait enqueue lock', 
'SC','System commit number instance lock', 
'SH','System commit number high water mark enqueue lock', 
'SM','SMON lock',
'SN','Sequence number instance lock', 
'SQ','Sequence number enqueue lock', 
'SS','Sort segment lock',
'ST','Space transaction enqueue lock', 
'SV','Sequence number value lock', 
'TA','Generic enqueue lock', 
'TD','DDL enqueue lock', 
'TE','Extend-segment enqueue lock', 
'TM','DML enqueue lock', 
'TT','Temporary table enqueue lock', 
'TX','Transaction enqueue lock', 
'UL','User supplied lock', 
'UN','User name lock', 
'US','Undo segment DDL lock',
'WL','Being-written redo log instance lock', 
'WS','Write-atomic-log-switch global enqueue lock', 
'TS',decode(l.id2,0,'Temporary segment enqueue lock (ID2=0)', 
'New block allocation enqueue lock (ID2=1)'), 
'LA','Library cache lock instance lock (A=namespace)', 
'LB','Library cache lock instance lock (B=namespace)', 
'LC','Library cache lock instance lock (C=namespace)', 
'LD','Library cache lock instance lock (D=namespace)', 
'LE','Library cache lock instance lock (E=namespace)', 
'LF','Library cache lock instance lock (F=namespace)', 
'LG','Library cache lock instance lock (G=namespace)', 
'LH','Library cache lock instance lock (H=namespace)', 
'LI','Library cache lock instance lock (I=namespace)', 
'LJ','Library cache lock instance lock (J=namespace)', 
'LK','Library cache lock instance lock (K=namespace)', 
'LL','Library cache lock instance lock (L=namespace)', 
'LM','Library cache lock instance lock (M=namespace)', 
'LN','Library cache lock instance lock (N=namespace)', 
'LO','Library cache lock instance lock (O=namespace)', 
'LP','Library cache lock instance lock (P=namespace)', 
'LS','Log start/log switch enqueue lock', 
'PA','Library cache pin instance lock (A=namespace)', 
'PB','Library cache pin instance lock (B=namespace)', 
'PC','Library cache pin instance lock (C=namespace)', 
'PD','Library cache pin instance lock (D=namespace)', 
'PE','Library cache pin instance lock (E=namespace)', 
'PF','Library cache pin instance lock (F=namespace)', 
'PG','Library cache pin instance lock (G=namespace)', 
'PH','Library cache pin instance lock (H=namespace)', 
'PI','Library cache pin instance lock (I=namespace)', 
'PJ','Library cache pin instance lock (J=namespace)', 
'PL','Library cache pin instance lock (K=namespace)', 
'PK','Library cache pin instance lock (L=namespace)', 
'PM','Library cache pin instance lock (M=namespace)', 
'PN','Library cache pin instance lock (N=namespace)', 
'PO','Library cache pin instance lock (O=namespace)', 
'PP','Library cache pin instance lock (P=namespace)', 
'PQ','Library cache pin instance lock (Q=namespace)', 
'PR','Library cache pin instance lock (R=namespace)', 
'PS','Library cache pin instance lock (S=namespace)', 
'PT','Library cache pin instance lock (T=namespace)', 
'PU','Library cache pin instance lock (U=namespace)', 
'PV','Library cache pin instance lock (V=namespace)', 
'PW','Library cache pin instance lock (W=namespace)', 
'PX','Library cache pin instance lock (X=namespace)', 
'PY','Library cache pin instance lock (Y=namespace)', 
'PZ','Library cache pin instance lock (Z=namespace)', 
'QA','Row cache instance lock (A=cache)', 
'QB','Row cache instance lock (B=cache)', 
'QC','Row cache instance lock (C=cache)', 
'QD','Row cache instance lock (D=cache)', 
'QE','Row cache instance lock (E=cache)', 
'QF','Row cache instance lock (F=cache)', 
'QG','Row cache instance lock (G=cache)', 
'QH','Row cache instance lock (H=cache)', 
'QI','Row cache instance lock (I=cache)', 
'QJ','Row cache instance lock (J=cache)', 
'QL','Row cache instance lock (K=cache)', 
'QK','Row cache instance lock (L=cache)', 
'QM','Row cache instance lock (M=cache)', 
'QN','Row cache instance lock (N=cache)', 
'QO','Row cache instance lock (O=cache)', 
'QP','Row cache instance lock (P=cache)', 
'QQ','Row cache instance lock (Q=cache)', 
'QR','Row cache instance lock (R=cache)', 
'QS','Row cache instance lock (S=cache)', 
'QT','Row cache instance lock (T=cache)', 
'QU','Row cache instance lock (U=cache)', 
'QV','Row cache instance lock (V=cache)', 
'QW','Row cache instance lock (W=cache)', 
'QX','Row cache instance lock (X=cache)', 
'QY','Row cache instance lock (Y=cache)', 
'QZ','Row cache instance lock (Z=cache)','????') Lockt 
from    V$LOCK L,  
        V$SESSION S, 
        SYS.USER$ U1, 
        SYS.OBJ$ T1 
where   L.SID = S.SID  
and     T1.OBJ#  = decode(L.ID2,0,L.ID1,1)  
and     U1.USER# = T1.OWNER# 
and     S.TYPE != 'BACKGROUND' 
order by 1,2,5


Выйти на сессии, которые держат pin на объекте, 
на котором ждем library cache pin

select s.sid, s.serial#, s.sql_hash_value as x_hash
from v$session s, x$kglpn x
where x.kglpnuse = s.saddr
and x.kglpnhdl = v$session_wait.P1raw;

-- выйти на LCO
select *
from x$kglob
where kglhdadr = v$session_wait.p1raw


Скрипт:

deadlock.sh
#!/bin/bash
. ${HOME}/bin/_conf/.env

# Check Parameters:
if [ $1 ]
then
  oracle_sid=`echo ${1} | tr "[A-Z]" "[a-z]"`
else
  echo "Error! Call `basename $0` With 1-st parameter as "
  exit
fi

# Variables:
export ORACLE_SID=${oracle_sid}
DBA_EMAIL="$MAIL_DBA $MAIL_APP"
loc_lock_tree_list=${TMP_DIR}/${ORACLE_SID}_lock_tree.lst
loc_host_name=`hostname`



#----- Lock Tree
sqlplus -s / << EOF > ${loc_lock_tree_list}
set linesize 900
set pagesize 92
set echo off
set head off
set feed off
set tab off

SELECT
  ' Blocking_user    : ' || bs.username || chr(13)||chr(10)||
  ' DB_user          : ' || bs.username || chr(13)||chr(10)||
  ' Waiting_user     : ' || ws.username || chr(13)||chr(10)||
  ' Blocking_SID     : ' || bs.SID      || chr(13)||chr(10)||
  ' Blocking_Serial# : ' || bs.serial#  || chr(13)||chr(10)||
  ' Waiting_SID      : ' || ws.SID      || chr(13)||chr(10)||
  ' Blocking_App     : ' || bs.program  || chr(13)||chr(10)||
  ' Waiting_App      : ' || ws.program  || chr(13)||chr(10)||
  ' Blocking_machine : ' || bs.machine  || chr(13)||chr(10)||
  ' Waiting_machine  : ' || ws.machine  || chr(13)||chr(10)||
  ' Blocking_OS_user : ' || bs.osuser   || chr(13)||chr(10)||
  ' Waiting_OS_user  : ' || ws.osuser   || chr(13)||chr(10)||
  ' lock_type        : ' ||
    DECODE (
      wk.TYPE,
      'MR', 'Media Recovery',
      'RT', 'Redo Thread',
      'UN', 'USER Name',
      'TX', 'Transaction',
      'TM', 'DML',
      'UL', 'PL/SQL USER LOCK',
      'DX', 'Distributed Xaction',
      'CF', 'Control FILE',
      'IS', 'Instance State',
      'FS', 'FILE SET',
      'IR', 'Instance Recovery',
      'ST', 'Disk SPACE Transaction',
      'TS', 'Temp Segment',
      'IV', 'Library Cache Invalidation',
      'LS', 'LOG START OR Switch',
      'RW', 'ROW Wait',
      'SQ', 'Sequence Number',
      'TE', 'Extend TABLE',
      'TT', 'Temp TABLE',
      wk.TYPE) || chr(13)||chr(10)||
  ' Mode_held        : ' ||
    DECODE (
      hk.lmode,
      0, 'None',
      1, 'NULL',
      2, 'ROW-S (SS)',
      3, 'ROW-X (SX)',
      4, 'SHARE',
      5, 'S/ROW-X (SSX)',
      6, 'EXCLUSIVE',
      TO_CHAR (hk.lmode)) ||chr(13)||chr(10)||
  ' Mode_req         : ' ||
    DECODE (
      wk.request,
      0, 'None',
      1, 'NULL',
      2, 'ROW-S (SS)',
      3, 'ROW-X (SX)',
      4, 'SHARE',
      5, 'S/ROW-X (SSX)',
      6, 'EXCLUSIVE',
      TO_CHAR (wk.request)) ||chr(13)||chr(10)||
  ' Id1              : ' || TO_CHAR (hk.id1) || chr(13)||chr(10)||
  ' Id2              : ' || TO_CHAR (hk.id2)
FROM
  v\$lock hk,
  v\$session bs,
  v\$lock wk,
  v\$session ws
WHERE hk.BLOCK = 1
  AND hk.lmode != 0
  AND hk.lmode != 1
  AND wk.request != 0
  AND wk.TYPE(+) = hk.TYPE
  AND wk.id1(+) = hk.id1
  AND wk.id2(+) = hk.id2
  AND hk.SID = bs.SID(+)
  AND wk.SID = ws.SID(+)
ORDER BY 1;

exit
EOF

if  [ -s ${loc_lock_tree_list} ]; then
  echo "Blocking lock exists"

#-- Addons:
echo ' '       >> ${loc_lock_tree_list}
echo 'Addons:' >> ${loc_lock_tree_list}
echo '=======' >> ${loc_lock_tree_list}

sqlplus -s / << EOF >> ${loc_lock_tree_list}
set linesize 900
set pagesize 92
set echo off
--set head off
set feed off
set tab off

select a.sid, a.serial#, a.username, s.sql_text
from v\$session a, v\$sqltext s
where a.sql_address=s.address
  and a.sql_hash_value=s.hash_value
  and (sid, serial#) in (
    SELECT bs.sid, bs.serial#
    FROM v\$lock hk, v\$session bs, v\$lock wk, v\$session ws, v\$process p
    WHERE hk.lmode != 0
      AND hk.lmode != 1
      AND wk.request != 0
      AND wk.TYPE(+) = hk.TYPE
      AND wk.id1(+) = hk.id1
      AND wk.id2(+) = hk.id2
      AND hk.sid = bs.sid(+)
      AND wk.sid = ws.sid(+)
      AND bs.paddr=p.addr
      AND (bs.username IS NOT NULL)
      AND (bs.username <> 'SYS')
  )
order by a.username, a.sid, s.piece;

exit
EOF

mailx -s "${loc_host_name}(${ORACLE_SID}): Warning! Blocking lock exists" "${DBA_EMAIL}" < ${loc_lock_tree_list}

else
  echo "No blocking lock"
fi



Oracle События ожидания


Группы событий ожидания


I/O  (Write I/O, Read I/O)
Buffer Cache  (Buffer Busy, Cache Latches)
Library Cache  (Library Cache, Shared Pool)
Lock  (TX Row Lock, TX ITL Lock, HW Lock)
Redo  (Log File, Log Buffer, Log File Sync)
SQL*Net  (SQL*Net more data from client, SQL*Net more data to client)



Administrative
Ожидания, относящиеся к ожиданиям пользователей завершения команд DBA
( например таких как index rebuild )


Application

Ожидания, относящиеся к коду пользовательских приложений
(например, lock waits caused by row level locking or explicit lock commands)


Cluster

Ожидания, относящиеся к ресурсам Real Application Cluster
(например, global cache resources such as 'gc cr block busy')


Commit

Этот класс ожиданий включает всего одно событие  - ожидание подтверждения
записи redo log из буфера на диск после commit  ('log file sync')


Concurrency
Ожидания внутреннего ресурса БД (например, latches)


Configuration

Ожидание вызвано неадекватной конфигурацией БД  или ресурсов экземпляра
(например, undersized log file sizes, shared pool size)


Idle

Ожидания бездействия, пустое ожидание (например, 'SQL*Net message from client')


Network

Ожидания связанные с передачей сетевых сообщений
(например, 'SQL*Net more data to dblink')


Other

Ожидания, которые не должны типично проявляться в системе
(например, 'wait for EMON to spawn')


Scheduler

Ожидания относящиеся к Resource Manager (например, 'resmgr: become active')


System I/O

Ожидания ввода/вывода фоновых процессов
(например, DBWR wait for 'db file parallel write')


User I/O

Ожидания ввода/вывода пользовательских процессов
(например, 'db file sequential read')



Некоторые события ожидания

db file sequential read
log file sync
db file scattered read
latch free
enqueue
SQL*Net more data from client
direct patch read
direct patch write
buffer busy waits
SQL*Net more data to client
log buffer space
log file switch completion
library cache pin
SQL*Net break/reset to client
io done
file open
free buffer waits
db file parallel read
weite complete waits
library cache lock
SQL*Net more data from dblink
log file switch (checkpoint incomplete)
library cache load lock
row cache lock
local write wait
sort segment request
process startup
uread message
file identify
pipe put
switch logfile command
SQL*Net break/reset to dblink
log file switch (archivig needed)
wait for a undo record
direct patch write (lob)
undo segment extension



Enqueue ST - Use LMT or preallocate large extents
Enqueue HW - Pre allocate extents above HW (high water mark)
Enqueue TX - Increase inittrans/maxtrans
Enqueue TM - Index foreign key Check application locking tablex DML Locks




SQL*Net more data from client
Это единственное чистое ожидание бездействия из всех SQL*Net% ожиданий.
Оно возникает когда серверный процесс запущен, а клиент ему никаких запросов не присылает.
Пользователь запустил форму, открыл соединениес БД, что-то там поделал и начал пить чай.
Серверный процесс висит и ждёт.


SQL*Net more data to client
Это уже более содержательная штука.
Это ожидание возникает у серверного процесса когда он хочет отправить сообщенин клиенту и не может
(например сеть занята, сетевой драйвер занят)
Это может влиять на производительность даже очень заметно.
Ожидание возможности отправить клиенту порцию данных.
Select выполнил fetch, порцию получили, надо клиенту отослать и почему-то это сделать невозможно.
Приходится ждать, сеть сбоит.
Оно считается idle, потому что средствами Oracle не лечится, лечится только средствами OC или железа.
С ним можно бороться только настройкой сети.


db file sequential read
Ожидание дискового чтения.
Нормальное ожидание, зависания на нем не бывает.
Если таких ожиданий много, то значит плохо используется кэш буферов т.е. много обращений к диску.
Нужно настроить SQL-оператор, уменьшая количество логических чтений, надеясь что при этом и количество физических чтений уменьшится.
Или настраивать кэш буферов, т.е. увеличивать коэффициент попадания в кэш.


log file sync
Возникает при коммите, когда сбрасывается содержимое журнального буфера в файл оперативного журнала.
Серверный процесс, который получил от пользователя commit, дёргает процесс LGWR и говорит ему сбросить журнальный буфер.
Пока LGWR этим занимается, серверный процессвисит в этом ожидании.
Если это ожидание часто встречается и занимает много времени, то можно попробовать снизить количество коммитов (частоту коммитов).
А может проблема в том, что LGWR не успевает, тогда настройте журнальные файлы.


log file parallel write
Усли оно коррелирует с log file sync, то это уже проблема.
Скорее всего проблема в плохой настройке процесса LGWR.
Надо перебросить файл оперативного журнала на отдельный диск.
Уменьшить их дуплицирование, увеличить размер журнального буфера.


enqueue
Ожидание получения бблокировки.
Когда сессия стоит в очереди waiter-ов или converter-ов она находится в состоянии ожидания enqueue.
Смотрим в v$lock и разбираемся кто и кого ждёт и почему.


latch free
Ожидание освобождения защёлки.
Нельзя точно сказать что с ними делать, типов защёлок около 200.
Разобраться за какую именно защёлку идёт конкуренция, какую защёлку чаще всего ждут.


======================================================================


system_wait

set lines 100
set pages 100
clear breaks
clear columns

column c1 heading 'Event' format A30 wrap
column c2 heading 'Total Waits' format 999,999,999
column c3 heading 'Wait Time(s)' format 999,999
column c4 heading 'Timeouts' format 999,999,999
column c5 heading 'Avg. Wait (s)' format 99.999

select event c1,
total_waits c2,
time_waited/100 c3,
total_timeouts c4,
average_wait/100 c5
from v$system_event
where event not in (
'dispatcher timer',
'lock element cleanup',
'Null event',
'parallel query dequeue wait',
'parallel query idle wait - Slaves',
'pipe get',
'PL/SQL lock timer',
'pmon timer',
'rdbms ipc message',
'slave wait',
'smon timer',
'SQL*Net break/reset to client',
'SQL*Net message from client',
'SQL*Net message to client',
'SQL*Net more data to client',
'virtual circuit status',
'WMON goes to sleep'
)
and event not like 'DFS%'
and event not like '%done%'
and event not like '%Idle%'
and event not like 'KXFX%'
order by c2 desc ;




system_wait_details

set lines 132
set pages 1000
clear breaks
clear columns

column c1 heading 'ID' format 999
column c2 heading 'Process' format A10
column c3 heading 'Event' format A30
column c4 heading 'Total Waits' format 999,999
column c5 heading 'Wait Time(s)' format 999,999
column c6 heading 'Timeouts' format 999,999
column c7 heading 'Avg. Wait(s)' format 999
column c8 heading 'Max Wait(s)' format 999

select b.sid c1,
decode(b.username,NULL,c.name,b.username) c2,
event c3,
a.total_waits c4,
round((a.time_waited / 100),2) c5,
a.total_timeouts c6,
round((average_wait / 100),2) c7,
round((a.max_wait / 100),2) c8
from
sys.v_$session_event a,
sys.v_$session b,
sys.v_$bgprocess c
where
event not like 'DFS%' and
event not like 'KXFX%' and
a.sid = b.sid and
b.paddr = c.paddr (+) and
event not in (
'lock element cleanup',
'pmon timer',
'rdbms ipc message',
'smon timer',
'SQL*Net message from client',
'SQL*Net break/reset to client',
'SQL*Net message to client',
'SQL*Net more data to client',
'dispatcher timer',
'Null event',
'io done',
'parallel query dequeue wait',
'parallel query idle wait - Slaves',
'pipe get',
'PL/SQL lock timer',
'slave wait',
'virtual circuit status',
'WMON goes to sleep')
order by 4 desc ;


currently_waiting

set lines 200
set pages 100
clear breaks
clear columns

col c1 heading 'SID' format 999
col c2 heading 'User Name' format a16 wrap
col c3 heading 'Event Name' format a10 wrap
col c4 heading 'InWait(s)' format 999,999.99
col c5 heading 'Wait Time' format 999,999.99
col c6 heading 'state' format a10 wrap
col c7 heading 'P1 text' format a10 wrap
col c8 heading 'P1 Val' format 999,999,999
col c9 heading 'P1 Raw' format a10
col c10 heading 'P2 Text' format a10 wrap
col c11 heading 'P2 Val' format 999,999,999
col c12 heading 'P2 Raw' format a10
col c13 heading 'P3 Text' format a10 wrap
col c14 heading 'P3 Val' format 999,999,999
col c15 heading 'P3 Raw' format a10

SELECT
a.sid c1,
decode(b.username, NULL,c.name, b.username) c2,
a.event c3,
a.seconds_in_wait c4,
a.wait_time c5,
a.state c6,
a.p1text c7,
a.p1 c8,
a.p2text c10,
a.p2 c11,
a.p3text c13,
a.p3 c14
FROM
v$session_wait a,
v$session b,
v$bgprocess c
where
event not like 'DFS%' and
event not like 'KXFX%' and
a.sid = b.sid and
b.paddr = c.paddr (+) and
event not in
('lock element cleanup',
'pmon timer',
'rdbms ipc message',
'smon timer',
'SQL*Net message from client',
'SQL*Net break/reset to client',
'SQL*Net message to client',
'SQL*Net more data to client',
'dispatcher timer',
'Null event',
'parallel query dequeue wait',
'parallel query idle wait - Slaves',
'pipe get',
'PL/SQL lock timer',
'slave wait',
'virtual circuit status',
'WMON goes to sleep'
)
order by 4 desc ;







buffer busy waits

Индицирует ожидание буфера в буферном кэше базы данных.
Это означает, что сеанс считывает этот буфер в кэш и/или модифицирует его.
Может также служить симптомом нехватки списков свободных участков таблиц,
поддерживающих множество параллельно выполняющихся операций INSERT.


db file parallel write

Индицирует ожидания, относящиеся к процессам DBWR. Может быть связан с
числом конфигурированных процессов DBWR или подчиненных процессов
ввода/вывода DBWR. Может также означать низкую или высокую конкуренцию
устройств.


db file scattered read

Индицирует ожидания, ассоциируемые со сканированием всей таблицы.
Может означать конкуренцию ввода/вывода или чрезмерное количество
операций ввода/вывода.


db file sequential read

Индицирует (наряду с другими вещами) ожидания, ассоциируемые
со сканированием индекса. Может означать конкуренцию ввода/вывода или
чрезмерное количество операций ввода/вывода.


db file single write

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


direct path read

Индицирует ожидания, ассоциируемые с разрешенным прямым
вводом/выводом. Обычно указывает на конкуренцию ввода/вывода за
устройства.


direct path write

To же, что и выше. Относится к операциям чтения.


enqueue

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


free buffer inspected

Индицирует ожидания, ассоциируемые с процессом идентификации
свободного буфера в буферном кэше базы данных для переноса в него
данных.


free buffer waits

Индицирует недостаток свободных буферов в буферном кэше базы данных.
Это может означать одно из двух: либо буферный кэш базы данных слишком
мал, либо "грязный список" (список модифицированных блоков кэша) не
переписывается на диск достаточно быстро. Если дело в этом,
сконфигурируйте большее количество процессов DBWR или подчиненных
процессов ввода/вывода, в зависимости от обстоятельств. Это событие
происходит, когда инспектирующее свободные буферы событие не находит ни
одного свободного буфера.


latch free

Индицирует конкуренцию за защелку (внутреннюю блокировку) для
конкретного номера защелки (latch*). Убедитесь, что число защелок было
настроено на максимально разрешенное значение, для чего проверьте
релевантные (относящиеся к делу) параметры файла init.ora. Если проблема
остается, необходимо определить, что вызывает конкуренцию за защелку.
Событие latch free - это всего лишь симптом более серьезной проблемы.
Например, если получающийся в результате номер защелки является
защелкой библиотечного кэша (при этом коллективный пул настроен должным
образом), ситуация может означать значительный объем жесткого
синтаксического анализа. Это обычно является проблемой для приложений,
содержащих в себе жестко закодированные значения. Необходимо либо
переписать приложение, используя переменные связи, либо перейти к
Oracle8i и использовать CURSOR_SHARING=force (или искать другие способы).


library cache load lock

Требуется для загрузки объектов в библиотечный кэш. Такое событие
ожидания может произойти, если имеет место значительное число
загрузок/перезагрузок (обычно подобное происходит вследствие либо
недостаточного многократного использования операторов SQL, либо из-за
неправильно выбранного размера области коллективного пула).


library cache lock

Индицирует ожидания, ассоциируемые с одновременным выполнением
нескольких процессов, обращающихся к библиотечному кэшу. Может означать
неправильный выбор размера области коллективного пула, так как эту
блокировку необходимо захватить для размещения объектов в библиотечном
кэше.


library cache pin

Индицирует ожидания, которые ассоциируются с одновременными
обращениями к библиотечному кэшу и могут происходить в тех случаях, когда
необходимо модифицировать или проверить конкретный объект в
библиотечном кэше.


log buffer space

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


log file parallel write

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


log file single write

Индицирует запись в блок заголовка журнальных файлов. Может означать
ожидания, возникающие во время выполнения контрольных точек.


log file switch

(требуется архивирование)
Ожидание означает, что ARCH не работает синхронно с LGWR. Может
произойти из-за того, что онлайновые журналы обновлений слишком малы,
устройства медленны или высока конкуренция за устройства (обычно
возникающая вследствие размещения журнальных файлов на тех же
устройствах, что и файлы данных). Имеет смысл изучить возможность
создания нескольких процессов ARCH или подчиненных процессов
ввода/вывода, в зависимости от обстоятельств.


log file switch

(незавершенная контрольная точка)
Индицирует ожидания, ассоциируемые с неверно заданными размерами
журнальных файлов (обычно слишком малыми).


log file sync

Индицирует ожидания, ассоциируемые со сбрасыванием на диск буферов
журналов при выполнении операции фиксирования транзакции, Если
ожидания являются устойчивыми, это может означать конкуренцию устройств,
на которых размещены онлайновые файлы журналов обновлений и/или
медленную работу устройств.


SQL*Net more data from client/to client

Индицирует затраченное время в процессе взаимодействия
пользовательского и серверного процессов. В некоторых довольно редких
случаях указывает на проблемы при передаче по сети, но по большей части
может быть проигнорировано. Если приложение поддерживает конфигурацию
ARRAYSIZE (например, Oracle Forms, SQL*Plus, Рго*С и т. д.),
конфигурирование ARRAYSIZE на значение, превосходящее значение по
умолчанию, может потенциально уменьшить ожидания для этого события.


SQL*Net more data from dblink

Индицирует ожидание, ассоциируемое с распределенной обработкой
(выполнением SELECT из других баз данных). Это событие происходит, когда
онлайновые просмотры других баз данных выполняются через DBUNKS. Если
просматриваемые данные главным образом статические, их пересылка в
локальную (расположенную на этой же ЭВМ) таблицу и ее обновление по
мере необходимости могут дать существенное увеличение
производительности.



transaction

Индицирует ожидания, ассоциируемые с блокировкой транзакций операциями
отката.


undo segment extension

Индицирует динамическое выделение экстентов и расширение сегментов
отката. Это может означать нехватку (недостаточность) заданного числа
сегментов отката или слишком малое значение оптимального числа
MINEXTNTS для этих сегментов.


write complete waits

Индицирует ожидания, связанные с буферами, которые необходимо
переписать на диск. Такая запись может быть вызвана обычным старением
блоков из буферного кэша базы данных.



Более подробное описание событий ожидания:


События ожидания – это статистики, значения которых увеличиваются серверным процессом (потоком), что бы указать, что он должен был ожидать завершения события, перед тем как продолжить обработку. Увеличение количества и продолжительности событий ожиданий может свидетельствовать о возникающих проблемах производительности. Мониторинг событий ожидания является важной составной частью работы администратора баз данных.

Классы событий ожидания

Для облегчения мониторинга ожиданий, все события ожидания oracle разделены на классы. Следующий список описывает каждый из этих классов:

Administrative - ожидание пользователем результатов выполнения DBA команд (например, пересоздание индекса).

Application - ожидание результатов из пользовательского программного кода (например, ожидание блокировки, вызванное блокировкой уровня строки или явными командами блокировки).

Cluster - ожидания, связанные с ресурсами Real Application Clusters (например, глобальные ресурсы кэша, такие как 'gc cr block busy').

Commit - класс включает только одно событие ожидания - ожидание подтверждения записи в журнал после фиксации транзакции ('log file sync').

Concurrency - ожидание внутренних ресурсов базы данных (например, защёлки).

Configuration - ожидания вызванные неправильной конфигурацией базы данных или ресурсов экземпляра (например, карликовые размеры файлов журнала или разделяемого пула).

Idle - ожидания, показывающие неактивность сеанса в ожидании работы (например, 'SQL*Net message from client').

Network - ожидания связанные с обменом сообщениями по сети (например, 'SQL*Net more data to dblink').

Other – ожидания, которые обычно не должны происходить в системе (например, 'wait for EMON to spawn').

Queue - содержит события, которые показывают задержки получения дополнительных данных в канальной среде. Время, затраченное в этих ожиданиях, указывает на неэффективность или другие проблемы в канале, что влияет на такие функции Oracle, как Oracle Streams, параллельные запросы или PL/SQL пакеты DBMS_PIPE.

Scheduler – ожидания связанные с менеджером ресурсов (например, 'resmgr: become active').

System I/O – ожидания ввода-вывода фоновых процессов (например, ожидание DBWR 'db file parallel write').

User I/O – ожидания ввода-вывода пользовательских процессов (например, 'db file sequential read' ).



Параметры событий ожидания

Большинство  событий ожидания имеют параметры, с помощью которых можно получить дополнительную информацию об ожидании. Некоторые из этих параметров специфичны для конкретного события ожидания, другие имеют общее предназначение. Ниже приведены наиболее часто встречающиеся общие параметры событий ожидания:

block#

Номер ожидаемого блока относительно начала файла.

break?

Если значение этого параметра равняется 0, был отправлен сброс клиенту. Ненулевое значение указывает, что было отправлено прерывание.

class

Класс блока описывает, как используется содержание блока. Например, класс 1 представляет блок данных, и класс 4 представляет заголовок сегмента.

dba

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

driver id

Адрес функции отсоединения используемого в настоящий момент драйвера.

file#

Номер файла базы данных.

id1

Первый идентификатор (id1) очереди с ожиданием или глобальной блокировки принимает своё значение от P2 или P2RAW. Значение идентификатора зависит от имени (P1).

id2

Второй идентификатор (id1) очереди с ожиданием или глобальной блокировки принимает своё значение от P3 или P3RAW. Значение идентификатора зависит от имени (P1).

le

Относительный индекс в V$GC_ELEMENT

mode

Параметр обычно хранится в младших байтах P1 или P1RAW и указывает на режим запроса очереди или глобальной блокировки. Существуют следующие значения этого параметра:

Значение режима

Описание
1    Null mode
2    Sub-Share
3    Sub-Exclusive
4    Share
5    Share/Sub-Exclusive
6    Exclusive


name and type

Имя или тип блокировки с очередью или глобальной блокировки может быть определены по двум старшим байтам P1 или P1RAW. Имя определяется всегда двумя символами.

session#

Идентификатор неактивного сеанса (SID).

waited

Общая сумма времени, которую ожидал сеанс, прежде чем закончиться.

Описания событий ожидания

Ниже перечислены названия событий ожидания, их краткие описания,  единицы измерения времени и параметры:

alter system set dispatcher

Сеанс выполнил оператор ALTER SYSTEM SET DISPATCHER = string и ожидает старта диспетчеров.

Время ожидания: сеанс будет ждать 1 / 100 секунды, чтобы затем проверить, стартовали ли диспетчеры. Если нет, сеанс ожидает их старта снова.

Параметры:

waited                 Показывает, сколько раз сеанс ожидал интервал в 1 / 100 секунды.

batched allocate scn lock request

Сеанс ожидает другой процесс, чтобы выделить системный номер изменения (SCN).  Если время, в течение которого приоритетный процесс ожидал получения другим процессом SCN, истекло, то такой приоритетный процесс получит SCN.

Время ожидания: составляет 1 секунду при условии, что для выделения SCN требуется меньше времени.

BFILE check if exists

Сеанс ожидает проверки на существование внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее с начала вызова exists

Параметры:  session#, waited

BFILE check if open

Сеанс ожидает открытия внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее с начала вызова isopen

Параметры:  session#, waited

BFILE closure

Сеанс ожидает закрытия внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее с начала вызова close

Параметры:  session#, waited

BFILE get length

Сеанс ожидает, чтобы проверить размер  внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее с начала вызова проверки размера

Параметры:  session#, waited

BFILE get name object

Сеанс ожидает, чтобы найти или сгенерировать внешнее имя внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее до завершения  make external file name.

Параметры:  session#, waited

BFILE get path object

Сеанс ожидает, чтобы найти или сгенерировать внешний путь внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее до завершения  make external path.

Параметры:  session#, waited

BFILE internal seek

Сеанс ожидает окончания позиционирования в пределах внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее до завершения seek.

Параметры:  session#, waited

BFILE open

Сеанс ожидает открытия внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее с начала вызова isopen.

Параметры:  session#, waited

BFILE read

Сеанс ожидает окончания чтения внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее до завершения read.

Параметры:  session#, waited

broadcast mesg queue transition

Процессы входят в "wait for broadcast mesg queue transition", когда очистка дескриптора канала публикатора обращается к надёжному  широковещательному каналу. Публикатор ответственен за перемещение сообщения в свободную очередь, но он не может это сделать, пока сообщение не находится в готовой очереди. Если сообщение всё ещё не находится в готовой очереди, то процесс ожидает при входе. Это ожидание события наиболее вероятно обнаружиться, когда процесс Oracle собирается нормально завершиться или когда PMON очищает мёртвый процесс. Переданное сообщение находится в очереди восстановления другого дескриптора канала (например, ch2).

Время ожидания: изменяется

Параметры:

channel handle -  указатель дескриптора канала публикатора

message -  указатель широковещательного сообщения

location -  число, указывающее на функцию в KSR, где процесс ожидает

>= 10.2 |

broadcast mesg recovery queue transition

Процессы входят в "wait for broadcast mesg recovery queue transition", когда очистка дескриптора канала публикатора обращается к надёжному  широковещательному каналу. Широковещательное сообщение находится в очереди восстановления другого дескриптора канала. Процесс ожидает при входе, если сообщение должно быть удалено из очереди восстановления другого дескриптора канала.  Это ожидание события наиболее вероятно обнаружиться, когда процесс Oracle собирается нормально завершиться или когда PMON очищает мёртвый процесс. Переданное сообщение находится в очереди восстановления другого дескриптора канала (например, ch2).

Время ожидания: изменяется

Параметры:

channel handle  -  указатель дескриптора канала публикатора.

message -  указатель широковещательного сообщения

location -  число, указывающее на функцию в KSR, где процесс ожидает

>= 10.2 |

buffer busy waits

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

Время ожидания: Нормальное время ожидания составляет 1 секунду. Если сеанс уже ожидал буфер во время последнего ожидания, то следующее время ожидания будет 3 секунды.

Параметры:  file#, block#

Id - событие ожидания занятого буфера, вызываемое из различных мест в сеансе

buffer deadlock

Oracle в действительности не ожидает на этом событии, приоритетный процесс возвращает CPU. Поэтому возможность отловить это событие крайне мала. Это не взаимная блокировка вызванная приложением, а лишь предполагаемая взаимная блокировка на уровне кэша. Она возникает, когда слой кэша не может получить буфер в определенном режиме в пределах определенного количества времени.

Время ожидания: 0 секунд. Приоритетный процесс только возвращает CPU, после чего обычно помещается в конец CPU очереди выполнения.

Параметры:  class, mode, dba

Flag - флаг указывает на внутренние флаги, используемые сеансом, чтобы получить блок

buffer for checkpoint

Буфер не мог быть отмечен контрольной точкой, потому что некоторый процесс изменяет его. Это означает, что после ожидания, DBWR отсканирует буферный кэш снова. Данное событие могло произойти во время закрытия базы данных или после того, как пользователь сделал локальную контрольную точку. Во время этой ситуации не может быть закрыта база данных.

Время ожидания:          1 секунда.

Параметры:                     mode, dba

state – состояние указывает статус содержимого буфера

buffer# - индекс блока находящегося в буфферном кэше (V$BH)

 <= 10.1 |

buffer latch

Сеанс ожидает получения защёлки хешированной цепочки буферов (buffer hash chain).  Прежде всего, используется в подпрограммах получения дампа.

Время ожидания: 1 секунда.

Параметры:  class, mode, dba

latch addr – виртуальный адрес в SGA, где эта защёлка расположена.

chain# - индекс в массиве хешированной цепочки буферов. Когда индекс равен 0xfffffff,  приоритетный процесс ожидает защёлку LRU.

buffer read retry

Событие имеет место только тогда, когда экземпляр монтируется в разделяемом режиме (Oracle Real Application Cluster). Возникает, если во время чтения буфера его содержимое изменилось. Это означает одно из двух:

Номер версии, адрес блока данных или номер инкарнации больше не соответствуют порядковому номеру, сохранённому в блоке
Полученная и хранимая контрольная сумма блока  не соответствует друг другу
Блок будет повторно прочитан (может быть  до 3 неудачных попыток), после чего предполагается повреждение, и поврежденный блок выводится в файл трассировки.

Время ожидания: общее время чтения

Параметры:  file#, block#

checkpoint completed

Сеанс ожидает завершения контрольной точки. Событие может произойти, например, во время закрытия базы данных или во время выполнения локальной контрольной точки.

Время ожидания: 5 секунд.

cleanup of aborted processes

Когда порождаемый процесс прерывается в середине порождения, текущий сеанс должен ожидать, пока идентификатор (pid) нового процесса не заполниться. Как только pid будет заполнен, порождаемый процесс будет прерван.

Время ожидания: Обычно 3 секунды.

Параметры:

location – местоположение ожидания

control file parallel write

Событие возникает тогда, когда сеанс осуществляет запись физических блоков во все контрольные файлы. Это происходит в следующих случаях:

Сеанс начинает транзакцию контрольного файла (чтобы удостовериться, что контрольные файлы актуальны в случае, если сеанс аварийно завершается до того как транзакция контрольного файла зафиксирована)
Сеанс фиксирует транзакцию контрольного файла
Изменяется общая запись в контрольном файле, новое значение записывается во все контрольные файлы
Время ожидания: время, которое требуется, чтобы закончить все записи во все контрольные файлы.

Параметры:

files – количество контрольных файлов в которые записывает сеанс

blocks – количество блоков, которые сеанс записывает в контрольный файл

requests – количество запросов ввода-вывода нужных сеансу для записи

control file sequential read

Чтение из контрольного файла. Может происходить, например при:

Создание резервной копии контрольных файлов
Разделении информации из контрольных файлов (между экземплярами)
Чтения других блоков контрольных файлов
Чтение блока заголовка
Время ожидания: общее время чтения.

Параметры:

file# – номер контрольного файла из которого сеанс читает.

block# – номер блока в контрольном файле, с которого сеанс начинает чтение. Размер блока является физическим размером блока порта (обычно 512 байтов, у некоторых портов в UNIX может быть 1 или 2 Кбайта).

blocks – количество блоков, которые сеанс пытается прочитать.

control file single write

Ожидание происходит тогда, когда разделяемая информация контрольных файлов записывается на диск. Это атомарная операция защищаемая блокировкой с очередью (CF), для того чтобы только один сеанс  мог одновременно записывать записи в базу данных.

Время ожидания: общее время записи.

Параметры:

file# – номер контрольного файла в который сеанс записывает.

block# – номер блока в контрольном файле, с которого сеанс начинает запись. Размер блока является физическим размером блока порта (обычно 512 байтов, у некоторых портов в UNIX может быть 1 или 2 Кбайта).

blocks – количество блоков, которые сеанс пытается прочитать.

cursor: mutex S

Ожидание события возникает тогда, когда сеанс делает запрос на получения мьютекса (mutex)  курсора в разделяемом режиме, в то время как мьютекс на этот же курсор был ранее захвачен в монопольном режиме другим сеансом.

Параметры:

P1 – Значение хэш-функции курсора

P2 – Значение mutex (верхние 2 байта содержат SID сеанса захватившего mutex в монопольном режиме, нижние 2 байта содержат значение 0)

P3 – Условие mutex (internal code locator) или Mutex Sleeps

cursor: mutex X

Ожидание события возникает тогда, когда сеанс делает запрос на получения мьютекса (mutex) курсора в монопольном режиме, в то время как мьютекс на этот же курсор был ранее захвачен в монопольном режиме другим сеансом или удерживается в разделяемом режиме несколькими сеансами. Для получения сеансом мьютекса на курсор в монопольном режиме, удержания мьютекса в других сеансах должны быть освобождены.

Параметры:

P1 – Значение хэш-функции курсора

P2 – Значение mutex (верхние 2 байта содержат SID сеанса захватившего mutex в монопольном режиме, нижние 2 байта содержат значение 0)

P3 – Условие mutex (internal code locator) или Mutex Sleeps

cursor: pin S

Ожидание события возникает тогда, когда сеанс хочет обновить закрепление (pin) разделяемого мьютекса, в то время как другой сеанс обновляет закрепление разделяемого мьютекса для того же самого курсора. Обычно это событие наблюдается редко, так как обновление закрепления разделяемого мьютекса происходит очень быстро.

Время ожидания: микросекунды

Параметры:

P1 – Значение хэш-функции курсора

P2 – Значение mutex (верхние 2 байта содержат SID сеанса захватившего mutex в монопольном режиме, нижние 2 байта содержат значение 0)

P3 – Условие mutex (internal code locator) или Mutex Sleeps

cursor: pin S wait on X

Ожидание события возникает тогда, когда сеанс запрашивает закрепление (pin) разделяемого мьютекса, в то время как другой сеанс удерживает закрепление мьютекса в монопольном режиме для того же самого курсора.

Время ожидания: микросекунды

Параметры:

P1 – Значение хэш-функции курсора

P2 – Значение mutex (верхние 2 байта содержат SID сеанса захватившего mutex в монопольном режиме, нижние 2 байта содержат значение 0)

P3 – Условие mutex (internal code locator) или Mutex Sleeps

cursor: pin X

Ожидание события возникает тогда, когда сеанс делает запрос на закрепление мьютекса (mutex) курсора в монопольном режиме, в то время как закрепление мьютекса в монопольном режиме на этот же курсор был ранее получено другим сеансом или удерживается в разделяемом режиме несколькими сеансами. Для получения сеансом закрепления мьютекса в монопольном режиме на курсор, закрепления мьютекса в других сеансах должны быть освобождены.

Время ожидания: микросекунды

Параметры:

P1 – Значение хэш-функции курсора

P2 – Значение mutex (верхние 2 байта содержат SID сеанса захватившего mutex в монопольном режиме, нижние 2 байта содержат значение 0)

P3 – Условие mutex (internal code locator) или Mutex Sleeps

Data Guard: process clean up

Ожидание события возникает во время аварийного завершения процесса Data Guard. Data Guard будет ждать одну секунду для освобождения ресурсов процесса.

Data Guard: process exit

Ожидание события возникает во время аварийного завершения процесса Data Guard. Data Guard будет ждать завершения процесса перед любой очисткой ресурсов процесса, которая может понадобиться. При необходимости  он будет засыпать на одну секунду до следующей проверки на завершение процесса.

Data Guard Broker: single instance

Процесс  Data Guard Broker (DMON) ожидает полной остановки других экземпляров в кластере перед продолжением операций брокера.

Время ожидания: зависит от числа экземпляров, но не превышает 30 секунд

db file parallel read

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

Время ожидания: ожидание пока все операции ввода-вывода не завершаться

Параметры:

files – число файлов из которых читает сеанс

blocks– общее количество блоков, которые будут  считаны

requests– общее количество запросов ввода-вывода (равное количеству блоков)

db file parallel write

Событие возникает в DBWR. Оно показывает, что DBWR выполняет параллельную запись в файлы и блоки. Когда выполняется последний ввод –вывод на диск, возникает ожидание окончания операции.

Время ожидания: Ожидание пока операция ввода-вывода не завершится

Параметры:

requests - общее количество запросов ввода-вывода (равное количеству блоков)

interrupt

timeout - значение тайм-аута в сотых частях секунды (до завершения операции ввода-вывода).

db file scattered read

Событие подобно “db file sequential read” за исключением того, что сеанс читает несколько блоков данных.

Время ожидания: время требуемое для завершения всех операций ввода-вывода.

Параметры:  file#, block#

Blocks– Число блоков которые сеанс пытается считать из file#,начиная с блокаblock#

db file sequential read

Сеанс ожидает, пока выполняется последовательное чтение из базы данных. Это событие также используется  для восстановления контрольного файла, дампа и получения заголовков файлов данных.

Время ожидания: время, требуемое для завершения всех операций ввода-вывода.

Параметры:  file#, block#

Blocks – Число блоков, которые сеанс пытается считать (должно равняться 1).

db file single write

Событие ожидания используется при записи в заголовки файлов.

Время ожидания: фактическое время, требуемое для завершения всех операций ввода-вывода.

Параметры:  file#, block#

Blocks – Число блоков, которые сеанс пытается записать в file#,начиная с блокаblock#

DFS db file lock

Событие имеет место только для DBWR в Real Application Clusters. Каждый DBWR в каждом экземпляре держит глобальную блокировку (DF) в разделяемом режиме на каждый файл. Экземпляр, который пытается перевести файл в offline режим, расширяет глобальную блокировку от разделяемого до монопольного режима. Событие сигнализирует другим экземплярам, что надо синхронизировать их SGA и контрольные файлы, перед тем как файл будет переведён в  offline режим.

Время ожидания: 1 секунда в цикле. DBWR ожидает в цикле (sleep, check) пока другие экземпляры не понизят блокировки до NULL режима.  В это время, DBWR не может выполнять другие задачи, например, такие как запись буферов.

Параметры:  file#

DFS lock handle

Сеанс ожидает получения дескриптора блокировки для запроса глобальной блокировки. Дескриптор блокировки идентифицирует глобальную блокировку. С этим дескриптором могут быть выполнены другие операции на этой глобальной блокировке (так как он идентифицирует глобальную блокировку в будущих операциях, таких как, например операции преобразования или освобождения). Глобальная блокировка поддерживается DLM.

Время ожидания: Сеанс ожидает в цикле, пока не получит дескриптор блокировки из DLM. Длительность ожидания в цикле 0.5 секунд.

Параметры:  name, mode, id1, id2

direct path read

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

Время ожидания: 10 секунд. Сеанс будет осведомлён о завершении асинхронного ввода-вывода. Сеанс не будет ожидать все 10 секунд.  Ожидание длиться в цикле, пока все операции ввода-вывода не завершатся. 

Параметры:

descriptor address - указатель на контекст незавершённых  операций прямого ввода-вывода, завершения которых ожидает сеанс.

first dba – адрес блока (dba) самой первой операции ввода-вывода в контексте, на который ссылается адрес дескриптора.

block cnt – Число корректных буферов в контексте на который ссылается адрес дескриптора.

direct path sync

Во время операций прямого доступа, данные асинхронно пишутся в файлы базы данных. В некоторый момент времени сеанс должен гарантировать, что весь ожидающий асинхронный ввод-вывод был завершён на диск. В это время Unix fsync команда, которая синхронизует данные с диском, подтверждает, что все записи завершились и все данные на диске.

Время ожидания: время, потраченное на завершение операций fsync, которое обычно является временем, потраченным, чтобы завершить ожидающий ввод-вывод.

Параметры: file#

flags - флаги используемые для отладки

direct path write

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

Время ожидания: 10 секунд. Сеанс будет осведомлён о завершении асинхронного ввода-вывода. Сеанс не будет ожидать все 10 секунд.  Ожидание длиться в цикле, пока все операции ввода-вывода не завершатся. 

Параметры:

descriptor address - указатель на контекст незавершённых  операций прямого ввода-вывода, завершения которых ожидает сеанс.

first dba – адрес блока (dba) самой первой операции ввода-вывода в контексте, на который ссылается адрес дескриптора.

block cnt – Число корректных буферов в контексте на который ссылается адрес дескриптора.

Disk file operations I/O

Событие ожидания используется для файловых операций (к примеру, open, close, seek, resize).  Оно так же может использоваться и для различных операций ввода-вывода, таких как дамп блока и доступ к файлу паролей.

Время ожидания: фактическое время, которое требуется для того, чтобы сделать ввод-вывод.

Параметры:

FileOperation – тип файловой операции

fileno – идентификационный номер файла

filetype – тип файла (для примера, файл данных, файл журнала)

dispatcher shutdown

Во время завершения работы (normal, immediate) экземпляр должен ожидать завершения работы диспетчеров. Сеанс, который инициировал завершение работы экземпляра, посылает сигналы каждому диспетчеру и ожидает завершения диспетчерского процесса.

Время ожидания: 1 секунда

Параметры:

waited - Указывает на общее время ожидания. После истечения 5 минут сеанс записывает в alert файл и файлы трассировки сообщение о возможной проблеме.

dispatcher timer

Событие в основном означает, что диспетчер неактивен и ожидает некоторой работы.

Время ожидания: 60 секунд

Параметры:

sleep time – Задаваемое время засыпания. Диспетчер быстрее возвратиться к работе, если получит сообщение от данных полученных из сети или процессов разделяемого сервера о том, что данные надо отослать обратно клиенту.

duplicate cluster key

Данное событие может возникнуть при создании нового кластерного ключа. Если обнаруживается, что другой процесс  вставил кластерный ключ в блок данных или индекса, то сеанс ожидает, чтобы потом повторить вставку ключа. При повторной попытке должен быть найден корректный кластерный ключ.

Время ожидания: 0.01 секунды

Параметры:

dba – адрес блока, в который сеанс пытается вставить кластерный ключ

enq: OW – initialization

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

Время ожидания:  Общее время, необходимое для инициализации контекста wallet

enq: OW – termination

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

Время ожидания: Общее время, необходимое для освобождения памяти  используемой контекстом wallet и завершения контекста.

enqueue

Сеанс ожидает локальной блокировки. Ожидание зависит от имени блокировки.

Время ожидания:  зависит от имени блокировки

Параметры: name, mode


flashback buf free by RVWR

Событие ожидания имеет место тогда, когда включен Flashback Database. Сеанс ожидает процесса (RVWR), который записывает данные журнала flashback на диск, когда буферы заполнены. Сеанс будет ожидать до тех пор, пока RVWR не освободит буферы.

Если данное событие выходит на вершину ожиданий, это означает, что файловая система или хранение области Fast Recovery на уровне системы не имеют достаточной пропускной способности чтобы записывать журналы flashback.

Время ожидания: 1 секунда

flashback logfile sync

Ожидание данных flashback database, которые будут записаны на диск.

Время ожидания: Включает время записи данных flashback  процессом RVWR плюс  регистрацию процесса.

free buffer waits

Событие может произойти если:

Все чтения буфера приостановлены. Это происходит в случаях, когда файл был в режиме только для чтения, а стал в режиме записи-чтения. Все существующие буферы должны стать недействительными, так как они не связаны с элементами блокировок (необходимыми при монтировании  в параллельном (разделяемом) режиме). Поэтому буферы кэша не назначаются адресам блоков данных до тех пор, пока они не станут недействительными.
Сеанс перемещал некоторые модифицированные (грязные) буферы в очередь модифицированных буферов и эта очередь стала полной. Очередь должна быть записана сначала. Сеанс будет ожидать на этом событии, а затем попробует ещё раз найти свободный буфер.
Осуществляется поиск свободных буферов. Если свободный буфер не найден, то Oracle ожидает одну секунду, а затем пытается снова получить буфер (зависит от контекста).
Время ожидания: 1 секунда

Параметры: file#, block#

free global transaction table entry

Сеанс ожидает свободный слот в глобальной таблице транзакции (используемой опцией Distributed Database). Сеанс будет  ожидать в течение 1 секунды, после чего повторит запрос.

Время ожидания: 1 секунда

Параметры:

tries – число попыток поиска свободного слота в глобальной таблице транзакции

free process state object

Используется во время создания процесса. Сеанс сканирует таблицу процессов и ищет свободный слот процесса. Если ни один свободный слот не найден, PMON проверяет, все ли процессы, находящиеся в таблице живы. Если найдены мёртвые процессы, то PMON уберёт их и сделает слот доступным для новых процессов. После этого, ожидающий процесс повторно сканирует таблицу процессов, что бы найти новый слот.

Время ожидания: 1 секунда

gc recovery quiesce

Восстановление экземпляра ожидает завершения операции глобального кэша.

Время ожидания: Общее время завершения операции глобального кэша.

Параметры: file#, block#, class

GCS lock open S

Сеанс ожидает получения ресурса в разделяемом режиме на блоке, который идентифицируется параметрами  file# и block#.

Время ожидания: 1 секунда

Параметры: file#, block#, class

GCS lock open X

Сеанс ожидает получения ресурса в монопольном режиме на блоке, который идентифицируется параметрами file# и block#.

Время ожидания: 1 секунда

Параметры: file#, block#, lenum

gcs remastering wait for drop pkey

Сеанс, удаляющий объект ожидает демона менеджера блокировок (LMD), чтобы удалить связь объекта с экземпляром.

 Время ожидания: 20 сотых частей секунды

Параметры:    

pkey – идентификатор удаляемого объекта

global cache busy

Сеанс ожидает конвертации буфера из текущего разделяемого в монопольный текущий статус.

Время ожидания: 1 секунда

Параметры: file#, block#, le

global cache lock cleanup

PMON ожидает очистки процессом LCK контекста блокировки после того, как приоритетный процесс аварийно завершился во время операции блокировки глобального кэша.

Время ожидания: 1 секунда

Параметры: file#, block#, lenum

global cache freelist

Все освобождённые блокировки использованы и была запрошена новая блокировка. Чтобы сделать элемент ресурса доступным, он проверяется с помощью запроса ping.

Время ожидания:  продолжительность операции проверки элемента ресурса с помощью запроса ping.

inactive session

Это событие используется в двух целях:



Переключение сеансов. Если определён период тайм-аута, то сеанс будет ожидать заданное количество времени, после чего отсоединиться.
Уничтожение сеансов. Может выполняться с помощью KILL SESSION или внутреннего запроса. Уведомив сеанс об уничтожении, событие ожидает завершения сеанса в течение 1 минуты.


Время ожидания: 1 секунда

Параметры: session#, waited

inactive transaction branch

Сеанс ожидает ветвь транзакции, которая в настоящий момент используется другим сеансом.

Время ожидания: 1 секунда

Параметры: waited

branch#- порядковый номер транзакции, которую ожидает сеанс

index block split

Во время поиска ключа индекса в индексном блоке, Oracle обнаружил, что индексный блок в это время расщепился. Oracle будет ожидать окончания расщепления, чтобы потом снова найти ключ индекса.

Время ожидания: сеанс отдаёт CPU, таким образом нет никакого фактического времени ожидания.

Параметры:                   

rootdba – корневой блок индекса

level – уровень блока индекса, который сеанс пытается расщепить. Для листовых блоков уровень равен 0. Если уровень > 0, то это - блок ответвления. (Корневой блок можно считать специальным блоком ответвления).

сhilddba – блок который сеанс пытается расщепить

instance state change

Сеанс ожидает процесс SMON чтобы включить или выключить кэш или восстановление транзакции. Такое обычно происходит во время команд ALTER DATABASE OPEN или CLOSE.

Время ожидания:  Время ожидания зависит от количества времени, которое занимает действие (то есть, количество необходимого для восстановления)

Параметры:                   

layer - значение может быть 1 или 2. Если 1, это означает, что уровень транзакции хочет, чтобы восстановление транзакции было выполнено. Если 2, это означает, что будет выполняться восстановление кэша.

value - значение может быть 0 (отключено) или 1 (включено)

waited- число секунд ожидания

io done

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

Время ожидания: 50 миллисекунд

Параметры:    

msg ptr – указатель на запрос ввода-вывода

kcl bg acks

Сеанс ожидает завершения операций фонового процесса (ов) LCK. Например:



Восстановление блокировки
Инициализация блокировок (запуск)
Завершение блокировок (завершение)


Время ожидания: 10 секунд

Параметры:    

count – число закончившихся процессов LCK

loops – колличество ожиданий  завершения операций процесса LCK

ksxr wait for mount shared

Межэкземплярное широковещательное средство экземпляра Oracle ожидает завершение монтирования базы данных в разделяемом режиме.

Время ожидания:  время, потраченное на монтирование экземпляра. Если значение неопределенное, то, скорее всего, запуск экземпляра завис.

ktm: instance recovery

Сеанс ожидает процесс SMON, чтобы завершить экземпляр, восстановить транзакцию или очистить сегмент сортировки.

Время ожидания: время ожидания может измениться и зависит от объёма необходимого восстановления

Параметры:

undo segment# - если значение 0, SMON, вероятно, выполняет восстановление экземпляра. Если P1 > 0, то для поиска сегмент отката можно использовать следующий запрос:

select *
  from v$rollstat
 where usn = undo segment#;

latch activity

Событие используется для определения того, должна ли быть защёлка очищена.

Время ожидания: от 0.05 сек. до 0.1 сек.

Параметры:

address – адрес проверяемой защёлки

number – номер активной защёлки. Для поиска дополнительной информации можно использовать следующий запрос:

select *
from v$latchname
where latch# = number;

latch free

Процесс ожидает защёлку, которая в настоящий момент захвачена другим процессом.

Время ожидания: Время ожидания увеличивается по экспоненте и не включает в себя повторение процесса получения защёлки (spin активное ожидание).  Максимальное время ожидания так же зависит от числа защёлок, которые захватил процесс. В пределах 2 секунд ожидание инкрементное.

Параметры:

address – адрес ожидаемой защёлки

number – номер защёлки. Для поиска дополнительной информации можно использовать следующий запрос:

select *
from v$latchname
where latch# = number;

latch: cache buffers chains

Событие ожидания получения защёлки cache buffers chains. Данная защёлка служит для того, чтобы защитить буферный список в буферном кэше. Используется при поиске, добавлении и удалении буфера из буферного кэша. При этих операциях на цепочку состоящую из нескольких буферов буферного кэша накладывается защёлка, которая препятствует доступу других сеансов к конкретному блоку находящемуся в данной буферной цепочке. В это время другие сеансы осуществляющие доступ к блоку будут ожидать получения защёлки на данной буферной цепочке. После завершения операции защёлка снимается.

Большое количество данного события ожидания может свидетельствовать о наличии «горячего» (интенсивно используемого) блока в буферном кэше.

library cache load lock

Сеанс пытается найти блокировку для загрузки объекта базы данных. Блокировка для загрузки всегда захватывается в монопольном режиме, что бы никто больше не мог загрузить этот объект. Если блокировка для загрузки будет занята, то сеанс будет ожидать на этом событии, пока блокировка не станет доступной.

Время ожидания: 3 секунды (1 секунда для PMON)

Параметры:

object address – адрес загружаемого объекта

lock address –адрес используемой блокировки загрузки

mask – указывает какие части данных объекта должны быть загружены

library cache lock

Событие управляет конкуренцией между клиентами библиотечного кэша. Оно получает блокировку на указатель  объекта, чтобы:



Один из клиентов мог препятствовать тому, чтобы другие клиенты получили доступ к этому объекту
Один из клиентов мог поддерживать зависимость в течение долгого времени (например, что бы никакие другие сеансы не могли изменить объект).


Блокировка так же может запрашиваться для поиска объекта в кэше библиотеки.

Время ожидания: 3 секунды (1 секунда для PMON)

Параметры:  namespace

handle address - адрес загружаемого объекта

lock address – адрес используемой блокировки загрузки. Это не защёлка (latch) или блокировка (enqueue), а   объект состояния (State Object).

mode – указывает какие части данных объекта должны быть загружены

library cache pin

Событие управляет конкуренцией библиотечного кэша. Закрепление объекта вызывает загрузку «кучи» в память. Если клиент хочет изменить или просмотреть объект, он должен получить закрепление после блокировки.

Время ожидания: 3 секунды (1 секунда для PMON)

Параметры: namespace

handle address - адрес загружаемого объекта

pin address – адрес используемой блокировки загрузки. Это не защёлка (latch) или блокировка (enqueue), а   объект состояния (State Object).

mode – указывает какие части данных объекта должны быть загружены

library cache shutdown

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

LMON global data update

Операция прокручивающей миграции ожидает от  процесса LMON подтверждения, что глобальные данные обновлены.

lock manager wait for remote message

Менеджер блокировок ожидает сообщение от  удаленного менеджера блокировок в той же самой конфигурации.

Время ожидания: Прошедшее время ожидания

Параметры:

waittime - время фактического ожидания

Log archive I/O

Используется при архивировании журнальных файлов (для основной и резервной базы данных). Когда процесс архивирования исчерпывает все свои буферы ввода-вывода, он будет ожидать свободного буфера.

Время ожидания: Зависит от скорости дисков

log buffer space

Ожидание пространства в журнальном буфере. Возникает из-за того, что сеанс пишет данные быстрее, чем фоновый процесс  LGWR. Необходимо увеличить размер журнального буфера или переместить файлы журналов на более быстрые диски.

Время ожидания: Обычно 1 секунда, но если переключение журнала то 5 секунд

log file parallel write

Ожидание, возникающее при перезаписи журнальных записей из журнального буфера в файлы журнала.

Время ожидания: Время завершения ввода - вывода. Несмотря на то, что журнальные записи пишутся параллельно, запись  не считается законченной, пока не завершится последний ввод-вывод  на диск.

Параметры:

files – количество записываемых файлов

blocks – количество блоков, которые будут записаны

requests- число запросов ввода-вывода

log file sequential read

Ожидание завершения чтения из файла журнала. Используется для чтения журнальных записей из файла журнала.

Время ожидания: Время завершения физического ввода-вывода (чтение).

Параметры:  block#

log#  – Относительный порядковый номер журнального файла в группе журнальных файлов (используется только при дампе журнального файла).

blocks – число читаемых блоков

log file single write

Ожидание завершения записи в файл журнала. Используется при обновлении заголовка файла журнала. Возникает при добавлении журнального файла в группу и увеличении порядкового номера (sequence number).

Время ожидания: Время завершения физического ввода-вывода (запись).

Параметры:  block#

log#  – номер  группы  (файла) , в которую в настоящий момент времени сеанс осуществляет запись

blocks – число записываемых блоков

log file switch (archiving needed)

Ожидание переключения журнала, в связи с тем, что файл журнала, переключаемый LGWR, ещё не был заархивирован.  Необходимо проверить сигнальный файл, чтобы удостовериться, что архивирование не остановилось из-за ошибки записи. Для ускорения архивирования можно добавить дополнительные процессы архивирования или разместить архивные файлы на быстрых дисках.

Время ожидания: 1 секунда

log file switch (checkpoint incomplete) 

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

Время ожидания: 1 секунда

log file switch (clearing log file)

Ожидание переключения журнала, в связи с тем, что была выполнена команда CLEAR LOGFILE или из-за того, что была неявная очистка файла журнала при восстановлении.

Время ожидания: 1 секунда

log file switch (private strand flush incomplete)

Пользовательские сеансы при попытке генерации журнальной информации ожидают на событии, когда LGWR ждёт DBWR, чтобы завершить сбрасывание журнальной информации из IMU буферов в журнальный буфер; Когда DBWR заканчивает работу, LGWR может закончить запись в текущий журнал, и затем переключить файл журнала.

Время ожидания: 1 секунда

log file switch completion

Ожидание завершения переключения  журнала

Время ожидания: 1 секунда

log file sync

Когда пользовательский сеанс фиксирует изменения, журнальная информация должна быть сброшена в журнальный файл. Сеанс пользователя сигнализирует об этом процессу LGWR. Когда процесс LGWR закончит сброс информации из журнального буфера, он оповестит об этом сеанс пользователя.

Время ожидания: включает время затраченное на запись информации из журнального буфера и отправку сообщения.

Параметры:                   

buffer# – количество физических буферов в журнальном буфере, которые должны синхронизироваться.

log switch/archive

Используется в качестве части оператора ALTER SYSTEM ARCHIVE LOG CHANGE scn. Сеанс ожидает текущий журнальный файл от всех открытых потоков, которые будут заархивированы.

Время ожидания: до 10 секунд

Параметры:                   

thread# – номер потока, который в настоящее время архивирует текущий журнальный файл.

optimizer stats update retry

Когда сеансы пытаются обновить статистику оптимизатора для одного и того же объекта, они могут ожидать в случаях, когда один из сеансов уже получил все необходимые блокировки (закрепления) на  записях библиотечного кэша (кэша строки)  относящихся к объекту. После короткого периода времени ожидания запрос на блокировку записей повторяется. В дополнение к неявным операциям сбора и обслуживания статистики с использованием пакета DBMS_STATS, Oracle может попытаться обновить статистику для некоторых объектов или от имени пользователя или в собственных целях обслуживания.

Время ожидания: 10 миллисекунд

parallel recovery change buffer free

Координатор параллельного восстановления ожидает изменённого отображения буфера, который будет выпущен одним из подчинённых процессов восстановления.

Время ожидания: 100 миллисекунд

parallel recovery control message reply

Координатор параллельного восстановления ожидает все подчинённые процессы, что бы ответить на  синхронное управляющее сообщение.

Время ожидания: 100 миллисекунд

parallel recovery coord send blocked

Координатор параллельного восстановления не может отправить сообщение с журнальными изменениями, потому что подчинённый процесс восстановления  всё ещё  активно применяет изменения, и полученный им канал ещё не освобождён.

Время ожидания: 100 миллисекунд

parallel recovery coord wait for reply

Координатор параллельного восстановления ожидает завершения всех подчинённых процессов восстановления.

Время ожидания: 100 миллисекунд

parallel recovery coordinator waits for slave cleanup

Координатор параллельного восстановления ожидает завершения всех подчинённых процессов восстановления, чтобы завершиться корректно.

Время ожидания: 10 миллисекунд

parallel recovery read buffer free

Координатор параллельного восстановления ожидает буфер журнала, кторый будет освобождён всеми всеми подчинёнными процессами восстановления. Только после того как каждый подчинённый процесс закончит применять изменения из буфера журнала, буфер может использоваться координатором, что бы предоставить следующие журнальные данные.

Время ожидания: 100 миллисекунд

parallel recovery slave next change

Подчинённый параллельный процесс неактивен и ожидает следующего сообщения с изменениями от координатора.

Время ожидания: 100 миллисекунд

pending global transaction(s)

Событие ожидания может произойти только во время тестирования. Сеанс ожидает очистки приостановленных транзакций.

Время ожидания: 30 секунд

Параметры:

scans – сколько раз сеанс просматривал таблицу PENDING_TRANS$.

pipe get

Сеанс ожидает сообщение, которое будет получено по каналу, или истечение таймера канала.

Время ожидания: 5 секундное пробуждение (проверка) или таймер канала, установленный пользователем

Параметры:

handle address – указатель на объект библиотечного кэша для канала

buffer length – длина буфера

timeout – таймер канала установленный пользователем

pipe put

Сеанс ожидает истечение таймера канала для отправки сообщения или выделения пространства в канале.

Время ожидания: 5 секундное пробуждение (проверка) или таймер канала, установленный пользователем

Параметры:

handle address – указатель на объект библиотечного кэша для канала

buffer length – длина записи или буфера, который был помещён в канал

timeout – таймер канала установленный пользователем

PL/SQL lock timer

Событие вызывается через процедуру DBMS_LOCK.SLEEP. Наиболее вероятно произойдёт из процедур написанных пользователем.

Время ожидания: Время ожидания задаётся в сотых частях секунд и зависит от пользовательского контекста.

Параметры:

duration - продолжительность, которую пользователь определил в процедуре DBMS_LOCK.SLEEP

pmon timer

Это основное событие ожидания PMON. Когда PMON неактивен, он ожидает на этом событии.

Время ожидания: до 3 секунд, если заранее небыло уведомления

Параметры:

duration – фактическое количество времени, которое PMON провёл в режиме ожидания

prewarm transfer retry

Ожидание возникает при повторном получении хэш-защёлки, после её освобождения.

Время ожидания: 10 миллисекунд

prior process spawner to be cleaned up

Когда предшествующий процесс умирает во время порождения фонового процесса, текущий процесс который пытается породить новый фоновый процесс, ожидает, пока состояние предшествующего процесса не очистится.

Время ожидания: обычно 3 – 10 секунд

Параметры:

process_pid –идентификатор процесса (см. V$PROCESS.PID) состояние которого должно быть очищено

process_sno –порядковый номер процесса (см. V$PROCESS. SERIAL#) состояние которого должно быть очищено

process startup

Ожидание разделяемого сервера, диспетчера, или другого фонового процесса при старте.

Время ожидания:        

Ожидание 1 секунда для фонового процесса при старте. Если время истекло,  то повторное ожидание в течении 5 минут и далее в случае неудачи выдача ошибки. Если процесс запустился то событие подтвердит это.

Параметры:

type –типзапускаемогопроцесса

process# –порядковый номер запускаемого процесса

waited –общее время ожидания старта процесса

PX Deque wait

Процесс ожидает сообщения во время параллельного выполнения.

Время ожидания:

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

Параметры:

reason –причина извлечения из очереди

sleeptime –время бездействия (sleep) сеанса

loop –общее время бездействия (sleep) сеанса

PX qref latch

У каждого процесса выполняющего параллельный запрос есть qref защёлка, которая должна быть получена прежде чем можно управлять очередью буферов.

Время ожидания: ожидание до 1 секунды

Параметры:

function – указывает тип ожидания

sleeptime –время ожидания сеанса (в сотых частях секунды)

qref –адрес процесса очереди, для которой сеанс, ожидает

PX server shutdown

Во время нормального или непосредственного (immediate) завершения работы подчинённые параллельные процессы оповещаются, чтобы они нормально очистились. Если какие-либо параллельные процессы все еще живы после 10 секунд, то они уничтожаются.

Время ожидания: ожидание до 0.5 секунды

Параметры:

nalive – число параллельных подчинённых процессов которые ещё работают

sleeptime –время бездействия начиная с момента ожидания сеанса

loop –сколько раз сеанс ожидал на этом событии

PX signal server

Это событие может произойти только в монопольном режиме. Координатор запросов сигнализирует подчинённым запросам (Query Slaves), что произошла ошибка.

Время ожидания: ожидание до 0.5 секунды

Параметры:

serial – порядковый номер подчинённого процесса очереди

error –происшедшая ошибка

nbusy –число занятых подчинённых процессов



rdbms ipc message

Фоновые процессы (LGWR, DBWR, LMS0) используют это событие, чтобы указать, что они неактивны и ждут от приоритетных процессов IPC сообщения, для того что бы сделать некоторую работу.

Время ожидания: до 3 секунд. Параметр timeout показывает истинное значение простоя

Параметры:

timeout - количество времени в течении которого сеанс ожидает сообщения IPC

rdbms ipc message block

Событие указывает, что все блоки сообщения используются, и что сеанс должен ожидать до тех пор, когда блок сообщения станет доступным.

Время ожидания: до 60 секунд

rdbms ipc reply

Событие используется для ожидания ответа от одного из фоновых процессов.

Время ожидания: определяется пользователем и показывается параметром timeout

Параметры:

from_process – фоновый процесс, которого ожидает сеанс. Ожидается ответ на сообщение IPC, отправленное этим  сеансом.

timeout – время в секундах в течении которого процесс ожидает ответ

read by other session

Событие имеет место, когда сеанс запрашивает буфер, который в настоящий момент читается в буферный кэш другим сеансом. До релиза 10.1 это событие было сгруппировано с другими ожиданиями в событие 'buffer busy wait'.

Время ожидания: буфера, который будет считан другим сеансом (в микросекундах)

Параметры: file#, block#, class#

recovery read

Параллельный подчинённый или последовательный процесс восстановления ожидает завершения чтения блока данных.

Время ожидания: время необходимое чтобы завершить физический ввод-вывод (чтение)

resmgr: become active

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

Время ожидания: время, затраченное на ожидание сеансом свободного слота активных сеансов

Параметры: location – местоположение ожидания

resmgr: cpu quantum

Сеанс ожидает выделения кванта времени процессора. Событие имеет место когда менеджер ресурсов включён и регулирует потребление процессрного времени. Чтобы уменьшить возникновение этого ожидания необходимо увеличить выделение лимита CPU для сеансов текущей потребительской группы.

Время ожидания: время, затраченное на ожидание сеансом кванта процессора

Параметры: location – местоположение ожидания

resmgr: pq queued

Сеанс ожидает в очереди параллельных операторов.

Время ожидания:

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

Параметры: location – местоположение ожидания

rolling migration: cluster quiesce

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

Время ожидания: 1 секунда

Параметры:

location – Будет равно 1, если это ожидание завершения привилегированных операций, после которых стартует rolling upgrade/downgrade. Будет равно 2, если это ожидание завершения rolling upgrade/downgrade на всех нодах кластера.

waits –  Число секунд ожидания в текущем местоположении.

row cache lock

Сеанс пытается получить блокировку  словаря данных.

Время ожидания: до 60 секунд

Параметры: mode

cache id – столбец CACHE# в представлении V$ROWCACHE

request – таймер канала установленный пользователем

RVWR wait for flashback copy

Ожидание конца работы процесса RVWR копирующего ретроспективные данные в flashback буфер, что бы затем записать запрошенные ретроспективные данные.

Время ожидания: 10 миллисекунд

Параметры:

copy latch # - количество защёлок копирования flashback на которых процесс ожидал RVWR

sbtbufinfo

Эта функция вызывается, когда Oracle должен обнаружить размер и число буферов ввода-вывода, выделенных на уровне SBT. Ожидание быстрое и никогда не блокируется.

Время ожидания: меньше чем одна миллисекунда

sbtgetbuf

Эта функция получает один буфер ввода-вывода, который Oracle будет использовать для ввода-вывода во время резервного задания.

Время ожидания: меньше чем одна миллисекунда

sbtmapbuf

Это - внутренняя функция, используемая, чтобы облегчить организацию буферизации данных нескольких процессов. Ожидание быстрое и никогда не блокируется.

Время ожидания: меньше чем одна миллисекунда

sbtrelbuf

Эта функция освобождает буфер ввода-вывода, который уже был обработан во время выполнения задания восстановления, для того чтобы уровень SBT мог заполнить его данными.

Время ожидания: меньше чем одна миллисекунда

scginq AST call

Вызывается сеансом, что бы найти самый высокий режим блокировки установленный на ресурсе.

Время ожидания:

0.2 секунды, но ожидание будет продолжаться пока не будет иницированно прерывание Acquisition AST в режиме NULL.

SGA: allocation forcing component growth

Процесс ожидает перемещения памяти в immediate режиме (автоматическая настройка SGA) после выдачи  ошибки 4031 для MMAN, что бы получить память и разместить её.

Время ожидания: 10 миллисекунд

SGA: MMAN sleep for component shrink

Процесс MMAN  ожидает и засыпает, что бы удовлетворить запрос автонастройки памяти по освобождению замороженных гранул памяти компонента. В релизе 10.1 это событие называлось 'wait for SGA component shrink'.

Время ожидания: 10 миллисекунд

Параметры:

P1 – идентификатор компонента (соответствующий пулу памяти)

P2 – текущий размер в гранулах

P3 – целевой размер в гранулах

SGA: sga_target resize

Запросы изменения памяти ожидают, пока sga target изменяется. В релизе 10.1 это событие называлось 'wait for sga_target resize'.

Время ожидания: 10 миллисекунд

Shared IO Pool Memory

Ожидание, пока буфер разделяемого пула ввода вывода не станет доступным. Такое происходит, когда процессы используют эти буферы для ввода-вывода, и текущий процесс должен ожидать освобождения буфера.

Время ожидания: 10 миллисекунд

11.2 |

single-task message

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

Время ожидания: общее время затраченное сеансом в приложении

shared server idle wait

Событие ожидания простоя разделяемого сервера. Сервер ожидает в общей очереди виртуального канала.

Время ожидания: 30 секунд

smon timer

Основное событие простоя для SMON. SMON будет ожидать на этом событии большую часть времени, пока не наступит предел времени или не поступит уведомление от другого процеса.

Время ожидания: 5 минут (300 секунд)

Параметры:

sleeptime – время, в течении которого SMON ожидает на этом событии (в секундах)

failed – сколько раз процессу SMON поступало уведомление об ошибке

SQL*Net break/reset to client

Сервер отправляет сообщение прерывания или сброса клиенту. Серверный сеанс ожидает ответа от клиента.

Время ожидания:        

Фактическое время требуемое для возврата от клиента сообщения о прерывании и сбросе

Параметры: driver id, break?

SQL*Net break/reset to dblink

То же самое  что и SQL*Net break/reset to client, но сообщение посылается через связь базы данных.

Время ожидания:        

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

Параметры: driver id, break?

SQL*Net message from client

Серверный процесс ожидает сообщения от клиентского процесса.

Время ожидания:        

Время, прошедшее с момента отправки последнего сообщения  клиенту до момента времени получения сообщения от этого клиента.

Параметры: driver id

#bytes – количество байт полученных серверным процессом от клиента

SQL*Net message from dblink

Сеанс ожидает, пока серверный процесс получает сообщение от другого серверного процесса через связь.

Время ожидания:        

Время, прошедшее с момента отправки последнего сообщения серверному процессу до момента времени получения сообщения от этого серверного процесса.

Параметры: driver id

SQL*Net message to client

Серверный процесс отправляет сообщение клиенту

Время ожидания: фактическое время затраченное на отправление

Параметры: driver id

#bytes – количество байт отправленных серверным процессом клиенту

SQL*Net message to dblink

Серверный процесс передаёт сообщение другому серверному процессу через связь

Время ожидания: фактическое время затраченное на отправление

Параметры: driver id

#bytes – количество байт отправленных серверным процессом другому серверному процессу через связь

SQL*Net more data from client

Сервер ожидает клиента, что бы отправить дополнительные данные клиентскому теневому процессу в уже начатой операции.

Время ожидания: зависит от времени, которое потребовалось, что бы получить данные (включая время ожидания)

Параметры: driver id

#bytes – количество байт принятых от клиента

Обычно это событие регистрируется при передаче значительных объемов информации в сторону клиента и проблемы не представляет.

SQL*Net more data from dblink

Приоритетный процесс ожидает дополнительные данные через связь базы данных

Время ожидания: зависит от времени, которое потребовалось, что бы получить данные (включая время ожидания получения данных)

Параметры: driver id

#bytes – количество принятых байт

SQL*Net more data to client

Серверный процесс отправляет дополнительные данные клиенту. Предыдущая операция так же была отправлением.

Время ожидания: Фактическое время завершения отправления

Параметры: driver id

#bytes – число байт отправленных клиенту

SQL*Net more data to dblink

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

Время ожидания: Фактическое время отправления данных другому серверу

Параметры: driver id

#bytes – число байт отправленных по связи базы данных другим серверным процессам

Streams AQ: waiting for messages in the queue

Сеанс ожидает на пустой очереди OLTP (Advanced Queuing) поступления сообщения, что бы исключить это сообщение из очереди.

Время ожидания: время, которое сеанс хочет ожидать, определяется параметром wait time

Параметры:

queue id - ID очереди OLTP, в которой ожидает сеанс

process# - номер процесса сеанса

wait time – намеченное время ожидания

switch logfile command

Сеанс ожидает завершения команды SWITCH LOGFILE.

Время ожидания: 5 секунд

TCP Socket (KGAS)

Сеанс ожидает внешнего хоста для предоставления запрашиваемых данных через сетевой сокет. Большое время ожидания этого события ещё указывает на  возникновение проблемы. Приложение,  которое взаимодействует с удалённым хостом, должно ожидать, пока данные, которые оно считает, не прибыли. Кроме того, в Microsoft Windows, отдельный поток отслеживает прибытие трафика. Этот поток тратит большую часть своей жизни в ожидании отслеживания события ожидания TCP Socket (KGAS).

Время ожидания: общее время для установления сетевого соединения или прихода данных из сети

Параметры:                   

P0 – только для внутреннего пользования Oracle. Значения 8, 9, и 10 могут возникнуть только в рамках специального потока Microsoft Windows; в нормальных сеансах  значения параметра другие.

P1 – только для внутреннего пользования Oracle.

timer in sksawat

Сеанс ожидает завершения асинхронного ввода-вывода процесса ARCH.

Время ожидания: 0.01 секунда

transaction

Ожидание отката блокирующей транзакции.

Время ожидания: 1 секунда

Параметры:    

undo seg# - ID сегмента отката

slot# - ID слота в сегменте отката

wrap# - номер изменения, который последовательно увеличивается для каждой транзакции

count – сколько раз сеанс ожидал на этой транзакции

unbound tx

Сеанс ожидает, что бы увидеть, есть ли какие-либо запущенные транзакции, которые не связаны с  сегментами отката.

Время ожидания: 1 секунда

undo_retention publish retry

Это ожидание может произойти по двум причинам. Сеанс, выполняющий ALTER SYSTEM SET UNDO_RETENTION, может ожидать пока идёт кластерная реконфигурация. Или фоновый процесс MMNL может ожидать кластерного реконфигурирования, пытаясь определить максимальное значение UNDO_RETENTION.

Время ожидания: 1 секунда

Параметры:    

P1 – идентификатор показывающий, где происходит повторение. 1 - повторение публикации макимального значения  undo_retention. 2 – повторение доступа к макимальному значению  undo_retention

P2 – количество повторений (максимальное кол-во 5)

undo segment extension

Сегмент отката может расширяться или сжиматься. Сеанс должен ожидать пока все операции на сегменте отката не закончатся.

Время ожидания: 0.01 секунды

Параметры:

segment# - ID расширяющегося или сжимающегося сегмента отката

undo segment recovery

Процесс PMON откатывает мёртвую транзакцию. Ожидание продолжается, пока откат не закончится.

Время ожидания: 3 секунды

Параметры:

segment# - ID сегмента отката, содержащего откатываемую транзакцию

tx flags -  набор флагов (опций) откатываемой транзакции

undo segment tx slot

Ожидание освобождения слота транзакции в пределах выбранного сегмента отката. Ожидание длится пока слот не будет доступен.

Время ожидания:          1 секунда

Параметры:

segment# - ID сегмента отката, содержащего откатываемую транзакцию

virtual circuit status

Сеанс ожидает виртуального канала, чтобы возвратить тип сообщения показывающий статус. Событие является устаревшим и заменено на событие virtual circuit wait.

Время ожидания: 1 секунда

Параметры:

circuit# - указывает на виртуальный канал

type- указывает чего ожидает сеанс

virtual circuit wait

Сеанс ожидает завершения операции виртуального канала.

Время ожидания: 30 секунд

Параметры:

circuit# - указывает на виртуальный канал

type- указывает тип операции которую ожидает сеанс

11.2 |

WCR: replay client notify

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

Время ожидания: Ожидание пока не будет уведомление. Время каждые 30 секунд

Параметры:

who am I - идентифицирует причину ожидания администраторского потока

1 - ожидание выдачи REPLAY.START ()

2- ожидание завершения запуска воспроизведения или выдачи REPLAY.CANCEL().

11.1 |

WCR: replay clock

Сеанс будет ожидать на этом событии во время воспроизведения, если у него будут логические зависимости от другого сеанса, который еще не произвёл фиксацию изменений.

Время ожидания:

Зависит от количества конкурирующих блокировок строк в исходном сборе нагрузки.

Параметры:

wait for scn's hi 4 bytes – старшие 4 байта из 8 байтового replay SCN, на котором, на котором ожидает сеанс

wait for scn's lo 4 bytes – младшие 4 байта из 8 байтового replay SCN, на котором, на котором ожидает сеанс

11.1 |

WCR: replay lock order

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

Время ожидания:

Зависит от количества конкурирующих блокировок строк в исходном сборе нагрузки.

Параметры:

wait for scn's hi 4 bytes – старшие 4 байта из 8 байтового replay SCN, на котором, на котором ожидает сеанс

wait for scn's lo 4 bytes – младшие 4 байта из 8 байтового replay SCN, на котором, на котором ожидает сеанс

11.1 |

WCR: replay paused

Когда пользователь ввыполняет команду DBMS_WORKLOAD_REPLAY.PAUSE_REPLAY, все сеансы которые осуществляют воспроизведение ожидают на этом событии, пока воспроизведение не возобновится.

11.1 |

WCR: Sync context busy

В режиме воспроизведения по умолчанию, фиксации синхронизируются тем же  порядком как сбор нагрузки. Фиксации сериализируются с помощью Sync context. Воспроизводящий сеанс будет ожидать на этом событии, если попытается фиксировать изменения одновременно с другим воспроизводящим сеансом.

11.1 |

WMON goes to sleep

WMON является UNIX специфичным монитором ожиданий, который может использоваться, чтобы сократить количество системных вызовов, связанных с установкой таймеров для отправления или ожидания в Oracle. Должны быть установлены параметры инициализации, которые включают процесс WMON.

Время ожидания: зависит от следующего тайм-аута

write complete waits

Сеанс ожидает буфера, который будет записан. Запись вызывается нормальным старением или кросс- экземлярным вызовом.

Время ожидания: 1 секунда

Параметры:

file# - идентификатор сегмента отката содержащего откатываемую транзакцию

block# - набор флагов (опций) откатываемой транзакции

id - идентифицирует причину ожидания

writes stopped by instance recovery or database suspension

Сеанс блокируется, пока экземпляр, который запустил Instance Recovery, не закончится.

Время ожидания: 5 секунд

Параметры:

bythread# - идентификатор сегмента отката содержащего откатываемую транзакцию

ourthread# - номер потока текущего экземпляра