programmera.net -> oracledba -> normal för utskrift | info@programmera.net |
Bakgrundsprocesser
1. Instansens bakgrundsprocesser 2. Grundläggande bakgrundsprocesser 3. Slavprocesser och koordinatorer 4. Obligatoriska bakgrundsprocesser 5. Döda en bakgrundprocess |
1. Instansens bakgrundsprocesser
Om instansen är igång så finns alltid ett antal processer på den aktuella maskinen, dessa processer kallas för Oracles bakgrunsprocesser. En bakgrundsprocess har ofta en eller ett par distinkta uppgifter. Processen DBWn har t.ex. bara till uppgift att skriva datablock till disk, en uppgift som i och för sig kan vara nog så komplicerad. En bakgrundsprocess kommunicerar med följande element:
Bilden nedan visar några bakgrundsprocesser och hur de byter data med övriga element:
2. Grundläggande bakgrundsprocesser
En instans kan existera utan att den har någon kontakt med någon databas. För att se vilka processer som är startade då bara instansen är igång startar vi instansen i NOMOUNT:
Vi kollar i en annan terminal vilka processer som användaren "ORACLE" har startat:
[olle@dev1]$ su - oracle
Password:
[olle@dev1]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Aug 19 15:32:56 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> STARTUP NOMOUNT
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 75499088 bytes
Database Buffers 205520896 bytes
Redo Buffers 2973696 bytes
Vi har totalt 16 processer, varav de som börjar med ora_ är instansens bakgrundsprocesser. Processerna har följande uppgifter:
[olle@dev1]$ ps -ef |grep ^oracle |nl
1 oracle 3913 3910 0 15:32 pts/1 00:00:00 -bash
2 oracle 3939 3913 0 15:32 pts/1 00:00:00 sqlplus as sysdba
3 oracle 3942 1 0 15:33 ? 00:00:00 ora_pmon_orcl
4 oracle 3944 1 0 15:33 ? 00:00:00 ora_psp0_orcl
5 oracle 3946 1 0 15:33 ? 00:00:00 ora_mman_orcl
6 oracle 3948 1 0 15:33 ? 00:00:00 ora_dbw0_orcl
7 oracle 3950 1 0 15:33 ? 00:00:00 ora_lgwr_orcl
8 oracle 3952 1 0 15:33 ? 00:00:00 ora_ckpt_orcl
9 oracle 3954 1 0 15:33 ? 00:00:00 ora_smon_orcl
10 oracle 3956 1 0 15:33 ? 00:00:00 ora_reco_orcl
11 oracle 3958 1 0 15:33 ? 00:00:00 ora_cjq0_orcl
12 oracle 3960 1 0 15:33 ? 00:00:00 ora_mmon_orcl
13 oracle 3962 1 0 15:33 ? 00:00:00 ora_mmnl_orcl
14 oracle 3964 1 0 15:33 ? 00:00:00 ora_d000_orcl
15 oracle 3966 1 0 15:33 ? 00:00:00 ora_s000_orcl
16 oracle 3967 3939 0 15:33 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
Bakgrundsprocess Betydelse Beskrivning PMON Process MONitor Städar upp då någon process krashar. PSPn Process SPawner Startar bakgrundsprocesser. MMAN Memory MANager Ny i 10g. Denna process sköter ASMM, alltså att automatiskt ändra storlek på Shared pool, default buffer cache, large pool och java pool. DBWn Database Block Writer Ansvarar för att skriva block från DATA BUFFER CACHE till datafilerna. Man kan ha upp till 20 DBW-processer. LGWR LoG WRiter Skriver data från REDO LOG BUFFER till redologfilerna. CKPT ChecK PoinT Hjälper till att utföra en checkpoint genom att uppdatera header-delen i datafilerna. SMON System MONitor Städar på diverse ställen i databasen. RECO RECOvery Hanterar misslyckade distribuerade transaktioner. CJQn Coordinate Job Queue Ansvarar för att starta jobbprocesser (Jnnn), som exekverar job (dvs schemalagda uppgifter). MMON Managebility MONitor Ny i 10g. Denna process ser till att automatiskt upptäcka prestandaproblem, och registrera dessa i AWR (Automatic Workload Repository). MMON startar slavprocesser (Mnnn) som utför själva arbetet. MMNL Managebility MoNitor Light Ny i 10g. Denna process används för att hämta statistik till AWR (Automatic Workload Repository) från databastabellerna. Dnnn Dispatcher Det finns en dispatcherprocess trots att jag kör en dedikerad server. Läs mer om dispatchern i avsnittet om delad server. Snnn Server Det finns en serverprocess trots att jag kör dedikerad server. Läs mer om serverprocesser i avsnittet om delad server.
3. Slavprocesser och koordinatorer
En slavprocess är en typ av bakgrundsprocess som startas av en koordinator efter behov. När en slavprocess har fullgjort sitt uppdrag självdör den oftast. Vi har följande koordinatorer och slavprocesser på mitt system:
Slavprocess Betydelse Koordinatorprocess Beskrivning Qnnn Queue QMNC Qnnn är en köprocess startad av QMNC. Det antal köprocesser som startas bestäms av parametern AQ_TM_PROCESSES (konstigt nog är denna parameter 0 i mitt system, men som vi snart ser har jag trots detta en process Q000). Jnnn Job CJQn En jobbprocess startad av CJQn. Mnnn Managebility MMON Ny i 10g. En slavprocess som samlar prestandarelaterad statistik (startad av MMON).
För att vi ska få se några slavprocesser öppnar vi databasen:
Vi kollar vilka processer som "ORACLE" kör direkt efter öppningen:
SQL>
ALTER DATABASE MOUNT;
Database altered.
idle> ALTER DATABASE OPEN;
Database altered.
Vi ser att instansen har skapat 11 nya processer (process 17 till 27):
[olle@dev1]$ ps -ef |grep ^oracle |nl
1 oracle 3913 3910 0 15:32 pts/1 00:00:00 -bash
2 oracle 3939 3913 0 15:32 pts/1 00:00:00 sqlplus as sysdba
3 oracle 3942 1 0 15:33 ? 00:00:00 ora_pmon_orcl
4 oracle 3944 1 0 15:33 ? 00:00:00 ora_psp0_orcl
5 oracle 3946 1 0 15:33 ? 00:00:00 ora_mman_orcl
6 oracle 3948 1 0 15:33 ? 00:00:00 ora_dbw0_orcl
7 oracle 3950 1 0 15:33 ? 00:00:00 ora_lgwr_orcl
8 oracle 3952 1 0 15:33 ? 00:00:00 ora_ckpt_orcl
9 oracle 3954 1 0 15:33 ? 00:00:00 ora_smon_orcl
10 oracle 3956 1 0 15:33 ? 00:00:00 ora_reco_orcl
11 oracle 3958 1 0 15:33 ? 00:00:00 ora_cjq0_orcl
12 oracle 3960 1 0 15:33 ? 00:00:01 ora_mmon_orcl
13 oracle 3962 1 0 15:33 ? 00:00:00 ora_mmnl_orcl
14 oracle 3964 1 0 15:33 ? 00:00:00 ora_d000_orcl
15 oracle 3966 1 0 15:33 ? 00:00:00 ora_s000_orcl
16 oracle 3967 3939 0 15:33 ? 00:00:02 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=( PROTOCOL=beq)))
17 oracle 6553 1 0 17:10 ? 00:00:00 ora_qmnc_orcl
18 oracle 6555 1 5 17:10 ? 00:00:00 ora_q000_orcl
19 oracle 6557 1 2 17:10 ? 00:00:00 ora_j000_orcl
20 oracle 6559 1 3 17:10 ? 00:00:00 ora_m000_orcl
21 oracle 6561 1 3 17:10 ? 00:00:00 ora_j001_orcl
22 oracle 6563 1 5 17:10 ? 00:00:00 ora_j002_orcl
23 oracle 6565 1 3 17:10 ? 00:00:00 ora_j003_orcl
24 oracle 6567 1 5 17:10 ? 00:00:00 ora_j004_orcl
25 oracle 6571 1 2 17:10 ? 00:00:00 ora_j005_orcl
26 oracle 6575 1 3 17:10 ? 00:00:00 ora_j006_orcl
27 oracle 6577 1 0 17:10 ? 00:00:00 ora_j007_orcl
Om vi väntar en stund och sedan listar processerna så ser vi att många av de nya processerna har försvunnit:
Det är för att jobben som startas i samband med uppstart har kört klart.
[olle@dev1]$ ps -ef |grep ^oracle |nl
1 oracle 3913 3910 0 15:32 pts/1 00:00:00 -bash
2 oracle 3939 3913 0 15:32 pts/1 00:00:00 sqlplus as sysdba
3 oracle 3942 1 0 15:33 ? 00:00:00 ora_pmon_orcl
4 oracle 3944 1 0 15:33 ? 00:00:00 ora_psp0_orcl
5 oracle 3946 1 0 15:33 ? 00:00:00 ora_mman_orcl
6 oracle 3948 1 0 15:33 ? 00:00:00 ora_dbw0_orcl
7 oracle 3950 1 0 15:33 ? 00:00:00 ora_lgwr_orcl
8 oracle 3952 1 0 15:33 ? 00:00:00 ora_ckpt_orcl
9 oracle 3954 1 0 15:33 ? 00:00:00 ora_smon_orcl
10 oracle 3956 1 0 15:33 ? 00:00:00 ora_reco_orcl
11 oracle 3958 1 0 15:33 ? 00:00:01 ora_cjq0_orcl
12 oracle 3960 1 0 15:33 ? 00:00:02 ora_mmon_orcl
13 oracle 3962 1 0 15:33 ? 00:00:00 ora_mmnl_orcl
14 oracle 3964 1 0 15:33 ? 00:00:00 ora_d000_orcl
15 oracle 3966 1 0 15:33 ? 00:00:00 ora_s000_orcl
16 oracle 3967 3939 0 15:33 ? 00:00:02 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
17 oracle 6553 1 0 17:10 ? 00:00:00 ora_qmnc_orcl
18 oracle 6555 1 0 17:10 ? 00:00:00 ora_q000_orcl
19 oracle 6582 1 0 17:11 ? 00:00:00 ora_q001_orcl
20 oracle 6595 1 1 17:19 ? 00:00:00 ora_j000_orcl
4. Obligatoriska bakgrundsprocesser
Det finns 5 bakgrundsprocesser som är obligatoriska för en normal (dedikerad) installation. Om någon av dessa processer kraschar (eller dödas av t.ex. en dba) kommer instansen att omedelbart gå ner. De obligatoriska processerna är:
Klicka på någon av processerna för att se en närmare beskrivning.
5. Döda en bakgrundprocess
Ibland har instansen hängt sig så att inte ens SHUTDOWN ABORT fungerar. Då kan det enda sättet att få ner instansen vara att döda en av de obligatoriska processerna.
Man kan döda en process genom att först kolla vilket PID (process ID) den har. Vi ser ovan att PMON har PID=3961. Vi dödar PMON på detta sätt:
Vi såg nu att alla andra "ora_xxxx_orcl"-processer är borta, vilket betyder att instansen gått ner.
[root@dev1]# kill -9 3961
[root@dev1]# ps -ef |grep ^oracle|nl
1 oracle 3929 3926 0 08:06 pts/2 00:00:00 -bash
2 oracle 3955 3929 0 08:06 pts/2 00:00:00 sqlplus as sysdba
3 oracle 21315 21314 0 13:36 pts/1 00:00:00 -bash